Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_PrefabPreviewEntity.c
Go to the documentation of this file.
1[EntityEditorProps(category: "GameScripted/Preview", color: "0 0 0 0", dynamicBox: true)]
5
9{
10 [Attribute(uiwidget: UIWidgets.ResourcePickerThumbnail, category: "Prefab Preview Entity", params: "et")]
12
13 [Attribute("{58F07022C12D0CF5}Assets/Editor/PlacingPreview/Preview.emat", UIWidgets.ResourcePickerThumbnail, "Material used when regenerating the preview.", category: "Preview", params: "emat")]
14 private ResourceName m_PreviewMaterial;
15
25 static SCR_BasePreviewEntity SpawnPreviewFromPrefab(Resource prefabResource, ResourceName previewPrefab, BaseWorld world = null, EntitySpawnParams spawnParams = null, ResourceName material = ResourceName.Empty, EPreviewEntityFlag flags = 0)
26 {
27 return SpawnPreview(GetPreviewEntriesFromPrefab(prefabResource), previewPrefab, world, spawnParams, material, flags);
28 }
29
35 static array<ref SCR_BasePreviewEntry> GetPreviewEntriesFromPrefab(Resource prefabResource)
36 {
37 IEntitySource entitySource = SCR_BaseContainerTools.FindEntitySource(prefabResource);
38 array<ref SCR_BasePreviewEntry> entries = {};
39 GetPreviewEntries(entitySource, entries);
40 return entries;
41 }
42
48 static void GetPreviewEntries(IEntitySource entitySource, out notnull array<ref SCR_BasePreviewEntry> outEntries, int parentID = -1, SCR_BasePreviewEntry entry = null, EPreviewEntityFlag flags = 0)
49 {
50 EntityFlags entityFlags;
51 entitySource.Get("Flags", entityFlags);
52 if (entityFlags & EntityFlags.EDITOR_ONLY)
53 return;
54
55 //--- Get transformation (if it's not defined in a param)
56 SCR_BasePreviewEntry entryLocal = entry;
57 if (!entryLocal)
58 {
59 entryLocal = new SCR_BasePreviewEntry(true);
60
61 if (parentID != -1) //--- Always center prefab root to 0,0,0
62 entitySource.Get("coords", entryLocal.m_vPosition);
63
64
65 float scale;
66 entitySource.Get("scale", scale);
67 entryLocal.SetScale(scale);
68
69 //if (parentID == 0)
70 // entryLocal.m_fScale *= entryLocal.m_fScale; //--- Compensate for parent scale (why though?)
71
72 entitySource.Get("angles", entryLocal.m_vAngles);
73
74 }
75 entryLocal.m_EntitySource = entitySource;
76 entryLocal.m_iParentID = parentID;
77 entryLocal.m_vAnglesTerrain = Vector(0, entryLocal.m_vAngles[0], entryLocal.m_vAngles[2]);
78 entryLocal.m_fHeightTerrain = entryLocal.m_vPosition[1];
79 parentID = outEntries.Insert(entryLocal);
80
81 //--- Find relevant components
82 int componentCount = entitySource.GetComponentCount();
83 IEntityComponentSource componentSource;
84 bool componentEnabled;
85
86 //--- First pass - get flags and check if it has preview prefab
87 for (int i = 0; i < componentCount; i++)
88 {
89 componentSource = entitySource.GetComponent(i);
90 componentSource.Get("Enabled", componentEnabled);
91 if (!componentEnabled)
92 continue;
93
94 if (componentSource.GetClassName().ToType().IsInherited(SCR_PreviewEntityComponent) && !SCR_Enum.HasFlag(flags, EPreviewEntityFlag.IGNORE_PREFAB))
95 {
96 //--- Entries pre-defined in the component, use them instead of scanning entity source dynamically
97 BaseContainerList entryList = componentSource.GetObjectArray("m_aEntries");
98 int entryCount = entryList.Count();
99 if (entryCount > 0)
100 {
101 //--- Preview defined as an array of entries
102 int indexStart = 0;
103 for (int e = entryCount - 1; e >= 0; e--)
104 {
105 int itemParentID;
106 if (entryList.Get(e).Get("m_iParentID", itemParentID) && itemParentID == -1)
107 {
108 //--- If multiple parents are detected, use only the last one and following children. Can happen in inherited prefabs that contain parent's preview.
109 indexStart = e;
110 break;
111 }
112 }
113
114 SCR_BasePreviewEntry listEntry;
115 for (int e = indexStart; e < entryCount; e++)
116 {
117 listEntry = SCR_BasePreviewEntry.Cast(BaseContainerTools.CreateInstanceFromContainer(entryList.Get(e)));
118 if (listEntry.m_iParentID == -1)
119 {
120 //--- Apply custom icon offset (only if the entity is root)
121 if (parentID == 0)
122 entryLocal.m_vPosition == listEntry.m_vPosition;
123
124 entryLocal.m_Mesh = listEntry.m_Mesh;
125 entryLocal.m_Shape = listEntry.m_Shape;
126 entryLocal.m_Flags = listEntry.m_Flags;
127 }
128 else
129 {
130 outEntries.Insert(listEntry);
131 listEntry.m_iParentID += parentID;
132 listEntry.m_vAnglesTerrain = Vector(0, listEntry.m_vAngles[0], listEntry.m_vAngles[2]);
133 listEntry.m_fHeightTerrain = listEntry.m_vPosition[1];
134 }
135 }
136 if (entryCount > 0)
137 return;
138 }
139 else
140 {
141 //--- Preview defined as a prefab, use that one
142 componentSource.Get("m_PreviewPrefab", entryLocal.m_Mesh);
143 entryLocal.m_Shape = EPreviewEntityShape.PREFAB;
144 return;
145 }
146 }
147 }
148
149 //--- Second pass (when no preview prefab exists) - get mesh and process children
150 string componentClassName;
151 typename componentType;
152 EAreaMeshShape areaMeshShape;
153 for (int i = 0; i < componentCount; i++)
154 {
155 componentSource = entitySource.GetComponent(i);
156 componentSource.Get("Enabled", componentEnabled);
157 if (!componentEnabled)
158 continue;
159
160 componentClassName = componentSource.GetClassName();
161 componentType = componentClassName.ToType();
162 switch (true)
163 {
164 case (componentClassName == "Hierarchy" && !entryLocal.m_iPivotID):
165 {
166 componentSource.Get("PivotID", entryLocal.m_iPivotID);
167 break;
168 }
169 case (componentClassName == "MeshObject"):
170 {
171 componentSource.Get("Object", entryLocal.m_Mesh);
172 entryLocal.m_Shape = EPreviewEntityShape.MESH;
173 break;
174 }
175 case (componentType.IsInherited(SlotManagerComponent)):
176 {
177 BaseContainerList slots = componentSource.GetObjectArray("Slots");
178 for (int s = 0, slotCount = slots.Count(); s < slotCount; s++)
179 {
180 GetPreviewEntriesFromSlot(slots.Get(s), outEntries, parentID);
181 }
182 break;
183 }
184 case (componentType.IsInherited(BaseSlotComponent) || componentType.IsInherited(WeaponSlotComponent)):
185 {
186 BaseContainer attachType = componentSource.GetObject("AttachType");
187 if (!attachType)
188 break;
189
190 ResourceName slotPrefab;
191 componentSource.Get("EntityPrefab", slotPrefab);
192 if (!slotPrefab)
193 componentSource.Get("WeaponTemplate", slotPrefab);
194
195 GetPreviewEntriesFromSlot(attachType, outEntries, parentID, slotPrefab);
196 break;
197 }
198 case (componentType.IsInherited(SCR_EditorLinkComponent)):
199 {
200 BaseContainerList entries = componentSource.GetObjectArray("m_aEntries");
201 SCR_EditorLinkEntry link;
202 for (int e = 0, linkCount = entries.Count(); e < linkCount; e++)
203 {
204 link = SCR_EditorLinkEntry.Cast(BaseContainerTools.CreateInstanceFromContainer(entries.Get(e)));
205 GetPreviewEntriesFromLink(link, outEntries, parentID, entryLocal.GetScale());
206 }
207 break;
208 }
209 case (componentType.IsInherited(SCR_EditableEntityComponent)):
210 {
211 EEditableEntityFlag editableFlags = SCR_EditableEntityComponentClass.GetEntityFlags(componentSource);
212
213 entryLocal.m_Flags |= EPreviewEntityFlag.EDITABLE;
214
215 if (SCR_Enum.HasFlag(editableFlags, EEditableEntityFlag.HORIZONTAL))
216 entryLocal.m_Flags |= EPreviewEntityFlag.HORIZONTAL;
217
218 if (SCR_Enum.HasFlag(editableFlags, EEditableEntityFlag.ORIENT_CHILDREN))
219 entryLocal.m_Flags |= EPreviewEntityFlag.ORIENT_CHILDREN;
220
221 vector iconPos;
222 componentSource.Get("m_vIconPos", iconPos);
223 if (iconPos != vector.Zero)
224 entryLocal.m_vPosition -= iconPos;
225
226 break;
227 }
228 case (componentType.IsInherited(SCR_SlotCompositionComponent)):
229 {
230 bool orientChildren;
231 componentSource.Get("m_bOrientChildrenToTerrain", orientChildren);
232 if (orientChildren)
233 entryLocal.m_Flags |= EPreviewEntityFlag.ORIENT_CHILDREN;
234
235 break;
236 }
237 case (componentType.IsInherited(SCR_HorizontalAlignComponent)):
238 {
239 entryLocal.m_Flags |= EPreviewEntityFlag.HORIZONTAL;
240 break;
241 }
242 //~ Area mesh previews. Add any new area mesh preview here that inherent from SCR_BaseAreaMeshComponent!
243 case (componentType.IsInherited(SCR_BaseAreaMeshComponent)):
244 {
245 //~ Only show area mesh preview if editor is open and unlimited
246 SCR_EditorModeEntity mode = SCR_EditorModeEntity.GetInstance();
247 if (!SCR_EditorManagerEntity.IsOpenedInstance() || !mode || mode.IsLimited())
248 break;
249
250 //~ Area mesh previews
251 switch (true)
252 {
253 case (componentType.IsInherited(SCR_TriggerAreaMeshComponent)):
254 {
255 //~ Get Shape
256 componentSource.Get("m_eShape", areaMeshShape);
257 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
258 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
259 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
260 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
261 else
262 break;
263
264 float radius, height;
265 entitySource.Get("SphereRadius", radius);
266 componentSource.Get("m_fHeight", height);
267
268 entryLocal.m_vScale = Vector(radius, height, radius);
269
270 break;
271 }
272 case (componentType.IsInherited(SCR_WaypointAreaMeshComponent)):
273 {
274 //~ Get Shape
275 componentSource.Get("m_eShape", areaMeshShape);
276 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
277 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
278 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
279 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
280 else
281 break;
282
283 float radius, height;
284 entitySource.Get("CompletionRadius", radius);
285 componentSource.Get("m_fHeight", height);
286
287 entryLocal.m_vScale = Vector(radius, height, radius);
288
289 break;
290 }
291 case (componentType.IsInherited(SCR_SpawnPointAreaMeshComponent)):
292 {
293 //~ Get Shape
294 componentSource.Get("m_eShape", areaMeshShape);
295 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
296 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
297 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
298 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
299 else
300 break;
301
302 float radius, height;
303 entitySource.Get("m_fSpawnRadius", radius);
304 componentSource.Get("m_fHeight", height);
305
306 entryLocal.m_vScale = Vector(radius, height, radius);
307
308 break;
309 }
310 case (componentType.IsInherited(SCR_CustomAreaMeshComponent)):
311 {
312 //~ Get Shape
313 componentSource.Get("m_eShape", areaMeshShape);
314 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
315 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
316 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
317 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
318 else
319 break;
320
321 float radius, height;
322 componentSource.Get("m_fRadius", radius);
323 componentSource.Get("m_fHeight", height);
324
325 entryLocal.m_vScale = Vector(radius, height, radius);
326
327 break;
328 }
329 case (componentType.IsInherited(SCR_ZoneRestrictionAreaMeshComponent)):
330 {
331 //~ Get Shape
332 componentSource.Get("m_eShape", areaMeshShape);
333 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
334 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
335 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
336 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
337 else
338 break;
339
340 float radius, height;
341 entitySource.Get("m_fZoneRadius", radius);
342 componentSource.Get("m_fHeight", height);
343
344 entryLocal.m_vScale = Vector(radius, height, radius);
345
346 break;
347 }
348 case (componentType.IsInherited(SCR_SupportStationAreaMeshComponent)):
349 {
350 //~ Get Shape
351 componentSource.Get("m_eShape", areaMeshShape);
352 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
353 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
354 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
355 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
356 else
357 break;
358
359 //~ Get SCR_BaseSupportStationComponent
360 for (int c = 0; c < componentCount; c++)
361 {
362 IEntityComponentSource supportStation_componentSource = entitySource.GetComponent(c);
363
364 bool supportStation_componentEnabled;
365 supportStation_componentSource.Get("Enabled", supportStation_componentEnabled);
366 if (!supportStation_componentEnabled)
367 continue;
368
369 string supportStation_componentClassName = supportStation_componentSource.GetClassName();
370 if (!supportStation_componentClassName.ToType().IsInherited(SCR_BaseSupportStationComponent))
371 continue;
372
373 float radius, height;
374 supportStation_componentSource.Get("m_fRange", radius);
375 componentSource.Get("m_fHeight", height);
376
377 entryLocal.m_vScale = Vector(radius, height, radius);
378 break;
379 }
380
381 //~ Fails to get the radius from the Support Station component so use preview instead
382 float radius, height;
383 componentSource.Get("m_fRadius", radius);
384 componentSource.Get("m_fHeight", height);
385 entryLocal.m_vScale = Vector(radius, height, radius);
386
387 break;
388 }
389 case (componentType.IsInherited(SCR_EffectsModuleAreaMeshComponent)):
390 {
391 //~ Get Shape
392 componentSource.Get("m_eShape", areaMeshShape);
393 if (areaMeshShape == EAreaMeshShape.ELLIPSE)
394 entryLocal.m_Shape = EPreviewEntityShape.ELLIPSE;
395 else if (areaMeshShape == EAreaMeshShape.RECTANGLE)
396 entryLocal.m_Shape = EPreviewEntityShape.RECTANGLE;
397 else
398 break;
399
400 float width, lenght, height;
401 componentSource.Get("m_fWidth", width);
402 componentSource.Get("m_fLenght", lenght);
403 componentSource.Get("m_fHeight", height);
404
405 entryLocal.m_vScale = Vector(width, height, lenght);
406 break;
407 }
408
409 break;
410 }
411 }
412 }
413 }
414
415 //--- Spawn AI group members
416 array<ResourceName> groupPrefabs = new array<ResourceName>;
417 array<vector> groupOffsets = new array<vector>;
418 int groupSize = SCR_AIGroupClass.GetMembers(entitySource, groupPrefabs, groupOffsets);
419 if (groupSize != 0)
420 {
421 SCR_BasePreviewEntry groupMemberEntry;
422 IEntitySource groupMemberSource;
423 for (int i = 0; i < groupSize; i++)
424 {
425 Resource resource = Resource.Load(groupPrefabs[i]);
426 groupMemberSource = SCR_BaseContainerTools.FindEntitySource(resource);
427 groupMemberEntry = new SCR_BasePreviewEntry(true);
428 groupMemberEntry.m_vPosition = groupOffsets[i];
429 groupMemberEntry.m_Resource = resource;
430 GetPreviewEntries(groupMemberSource, outEntries, parentID, groupMemberEntry);
431 }
432 }
433
434 //--- Process children
435 for (int i = 0, count = entitySource.GetNumChildren(); i < count; i++)
436 {
437 GetPreviewEntries(entitySource.GetChild(i), outEntries, parentID);
438 }
439 }
440
441 protected static void GetPreviewEntriesFromSlot(BaseContainer slotSource, out notnull array<ref SCR_BasePreviewEntry> outEntries, int parentID = -1, ResourceName slotPrefab = ResourceName.Empty)
442 {
443 if (!slotPrefab)
444 slotSource.Get("Prefab", slotPrefab);
445
446 if (!slotPrefab)
447 return;
448
449 bool isEnabled;
450 slotSource.Get("Enabled", isEnabled);
451
452 if (!isEnabled)
453 return;
454
455 //Don't show supply boxes at vehicle previews
456 if (slotSource.GetName().Contains("SupplyStorage"))
457 return;
458
459 Resource resource = Resource.Load(slotPrefab);
460 IEntitySource entitySource = SCR_BaseContainerTools.FindEntitySource(resource);
461 if (!entitySource)
462 return;
463
465 entry.m_Resource = resource;
466 slotSource.Get("Offset", entry.m_vPosition);
467 slotSource.Get("Angles", entry.m_vAngles);
468 slotSource.Get("PivotID", entry.m_iPivotID);
469
470 GetPreviewEntries(entitySource, outEntries, parentID, entry);
471 }
472 protected static void GetPreviewEntriesFromLink(SCR_EditorLinkEntry link, out notnull array<ref SCR_BasePreviewEntry> outEntries, int parentID = -1, float parentScale = 1)
473 {
474 Resource resource = Resource.Load(link.m_Prefab);
475 IEntitySource entitySource = SCR_BaseContainerTools.FindEntitySource(resource);
476 if (!entitySource)
477 return;
478
480 entry.m_Resource = resource;
481 entry.m_vPosition = link.m_vPosition;
482 entry.m_vAngles = link.m_vAngles;
483 entry.SetScale(link.m_fScale);
484
485 GetPreviewEntries(entitySource, outEntries, parentID, entry);
486 }
487
489#ifdef WORKBENCH
490 void CreatePrefabFromSource(WorldEditorAPI api, ResourceName basePrefab)
491 {
492 Resource baseResource = Resource.Load(basePrefab);
493 if (!baseResource.IsValid())
494 return;
495
496 IEntitySource baseSource = baseResource.GetResource().ToEntitySource();
497 if (!baseSource)
498 return;
499
500 array<ref SCR_BasePreviewEntry> entries = {};
501 GetPreviewEntries(baseSource, entries, flags: EPreviewEntityFlag.IGNORE_PREFAB);
502
503 //--- Create prefab
504 IEntitySource child, parent;
505 IEntityComponentSource component;
506 array<ref IEntitySource> children = {};
507 string className = "SCR_PrefabPreviewEntity";
508 foreach (int i, SCR_BasePreviewEntry entry: entries)
509 {
510 if (entry.m_iParentID == -1)
511 parent = null;
512 else
513 parent = children[entry.m_iParentID];
514
515 child = api.CreateEntity(className, "", 0, parent, entry.m_vPosition, entry.m_vAngles);
516 children.Insert(child);
517
518 child.Set("scale", entry.GetScale());
519 child.Set("m_Flags", entry.m_Flags);
520
521 if (i == 0)
522 {
523 className = "SCR_BasePreviewEntity";
524 }
525 else
526 {
527 api.CreateComponent(child, "Hierarchy");
528
529 if (!entry.m_iPivotID.IsEmpty())
530 api.SetVariableValue(child, {ContainerIdPathEntry("Hierarchy")}, "PivotID", entry.m_iPivotID);
531
532 //EntityFlags flags;
533 //child.Get("Flags", flags);
534 //child.Set("Flags", flags | EntityFlags.PROXY);
535 }
536
537 if (entry.m_Mesh)
538 {
539 component = api.CreateComponent(child, "MeshObject");
540 api.SetVariableValue(child, {ContainerIdPathEntry("MeshObject")}, "Object", entry.m_Mesh);
541
542 Resource resource = Resource.Load(entry.m_Mesh);
543 if (!resource.IsValid())
544 {
545 Print("Cannot load " + entry.m_Mesh + " | " + FilePath.StripPath(__FILE__) + ":" + __LINE__, LogLevel.WARNING);
546 return;
547 }
548
549 VObject mesh = resource.GetResource().ToVObject();
550 string materials[256];
551 for (int m = 0, materialsCount = mesh.GetMaterials(materials); m < materialsCount; m++)
552 {
553 api.CreateObjectArrayVariableMember(child, {ContainerIdPathEntry("MeshObject")}, "Materials", "MaterialAssignClass", m);
554 api.SetVariableValue(child, {ContainerIdPathEntry("MeshObject"), ContainerIdPathEntry("Materials", m)}, "SourceMaterial", materials[m]);
555 api.SetVariableValue(child, {ContainerIdPathEntry("MeshObject"), ContainerIdPathEntry("Materials", m)}, "AssignedMaterial", m_PreviewMaterial);
556 }
557 }
558 }
559
560 IEntitySource previewSource = children[0];
561 api.SetVariableValue(previewSource, null, "m_SourcePrefab", basePrefab);
562
563 //--- Save to file
564 ResourceName prefab = SCR_BaseContainerTools.GetPrefabResourceName(api.EntityToSource(this));
565 string absolutePath;
566 Workbench.GetAbsolutePath(prefab.GetPath(), absolutePath);
567 api.CreateEntityTemplate(previewSource, absolutePath);
568
569 api.DeleteEntity(previewSource);
570 }
571
572 override void _WB_OnContextMenu(int id)
573 {
574 WorldEditorAPI api = _WB_GetEditorAPI();
575 IEntitySource entitySource = api.EntityToSource(this);
576
577 ResourceName basePrefab;
578 entitySource.Get("m_SourcePrefab", basePrefab);
579
580 if (!basePrefab)
581 {
582 Debug.Error2(Type().ToString(), "m_SourcePrefab is empty!");
583 return;
584 }
585
586 api.BeginEntityAction();
587 CreatePrefabFromSource(api, basePrefab);
588 api.EndEntityAction();
589 }
590 override array<ref WB_UIMenuItem> _WB_GetContextMenuItems()
591 {
592 return { new WB_UIMenuItem("Generate preview prefab", 0) };
593 }
594#endif
595};
SCR_EAIThreatSectorFlags flags
vector scale
void ContainerIdPathEntry(string propertyName, int index=-1)
Definition worldEditor.c:30
EPreviewEntityFlag
EPreviewEntityShape
void SpawnPreview()
Create a preview if it does not exist.
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
void SCR_EditorManagerEntity(IEntitySource src, IEntity parent)
int Type
event array< ref WB_UIMenuItem > _WB_GetContextMenuItems()
An opportunity to append items into editor's "Entity" context menu. Do not call editor API here!
proto external WorldEditorAPI _WB_GetEditorAPI()
This returns world editor API, which is safe to use from editor events bellow.
event void _WB_OnContextMenu(int id)
User has chosen any of your menu item from editor's "Entity" menu which you have recently provided in...
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
void SCR_BasePreviewEntity(IEntitySource src, IEntity parent)
static void GetPreviewEntriesFromSlot(BaseContainer slotSource, out notnull array< ref SCR_BasePreviewEntry > outEntries, int parentID=-1, ResourceName slotPrefab=ResourceName.Empty)
static void GetPreviewEntriesFromLink(SCR_EditorLinkEntry link, out notnull array< ref SCR_BasePreviewEntry > outEntries, int parentID=-1, float parentScale=1)
void EntitySpawnParams()
Definition gameLib.c:130
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
EEditableEntityFlag
Unique flags of the entity.
SCR_FieldOfViewSettings Attribute
EntityFlags
Various entity flags.
Definition EntityFlags.c:14
proto external string ToString()
Plain C++ pointer, no weak pointers, no memory management.
proto native vector Vector(float x, float y, float z)
void Debug()
Definition Types.c:327