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