Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_ContentBrowserEditorComponent.c
Go to the documentation of this file.
1 [ComponentEditorProps(category: "GameScripted/Editor", description: "Management of placeable entities. Works only with SCR_EditorBaseEntity!", icon: "WBData/ComponentEditorProps/componentEditor.png")]
3 {
4 }
5 
6 
7 void ScriptInvoker_BrowserBudgetPreviewRefresh(array<ref SCR_EntityBudgetValue> previewCosts);
9 typedef ScriptInvokerBase<ScriptInvoker_BrowserBudgetPreviewRefresh> ScriptInvoker_BrowserBudgetPreviewRefreshEvent;
10 
17 {
18  [Attribute("1", "If true will show the faction icon on the content browser cards, If false will hide them")]
19  protected bool m_bShowFactionOnContentBrowserCards;
20 
21  protected const int ASYNC_TICK_LENGTH = 16; //--- How many ticks are allowed per async loading cycle
22 
23  /*[Attribute("0", uiwidget: UIWidgets.ComboBox, "Labels that are active by default", "", ParamEnumArray.FromEnum(EEditableEntityLabel))]
24  protected ref array<EEditableEntityLabel> m_DefaultActiveLabels; */
25 
26  [Attribute(desc: "Content browser menu preset.", defvalue: "-1", uiwidget: UIWidgets.ComboBox, enums: ParamEnumArray.FromEnum(ChimeraMenuPreset))]
27  private ChimeraMenuPreset m_MenuPreset;
28 
29  [Attribute("1", desc: "If true it makes sure that the content browser states are loaded from user settings. Else keeps the keeps the sates as defined in m_aContentBrowserTabStates")]
30  protected bool m_bUsePersistentBrowserStates;
31 
32  [Attribute(desc: "A list of saved states of the content browser such as labels and pagination. Index 0 is the saved hand filters.")]
33  protected ref array<ref SCR_EditorContentBrowserSaveStateDataUI> m_aContentBrowserTabStates;
34 
35  [Attribute(desc: "Entities with blacklisted labels are not displayed in the content browser unless a SCR_EditorContentBrowserDisplayConfig is used when opening the content browser and the label is in the AlwaysActiveLabels", uiwidget: UIWidgets.SearchComboBox, enums: ParamEnumArray.FromEnum(EEditableEntityLabel))]
36  protected ref array<EEditableEntityLabel> m_eBlackListedLabels;
37 
38  //~ Saved content browser state when content browser is opened with config
39  protected ref map<ref SCR_EditorContentBrowserDisplayConfig, ref SCR_EditorContentBrowserSaveStateData> m_mContentBrowserConfigStates = new map<ref SCR_EditorContentBrowserDisplayConfig, ref SCR_EditorContentBrowserSaveStateData>;
40 
41  protected ref set<ref SCR_EditableEntityCache> m_aExtendedEntitiesCache = new set<ref SCR_EditableEntityCache>();
42 
43  protected ref SCR_EditorContentBrowserDisplayConfig m_ContentBrowserConfig;
44 
45  private ref array<EEditableEntityLabel> m_ActiveLabels = {};
46 
47  protected ref array<ref SCR_EditableEntityCoreLabelGroupSetting> m_LabelGroups = {};
48 
49  //~ An array of all the hidden state tabs
50  protected ref array<int> m_aHiddenStateTabs = {};
51 
52  protected ref array<int> m_aFilteredPrefabIDs = {};
53  protected ref array<string> m_aLocalizationKeys = {};
54  protected int m_iFilteredPrefabIDsCount;
55 
56  protected SCR_MenuEditorComponent m_EditorMenuManager;
57  protected SCR_PlacingEditorComponent m_PlacingManager;
58  protected SCR_PlacingEditorComponentClass m_PlacingManagerData;
59  protected SCR_BudgetEditorComponent m_BudgetManager;
60  protected SCR_PrefabsCacheEditorComponent m_PrefabsCache;
61  protected ref array<ref SCR_EditableEntityUIInfo> m_aInfos;
62  protected ref array<ResourceName> m_aAsyncPrefabs;
63  protected int m_iAsyncIndex;
64 
65  protected int m_iBrowserStateIndex = 0;
66  protected int m_iPageIndex;
67  protected int m_iPageEntryCount = 15;
68  protected string m_sCurrentSearchText;
69  protected string m_sLastSearchText;
70  protected bool m_bShowEntityBudgetCost;
71 
72  protected SCR_EditableEntityComponent m_ExtendedEntity;
73  protected SCR_EditableEntityCore m_EntityCore;
74 
75  protected ref ScriptInvoker Event_OnLabelChanged = new ScriptInvoker;
76  protected ref ScriptInvoker Event_OnSearchConfirm = new ScriptInvoker; //~ Sends current search string
77  protected ref ScriptInvoker Event_OnBrowserStatesSaved = new ScriptInvoker;
78  protected ref ScriptInvoker Event_OnBrowserStatePreload = new ScriptInvoker;
79  protected ref ScriptInvoker Event_OnBrowserStateLoaded = new ScriptInvoker;
80  protected ref ScriptInvoker Event_OnBrowserEntriesFiltered = new ScriptInvoker;
81  protected ref ScriptInvoker Event_OnBrowserStateCleared = new ScriptInvoker;
82  protected ref ScriptInvoker Event_OnEnableSaveStateTabs = new ScriptInvoker; //~ Sends enable bool
83  protected ref ScriptInvoker Event_OnStateTabVisibilityChanged = new ScriptInvoker; //~ Sends index and if visible or not
84 
90  ResourceName GetResourceNamePrefabID(int prefabID)
91  {
92  if (m_PlacingManagerData)
93  return m_PlacingManagerData.GetPrefab(prefabID);
94  else
95  return ResourceName.Empty;
96  }
97 
103  int GetFilteredPrefabID(int index)
104  {
105  if (index >= 0 && index < m_aFilteredPrefabIDs.Count())
106  {
107  return m_aFilteredPrefabIDs.Get(index);
108  }
109  return -1;
110  }
111 
117  int GetFilteredPrefabCount()
118  {
119  return m_iFilteredPrefabIDsCount;
120  }
121 
122  //------------------------------------------------------------------------------------------------
126  bool AreFactionsShownOnContentCards()
127  {
128  return m_bShowFactionOnContentBrowserCards;
129  }
130 
131  //------------------------------------------------------------------------------------------------
136  int FilterExtendedSlots()
137  {
138  SCR_EditableEntityComponent extendedEntity = GetExtendedEntity();
139  if (!extendedEntity)
140  return 0;
141 
142  ResourceName extendedEntityResource = extendedEntity.GetPrefab();
143  SCR_EditableEntityCache extendedEntityCache = FindExtendedEntityCache(extendedEntityResource);
144 
145  if (!extendedEntityCache)
146  return 0;
147 
148  set<int> extendableEntities = new set<int>();
149  extendedEntityCache.GetExtendedEntities(extendableEntities);
150  m_aFilteredPrefabIDs.Clear();
151 
152  foreach (int prefabID : extendableEntities)
153  {
154  m_aFilteredPrefabIDs.Insert(prefabID);
155  }
156 
157  m_iFilteredPrefabIDsCount = m_aFilteredPrefabIDs.Count();
158  return m_iFilteredPrefabIDsCount;
159  }
160 
161  //------------------------------------------------------------------------------------------------
162  bool IsExtendedEntity(notnull SCR_EditableEntityComponent entity)
163  {
164  return FindExtendedEntityCache(entity.GetPrefab()) != null;
165  }
166 
167  //------------------------------------------------------------------------------------------------
173  int GetValidBlackListedLabels(out notnull array<EEditableEntityLabel> validBlackListLabels)
174  {
175  if (m_ContentBrowserConfig)
176  {
177  validBlackListLabels.Clear();
178 
179  foreach (EEditableEntityLabel label : m_eBlackListedLabels)
180  {
181  //~ only add non "always active" labels
182  if (!m_ContentBrowserConfig.IsAlwaysActiveLabel(label))
183  validBlackListLabels.Insert(label);
184  }
185  }
186  else
187  {
188  validBlackListLabels.Copy(m_eBlackListedLabels);
189  }
190 
191  return validBlackListLabels.Count();
192  }
193 
194  //------------------------------------------------------------------------------------------------
195  protected SCR_EditableEntityCache FindExtendedEntityCache(ResourceName extendedEntityResource)
196  {
197  foreach (SCR_EditableEntityCache entityCache : m_aExtendedEntitiesCache)
198  {
199  if (entityCache.GetPrefab() == extendedEntityResource)
200  return entityCache;
201  }
202 
203  set<int> extendedEntities = new set<int>();
204 
205  SCR_EditableEntityUIInfo info = null;
206  for (int prefabId, count = GetInfoCount(); prefabId < count; prefabId++)
207  {
208  info = GetInfo(prefabId);
209  if (!info)
210  continue;
211 
212  if (extendedEntityResource == info.GetSlotPrefab())
213  extendedEntities.Insert(prefabId);
214  }
215 
216  if (extendedEntities.Count() <= 0)
217  return null;
218 
219  SCR_EditableEntityCache extendedEntityCache = new SCR_EditableEntityCache();
220  m_aExtendedEntitiesCache.Insert(extendedEntityCache);
221  extendedEntityCache.SetExtendedEntities(extendedEntities);
222  extendedEntityCache.SetPrefab(extendedEntityResource);
223 
224  return extendedEntityCache;
225  }
226 
231  void FilterEntries()
232  {
233  if (GetExtendedEntity())
234  return;
235 
236  // Filter labels
237  m_aFilteredPrefabIDs.Clear();
238  m_aLocalizationKeys.Clear();
239  array<EEditableEntityLabel> entityLabels = {};
240 
241  array<EEditableEntityLabel> validBlackListLabels = {};
242  GetValidBlackListedLabels(validBlackListLabels);
243 
244  bool isBlackListed;
246  int count = GetInfoCount();
247  for (int i = 0; i < count; i++)
248  {
249  isBlackListed = false;
250  entityLabels.Clear();
251  info = GetInfo(i);
252 
253  if (!info)
254  {
255  continue;
256  }
257 
258  info.GetEntityLabels(entityLabels);
259  if (!IsMatchingToggledLabels(entityLabels))
260  continue;
261 
262  //~ Ignore entities with blacklist labels
263  foreach (EEditableEntityLabel blackListLabel : validBlackListLabels)
264  {
265  if (entityLabels.Contains(blackListLabel))
266  {
267  isBlackListed = true;
268  break;
269  }
270  }
271 
272  //~ Entity has a blacklisted label so don't show it
273  if (isBlackListed)
274  continue;
275 
276  m_aFilteredPrefabIDs.Insert(i);
277 
278  m_aLocalizationKeys.Insert(info.GetName());
279  }
280 
281  // Search
282  string currentSearch = GetCurrentSearch();
283  if (!currentSearch.IsEmpty())
284  {
285  array<int> searchResultPrefabID = {}, searchResultIndices = {};
286  WidgetManager.SearchLocalized(currentSearch, m_aLocalizationKeys, searchResultIndices);
287 
288  foreach (int searchResultIndex : searchResultIndices)
289  {
290  int prefabID = m_aFilteredPrefabIDs.Get(searchResultIndex);
291  searchResultPrefabID.Insert(prefabID);
292  }
293  m_aFilteredPrefabIDs.Copy(searchResultPrefabID);
294  }
295 
296  m_iFilteredPrefabIDsCount = m_aFilteredPrefabIDs.Count();
297 
298  Event_OnBrowserEntriesFiltered.Invoke();
299  }
300 
301  bool isMatchingToggledLabelsOfState(int savedStateIndex)
302  {
303  if (savedStateIndex >= m_aContentBrowserTabStates.Count())
304  return false;
305 
306  array<EEditableEntityLabel> activeLabels = {};
307 
308  m_aContentBrowserTabStates[savedStateIndex].GetLabels(activeLabels);
309  return IsMatchingToggledLabels(activeLabels);
310  }
311 
316  bool IsMatchingToggledLabels(notnull array<EEditableEntityLabel> entityLabels)
317  {
318  if (!IsAnyLabelActive())
319  {
320  return true;
321  }
322  if (entityLabels.IsEmpty())
323  {
324  return false;
325  }
326 
327  array<SCR_EditableEntityCoreLabelSetting> groupLabels = {};
328  foreach (SCR_EditableEntityCoreLabelGroupSetting labelGroup : m_LabelGroups)
329  {
330  EEditableEntityLabelGroup labelGroupType = labelGroup.GetLabelGroupType();
331 
332  m_EntityCore.GetLabelsOfGroup(labelGroupType, groupLabels);
333 
334  int activeLabels = 0;
335  int matchesActive = 0;
336 
337  bool needsAllActive = labelGroup.GetRequiresAllLabelsMatch();
338 
339  foreach (SCR_EditableEntityCoreLabelSetting entityLabelSetting : groupLabels)
340  {
341  EEditableEntityLabel entityLabel = entityLabelSetting.GetLabelType();
342  if (!IsLabelActive(entityLabel))
343  {
344  continue;
345  }
346  activeLabels++;
347  if (entityLabels.Find(entityLabel) != -1)
348  {
349  matchesActive++;
350  }
351  }
352 
353  if (activeLabels > 0)
354  {
355  if (needsAllActive && matchesActive != activeLabels)
356  {
357  return false;
358  }
359  else if (!needsAllActive && matchesActive == 0)
360  {
361  return false;
362  }
363  }
364  }
365 
366  return true;
367  }
368 
374  bool IsLabelActive(EEditableEntityLabel entityLabel)
375  {
376  return m_ActiveLabels.Find(entityLabel) != -1;
377  }
378 
383  bool IsAnyLabelActive()
384  {
385  return !m_ActiveLabels.IsEmpty();
386  }
387 
393  void SetLabel(EEditableEntityLabel entityLabel, bool active)
394  {
395  bool labelActive = IsLabelActive(entityLabel);
396  if (active && !labelActive)
397  {
398  m_ActiveLabels.Insert(entityLabel);
399  }
400  else if (!active && labelActive)
401  {
402  m_ActiveLabels.RemoveItem(entityLabel);
403  }
404 
405  Event_OnLabelChanged.Invoke(entityLabel, active);
406  }
407 
412  void ResetAllLabels(bool setConfigData = true)
413  {
414  m_ActiveLabels.Clear();
415 
416  if (setConfigData)
417  SetConfigLabels();
418  }
419 
420  void GetActiveLabels(out notnull array<EEditableEntityLabel> activeLabels)
421  {
422  activeLabels.Copy(m_ActiveLabels);
423  }
424 
425  int GetActiveLabelCount()
426  {
427  return m_ActiveLabels.Count();
428  }
429 
430  void GetLabelGroups(out notnull array<ref SCR_EditableEntityCoreLabelGroupSetting> labelGroups)
431  {
432  labelGroups = m_LabelGroups;
433  }
434 
435  bool GetLabelGroupType(EEditableEntityLabel entityLabel, out EEditableEntityLabelGroup groupLabel)
436  {
437  return m_EntityCore.GetLabelGroupType(entityLabel, groupLabel);
438  }
439 
445  int GetLabelGroupOrder(EEditableEntityLabelGroup groupLabel)
446  {
447  return m_EntityCore.GetLabelGroupOrder(groupLabel);
448  }
449 
450  bool GetLabelsOfGroup(EEditableEntityLabelGroup labelGroupType, out notnull array<SCR_EditableEntityCoreLabelSetting> labels)
451  {
452  return m_EntityCore.GetLabelsOfGroup(labelGroupType, labels);
453  }
454 
455  bool GetLabelUIInfo(EEditableEntityLabel entityLabel, out SCR_UIInfo uiInfo)
456  {
457  return m_EntityCore.GetLabelUIInfo(entityLabel, uiInfo);
458  }
459 
460  bool GetLabelUIInfoIfValid(EEditableEntityLabel entityLabel, EEditorMode currentMode, out SCR_UIInfo uiInfo)
461  {
462  return m_EntityCore.GetLabelUIInfoIfValid(entityLabel, currentMode, uiInfo);
463  }
464 
469  void OrderLabels(inout notnull array<EEditableEntityLabel> activeLabels)
470  {
471  m_EntityCore.OrderLabels(activeLabels);
472  }
473 
478  int GetLabelOrderInGroup(EEditableEntityLabel entityLabel)
479  {
480  EEditableEntityLabelGroup groupLabel;
481  GetLabelGroupType(entityLabel, groupLabel);
482 
483  array<SCR_EditableEntityCoreLabelSetting> labelsInGroup = new array<SCR_EditableEntityCoreLabelSetting>;
484  GetLabelsOfGroup(groupLabel, labelsInGroup);
485  if (!labelsInGroup)
486  return -1;
487 
488  int count = labelsInGroup.Count();
489 
490  for (int i = 0; i < count; i++)
491  {
492  if (labelsInGroup[i].GetLabelType() == entityLabel)
493  return i;
494  }
495 
496  return -1;
497  }
498 
499 
504  string GetLabelName(EEditableEntityLabel entityLabel)
505  {
506  SCR_UIInfo uiInfo;
507  if (GetLabelUIInfo(entityLabel, uiInfo))
508  {
509  return uiInfo.GetName();
510  }
511  return string.Empty;
512  }
513 
518  void SetPageIndex(int pageIndex)
519  {
520  m_iPageIndex = pageIndex;
521  }
522 
527  int GetPageIndex()
528  {
529  return m_iPageIndex;
530  }
531 
532  void SetPageEntryCount(int pageEntryCount)
533  {
534  m_iPageEntryCount = pageEntryCount;
535  }
536 
537  int GetPageEntryCount()
538  {
539  return m_iPageEntryCount;
540  }
541 
546  void SetBrowserStateIndex(int index)
547  {
548  m_iBrowserStateIndex = index;
549  }
550 
555  int GetBrowserStateIndex()
556  {
557  return m_iBrowserStateIndex;
558  }
559 
560 
561 
566  void GetHiddenStateTabs(out notnull array<int> hiddenStateTabs)
567  {
568  hiddenStateTabs.Copy(m_aHiddenStateTabs);
569  }
570 
576  void SetStateTabVisible(int tabIndex, bool setVisible)
577  {
578  if (!setVisible && !m_aHiddenStateTabs.Contains(tabIndex))
579  m_aHiddenStateTabs.Insert(tabIndex);
580  else if (setVisible && m_aHiddenStateTabs.Contains(tabIndex))
581  m_aHiddenStateTabs.RemoveItem(tabIndex);
582  //~ Already hidden or shown
583  else
584  return;
585 
586  Event_OnStateTabVisibilityChanged.Invoke(tabIndex, setVisible);
587  }
588 
594  int GetContentBrowserTabStates(out notnull array<SCR_EditorContentBrowserSaveStateDataUI> contentBrowserStates)
595  {
596  foreach (SCR_EditorContentBrowserSaveStateDataUI state : m_aContentBrowserTabStates)
597  contentBrowserStates.Insert(state);
598 
599  return contentBrowserStates.Count();
600  }
601 
607  SCR_EditorContentBrowserSaveStateData GetContentBrowserTabState(int index = -1)
608  {
609  if (index == -1)
610  {
612  if (GetConfigState(m_ContentBrowserConfig, state))
613  {
614  return state;
615  }
616  index = GetBrowserStateIndex();
617  }
618 
619  if (index < 0 || index >= m_aContentBrowserTabStates.Count())
620  return null;
621 
622  return m_aContentBrowserTabStates[index];
623  }
624 
629  string GetLastSearch()
630  {
631  return m_sLastSearchText;
632  }
633 
638  string GetCurrentSearch()
639  {
640  return m_sCurrentSearchText;
641  }
642 
647  void SetCurrentSearch(string searchText)
648  {
649  m_sLastSearchText = m_sCurrentSearchText;
650  m_sCurrentSearchText = searchText;
651  }
652 
657  void SetSaveStateTabsEnabled(bool enabled)
658  {
659  Event_OnEnableSaveStateTabs.Invoke(enabled);
660  }
661 
665  bool CanSavePersistentBrowserStates()
666  {
667  return !GetContentBrowserDisplayConfig();
668  }
669 
674  ScriptInvoker GetOnLabelChanged()
675  {
676  return Event_OnLabelChanged;
677  }
678 
683  ScriptInvoker GetOnBrowserStatesSaved()
684  {
685  return Event_OnBrowserStatesSaved;
686  }
687 
692  ScriptInvoker GetOnBrowserStatePreload()
693  {
694  return Event_OnBrowserStatePreload;
695  }
696 
701  ScriptInvoker GetOnBrowserStateLoaded()
702  {
703  return Event_OnBrowserStateLoaded;
704  }
705 
710  ScriptInvoker GetOnBrowserEntriesFiltered()
711  {
712  return Event_OnBrowserEntriesFiltered;
713  }
714 
719  ScriptInvoker GetOnBrowserStateCleared()
720  {
721  return Event_OnBrowserStateCleared;
722  }
723 
728  ScriptInvoker GetOnEnableSaveStateTabs()
729  {
730  return Event_OnEnableSaveStateTabs;
731  }
732 
737  ScriptInvoker GetOnSearchConfirm()
738  {
739  return Event_OnSearchConfirm;
740  }
741 
746  ScriptInvoker GetOnStateTabVisibilityChanged()
747  {
748  return Event_OnStateTabVisibilityChanged;
749  }
750 
756  void SetExtendedEntity(SCR_EditableEntityComponent extendedEntity)
757  {
758  m_ExtendedEntity = extendedEntity;
759  }
760 
765  SCR_EditableEntityComponent GetExtendedEntity()
766  {
767  return m_ExtendedEntity;
768  }
769 
774  int GetInfoCount()
775  {
776  if (!m_aInfos)
777  return 0;
778 
779  return m_aInfos.Count();
780  }
781 
788  SCR_EditableEntityUIInfo GetInfo(int index)
789  {
790  if (m_aInfos && index >= 0 && index < m_aInfos.Count())
791  {
792  return m_aInfos[index];
793  }
794  else
795  {
796  return null;
797  }
798  }
799 
805  int FindIndexOfInfo(SCR_EditableEntityUIInfo info)
806  {
807  if (m_aInfos && info)
808  {
809  foreach (int i, SCR_EditableEntityUIInfo browserInfo : m_aInfos)
810  {
811  if (browserInfo && browserInfo.GetName() == info.GetName())
812  {
813  return i;
814  }
815  }
816  }
817  return -1;
818  }
819 
820  bool GetFirstAvailabeBudgetCost(int prefabID, out SCR_EntityBudgetValue budgetCost)
821  {
822  SCR_EditableEntityUIInfo prefabInfo = GetInfo(prefabID);
823  if (!prefabInfo)
824  return false;
825 
826  array<ref SCR_EntityBudgetValue> budgetCosts = {};
827  m_BudgetManager.GetEntityPreviewBudgetCosts(prefabInfo, budgetCosts);
828 
829  if (!budgetCosts.IsEmpty())
830  budgetCost = budgetCosts.Get(0);
831  return budgetCost != null;
832  }
833 
834  bool CanPlace(int prefabID, out notnull array<ref SCR_EntityBudgetValue> budgetCosts, out SCR_UIInfo blockingBudgetInfo, bool showNotification = false)
835  {
836  if (!m_BudgetManager)
837  return true;
838 
839  SCR_EditableEntityUIInfo prefabInfo = GetInfo(prefabID);
840  if (!prefabInfo)
841  return false;
842 
843  EEditableEntityBudget blockingBudget;
844  if (m_BudgetManager.CanPlaceEntityInfo(prefabInfo, budgetCosts, blockingBudget, showNotification))
845  {
846  return true;
847  }
848  else
849  {
850  m_BudgetManager.GetCurrentBudgetInfo(blockingBudget, blockingBudgetInfo);
851  return false;
852  }
853  }
854 
861  bool CanPlace(notnull array<ResourceName> prefabs, EEditableEntityType fallbackBudgetType = -1)
862  {
863  //~ No budget manager so get default one (Ignoring mode)
864  if (!m_BudgetManager)
865  m_BudgetManager = SCR_BudgetEditorComponent.Cast(FindEditorComponent(SCR_BudgetEditorComponent, false, false));
866 
867  if (!m_PlacingManager || !m_BudgetManager)
868  return false;
869 
870  int prefabId;
871  Resource resource;
872  IEntitySource source;
873  array<ref SCR_EntityBudgetValue> fullBudgetCosts = {};
874  array<ref SCR_EntityBudgetValue> budgetCosts = {};
875 
876  foreach (ResourceName prefab : prefabs)
877  {
878  prefabId = m_PlacingManager.GetPrefabID(prefab);
879 
880  //~ Grab budget from content browser
881  if (!m_BudgetManager.GetEntityPreviewBudgetCosts(GetInfo(prefabId), budgetCosts))
882  {
883  //~ Grab budget from entity if not registered in content browser
884  if (!m_BudgetManager.GetEntitySourcePreviewBudgetCosts(SCR_EditableEntityComponentClass.GetEditableEntitySource(Resource.Load(prefab)), budgetCosts))
885  {
886  //~ Grab default budget for type if has fall back and no budget was assigned to entity
887  if (fallbackBudgetType != -1)
888  m_BudgetManager.GetEntityTypeBudgetCost(fallbackBudgetType, budgetCosts);
889  }
890  }
891 
892  //~ Add found budgets to full list
893  foreach (SCR_EntityBudgetValue budget : budgetCosts)
894  fullBudgetCosts.Insert(new SCR_EntityBudgetValue(budget.GetBudgetType(), budget.GetBudgetValue()));
895 
896  budgetCosts.Clear();
897  }
898 
899  //~ Merge Budgets
900  SCR_EntityBudgetValue.MergeBudgetCosts(budgetCosts, fullBudgetCosts);
901 
902  EEditableEntityBudget blockingBudget;
903 
904  //~ Check if can place
905  return m_BudgetManager.CanPlace(budgetCosts, blockingBudget);
906  }
907 
908  bool RefreshPreviewCost(int prefabID = -1)
909  {
910  if (m_PlacingManager.HasPlacingFlag(EEditorPlacingFlags.CHARACTER_PLAYER) || prefabID == -1)
911  {
912  m_BudgetManager.ResetPreviewCost();
913  return false;
914  }
915 
916  SCR_EditableEntityUIInfo editableUIInfo = GetInfo(prefabID);
917  if (!editableUIInfo)
918  {
919  return false;
920  }
921 
922  array<ref SCR_EntityBudgetValue> budgetCosts = {};
923  if (m_BudgetManager.GetEntityPreviewBudgetCosts(editableUIInfo, budgetCosts))
924  {
925  m_BudgetManager.UpdatePreviewCost(budgetCosts);
926  return true;
927  }
928 
929  return false;
930  }
931 
937  static bool OpenBrowserInstance(int browserStateIndex = -1)
938  {
940  if (contentBrowserManager)
941  return contentBrowserManager.OpenBrowser(browserStateIndex);
942  else
943  return false;
944  }
945 
951  static bool OpenBrowserInstance(SCR_EditorContentBrowserSaveStateData saveState)
952  {
954  if (contentBrowserManager)
955  return contentBrowserManager.OpenBrowserState(saveState);
956  else
957  return false;
958  }
959 
966  static bool OpenBrowserLabelConfigInstance(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig = null)
967  {
969  if (contentBrowserManager)
970  return contentBrowserManager.OpenBrowserLabelConfig(contentBrowserConfig);
971  else
972  return false;
973  }
974 
983  bool OpenBrowserExtended(SCR_EditableEntityComponent extendedEntity, SCR_EditorContentBrowserDisplayConfig contentBrowserConfig = null)
984  {
985  if (!m_PlacingManager || m_PlacingManager.IsPlacing())
986  return false;
987 
988  SCR_CompositionSlotManagerComponent slotManager = SCR_CompositionSlotManagerComponent.GetInstance();
989  if (slotManager && slotManager.IsOccupied(extendedEntity.GetOwner()))
990  return false;
991 
992  SCR_EditableEntityComponent currentExtendedEntity = GetExtendedEntity();
993 
994  if (contentBrowserConfig == null)
995  SetExtendedEntity(extendedEntity);
996  else
997  SetExtendedEntity(null);
998 
999  int extendedPrefabCount = 0;
1000 
1001  if (extendedEntity && !contentBrowserConfig)
1002  extendedPrefabCount = FilterExtendedSlots();
1003  else
1004  extendedPrefabCount = m_iFilteredPrefabIDsCount;
1005 
1006  if (extendedPrefabCount == 0)
1007  {
1008  SetExtendedEntity(null);
1009  return false;
1010  }
1011 
1012  if ((!contentBrowserConfig && OpenBrowser()) || (contentBrowserConfig && OpenBrowserLabelConfig(contentBrowserConfig)))
1013  {
1016  if (previewManager)
1017  verticalMode = previewManager.GetVerticalMode();
1018 
1019  vector transform[4];
1020  extendedEntity.GetTransform(transform);
1021  SCR_EditorPreviewParams params = SCR_EditorPreviewParams.CreateParams(transform, verticalMode: verticalMode);
1022 
1023  //~ Extened with slot
1024  if (extendedEntity.GetEntityType() == EEditableEntityType.SLOT || extendedEntity.HasEntityFlag(EEditableEntityFlag.SLOT))
1025  {
1026  params.m_TargetInteraction = EEditableEntityInteraction.SLOT;
1027  }
1028  //~ If ever passengers picking can be chosen then this logic needs to change
1029  else if (extendedEntity.GetOwner().FindComponent(SCR_BaseCompartmentManagerComponent))
1030  {
1031  transform[3] = extendedEntity.GetOwner().GetOrigin() + BaseCompartmentSlot.SPAWN_IN_VEHICLE_OFFSET; //~ Spawn close so the entities are spawned in but still above the entity out of sight
1032  params.m_TargetInteraction = EEditableEntityInteraction.PASSENGER;
1033  params.m_Parent = extendedEntity;
1034  params.m_ParentID = Replication.FindId(extendedEntity);
1035  }
1036 
1037  params.m_vTransform = transform;
1038  params.SetTarget(extendedEntity);
1039  m_PlacingManager.SetInstantPlacing(params);
1040  return true;
1041  }
1042 
1043  return false;
1044  }
1045 
1051  bool OpenBrowser(int browserStateIndex = -1)
1052  {
1053  if (!m_EditorMenuManager)
1054  return false;
1055 
1056  //~ Clear config as browser is opened without it
1057  m_ContentBrowserConfig = null;
1058  if (browserStateIndex > 0)
1059  {
1060  SetBrowserState(browserStateIndex);
1061  }
1062 
1063  //~ Open context browser
1064  OpenBrowserMenu();
1065  return true;
1066  }
1067 
1073  bool OpenBrowserState(SCR_EditorContentBrowserSaveStateData saveState, SCR_EditorContentBrowserDisplayConfig displayConfig = null)
1074  {
1075  if (!m_EditorMenuManager)
1076  return false;
1077 
1078  //~ Clear config as browser is opened without it
1079  if (displayConfig)
1080  m_ContentBrowserConfig = displayConfig;
1081  else
1082  m_ContentBrowserConfig = null;
1083 
1084  LoadBrowserState(saveState, false);
1085  SaveBrowserState();
1086 
1087  //~ Open context browser
1088  OpenBrowserMenu();
1089  return true;
1090  }
1091 
1098  bool OpenBrowserLabelConfig(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig)
1099  {
1100  if (!contentBrowserConfig)
1101  return OpenBrowser();
1102 
1103  if (!m_EditorMenuManager)
1104  return false;
1105 
1106  SetExtendedEntity(null);
1107  m_ContentBrowserConfig = contentBrowserConfig;
1108  SetBrowserState(contentBrowserConfig);
1109 
1110  //~ Open context browser
1111  OpenBrowserMenu();
1112  return true;
1113  }
1114 
1120  void SetBrowserState(int browserStateIndex = -1, bool saveCurrentState = false, bool clearConfigData = true)
1121  {
1122  if (saveCurrentState)
1123  SaveBrowserState();
1124 
1125  if (browserStateIndex < 0)
1126  LoadBrowserState(m_iBrowserStateIndex, clearConfigData);
1127  else
1128  {
1129  SetBrowserStateIndex(browserStateIndex);
1130  LoadBrowserState(browserStateIndex, clearConfigData);
1131  }
1132  }
1133 
1134  void SetCustomBrowserState(SCR_EditorContentBrowserSaveStateData state, bool clearConfigData = true)
1135  {
1136  LoadBrowserState(state, false);
1137  }
1138 
1144  void SetBrowserState(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig, bool saveCurrentState = false)
1145  {
1146  m_ContentBrowserConfig = contentBrowserConfig;
1148  if (GetConfigState(contentBrowserConfig, state))
1149  LoadBrowserState(state, false);
1150  else
1151  ClearBrowserState(false);
1152  }
1153 
1159  bool SaveBrowserState()
1160  {
1162 
1163  //~ Does not use config so use default logic
1164  if (!m_ContentBrowserConfig)
1165  {
1166  state = GetContentBrowserTabState(m_iBrowserStateIndex);
1167 
1168  //~ Invalid
1169  if (!state)
1170  return false;
1171  }
1172  //~ Uses config and allows for content browser state saving
1173  else if (!m_ContentBrowserConfig.GetSaveContentBrowserState() || !GetConfigState(m_ContentBrowserConfig, state))
1174  {
1175  //~ Do not save state
1176  return false;
1177  }
1178 
1179  state.SetLabels(m_ActiveLabels);
1180  state.SetPageIndex(m_iPageIndex);
1181  state.SetSearchString(m_sCurrentSearchText);
1182 
1183  Event_OnBrowserStatesSaved.Invoke();
1184 
1185  //~ Saved state successfully
1186  return true;
1187  }
1188 
1195  void AddRemoveLabelOfPersistentBrowserState(EEditableEntityLabel label, bool addLabel, int stateIndex = -1)
1196  {
1197  if (stateIndex >= m_aContentBrowserTabStates.Count())
1198  return;
1199 
1200  //~ Only change it on one state
1201  if (stateIndex > -1)
1202  {
1203  m_aContentBrowserTabStates[stateIndex].AddRemoveLabel(label, addLabel);
1204  return;
1205  }
1206 
1207  //~ Add to all states
1208  foreach (SCR_EditorContentBrowserSaveStateData state : m_aContentBrowserTabStates)
1209  state.AddRemoveLabel(label, addLabel);
1210  }
1211 
1212  void ResetBrowserState(bool clearConfigData)
1213  {
1214  ClearBrowserState(clearConfigData);
1215  FilterEntries();
1216  }
1217 
1218  void OnPlaceEntityServer(int prefabID, SCR_EditableEntityComponent entity)
1219  {
1220  //m_BudgetManager.CheckMaxBudgetReached(
1221  }
1222 
1223  void OnMenuClosed()
1224  {
1225  if (GetExtendedEntity())
1226  {
1227  //ResetBrowserState(false);
1228  SetExtendedEntity(null);
1229 
1230  // Set back to previous filtering
1231  LoadBrowserState(m_iBrowserStateIndex, false);
1232  }
1233 
1234  bool isBuilding = GetManager().GetCurrentMode() == EEditorMode.BUILDING;
1235  SetBrowserState(-1, true, !isBuilding);
1236 
1237  //~ Save the persistent state
1238  if (CanSavePersistentBrowserStates())
1239  SaveAllPersistentBrowserState();
1240  }
1241 
1242  protected bool OpenBrowserMenu()
1243  {
1244  if (m_EditorMenuManager)
1245  {
1246  return m_EditorMenuManager.GetMenu().OpenDialog(m_MenuPreset);
1247  }
1248  return false;
1249  }
1250 
1251  //~ Clear browser state
1252  protected void ClearBrowserState(bool clearConfigData)
1253  {
1254  ResetAllLabels(!clearConfigData);
1255  SetPageIndex(0);
1256  SetCurrentSearch(string.Empty);
1257 
1258  //~ Clear config
1259  if (clearConfigData)
1260  m_ContentBrowserConfig = null;
1261 
1262  Event_OnBrowserStateCleared.Invoke();
1263  }
1264 
1265  //~ Load the saved browser state using index
1266  protected void LoadBrowserState(int stateIndex, bool clearConfigData)
1267  {
1268  if (stateIndex < 0 || stateIndex >= m_aContentBrowserTabStates.Count())
1269  return;
1270 
1271  SCR_EditorContentBrowserSaveStateData state = m_aContentBrowserTabStates[stateIndex];
1272  if (state)
1273  {
1274  LoadBrowserState(state, clearConfigData);
1275  }
1276  }
1277 
1278  //~ Load the saved browser state
1279  protected void LoadBrowserState(SCR_EditorContentBrowserSaveStateData state, bool clearConfigData)
1280  {
1281  //~ Preload before browser is cleared
1282  Event_OnBrowserStatePreload.Invoke(state);
1283 
1284  ClearBrowserState(clearConfigData);
1285 
1286  //~ Labels
1287  array<EEditableEntityLabel> stateActiveLabels = new array<EEditableEntityLabel>;
1288  state.GetLabels(stateActiveLabels);
1289 
1290  foreach (EEditableEntityLabel activeLabel : stateActiveLabels)
1291  SetLabel(activeLabel, true);
1292 
1293  //~ Page Index
1294  SetPageIndex(state.GetPageIndex());
1295 
1296  //~ Search String
1297  SetCurrentSearch(state.GetSearchString());
1298 
1299  if (!clearConfigData)
1300  SetConfigLabels();
1301 
1302  //~ Load Event
1303  Event_OnBrowserStateLoaded.Invoke(state);
1304 
1305  if (m_aInfos && m_aAsyncPrefabs == null)
1306  FilterEntries();
1307  }
1308 
1309  protected bool GetConfigState(SCR_EditorContentBrowserDisplayConfig browserConfig, out SCR_EditorContentBrowserSaveStateData state)
1310  {
1311  if (!browserConfig)
1312  return false;
1313 
1314  if (!m_mContentBrowserConfigStates.Find(browserConfig, state))
1315  {
1317  m_mContentBrowserConfigStates.Insert(browserConfig, state);
1318  }
1319  return true;
1320  }
1321 
1322  protected void SetConfigLabels()
1323  {
1324  if (!m_ContentBrowserConfig)
1325  return;
1326 
1327  //~ Set labels active
1328  array<EEditableEntityLabel> labels = new array<EEditableEntityLabel>;
1329  m_ContentBrowserConfig.GetAlwaysActiveLabels(labels);
1330 
1331  foreach (EEditableEntityLabel label : labels)
1332  SetLabel(label, true);
1333  }
1334 
1339  SCR_EditorContentBrowserDisplayConfig GetContentBrowserDisplayConfig()
1340  {
1341  return m_ContentBrowserConfig;
1342  }
1343 
1344  //~ Save all tab states into settings. So it can be loaded when a diffrent scenario is loaded or the game is booted up again
1345  void SaveAllPersistentBrowserState()
1346  {
1347  if (!m_bUsePersistentBrowserStates)
1348  return;
1349 
1350  BaseContainer editorSettings = GetGame().GetGameUserSettings().GetModule("SCR_EditorPersistentData");
1351  if (!editorSettings)
1352  return;
1353 
1354  array<ref SCR_EditorContentBrowserSaveStateData> settingBrowserStates = {};
1355 
1356  //~ Get the SCR_EditorContentBrowserStateDataUI data
1357  foreach (SCR_EditorContentBrowserSaveStateData state : m_aContentBrowserTabStates)
1358  {
1359  settingBrowserStates.Insert(state);
1360  }
1361 
1362  //~ Save the Data
1363  editorSettings.Set("m_aSavedContentBrowserStates", settingBrowserStates);
1364 
1365  GetGame().UserSettingsChanged();
1366  }
1367 
1368  //~ Load Persistent browser state from where the player left off last time
1369  protected void LoadAllPersistentBrowserState()
1370  {
1371  if (!m_bUsePersistentBrowserStates)
1372  return;
1373 
1374  BaseContainer editorSettings = GetGame().GetGameUserSettings().GetModule("SCR_EditorPersistentData");
1375  if (!editorSettings)
1376  return;
1377 
1378  array<ref SCR_EditorContentBrowserSaveStateData> settingBrowserStates;
1379  editorSettings.Get("m_aSavedContentBrowserStates", settingBrowserStates);
1380 
1381  if (!settingBrowserStates)
1382  return;
1383 
1384  int savedCount = settingBrowserStates.Count();
1385 
1386  //~ Check if saved settings are same as given tabs
1387  if (m_aContentBrowserTabStates.Count() == savedCount)
1388  {
1389  array<EEditableEntityLabel> settingSavedLabels = {};
1390 
1391  //~ Get persistant data and apply the data to Browser States
1392  for (int i = 0; i < savedCount; i++)
1393  {
1394  //~ Note, does not load pageIndex as this might change if mods are added/removed. Plus it might be frustrating/confusing for user
1395  settingBrowserStates[i].GetLabels(settingSavedLabels);
1396  m_aContentBrowserTabStates[i].SetLabels(settingSavedLabels, true);
1397  m_aContentBrowserTabStates[i].SetSearchString(settingBrowserStates[i].GetSearchString());
1398  }
1399  }
1400  }
1401 
1402  override void EOnEditorInit()
1403  {
1405  m_EntityCore.GetLabelGroups(m_LabelGroups);
1406 
1407  //~ Load Persistent browser state from where the player left off last time
1408  LoadAllPersistentBrowserState();
1409 
1410  //~ Init the first page, else it will not load correctly
1411  SetBrowserState(0);
1412  }
1413 
1414  override void EOnEditorActivateServer()
1415  {
1416  m_PrefabsCache = SCR_PrefabsCacheEditorComponent.Cast(FindEditorComponent(SCR_PrefabsCacheEditorComponent, true, false));
1417  m_PlacingManager = SCR_PlacingEditorComponent.Cast(FindEditorComponent(SCR_PlacingEditorComponent, true, true));
1418 
1419  if (m_PlacingManager)
1420  m_PlacingManager.GetOnPlaceEntityServer().Insert(OnPlaceEntityServer);
1421  }
1422 
1423  override void EOnEditorDeactivateServer()
1424  {
1425  if (m_PlacingManager)
1426  m_PlacingManager.GetOnPlaceEntityServer().Remove(OnPlaceEntityServer);
1427  }
1428 
1429  override void EOnEditorActivate()
1430  {
1431  m_EditorMenuManager = SCR_MenuEditorComponent.Cast(FindEditorComponent(SCR_MenuEditorComponent, true, false));
1432  m_BudgetManager = SCR_BudgetEditorComponent.Cast(FindEditorComponent(SCR_BudgetEditorComponent, true, true));
1433 
1434  m_PlacingManager = SCR_PlacingEditorComponent.Cast(FindEditorComponent(SCR_PlacingEditorComponent, true, true));
1435  if (m_PlacingManager)
1436  m_PlacingManagerData = SCR_PlacingEditorComponentClass.Cast(m_PlacingManager.GetEditorComponentData());
1437  }
1438 
1439  override bool EOnEditorActivateAsync(int attempt)
1440  {
1441  //--- Started
1442  if (attempt == 0)
1443  {
1445  if (!placingPrefabData)
1446  return true;
1447 
1448  m_aInfos = {};
1449  m_aAsyncPrefabs = {};
1450  placingPrefabData.GetPrefabs(m_aAsyncPrefabs, true);
1451  m_iAsyncIndex = 0;
1452  return false;
1453  }
1454 
1455  if (!m_aAsyncPrefabs)
1456  return true;
1457 
1458  ResourceName entityPrefab;
1459  Resource entityResource;
1460  IEntityComponentSource editableEntitySource;
1462 
1463  int tickEnd = System.GetTickCount() + ASYNC_TICK_LENGTH;
1464  int count = m_aAsyncPrefabs.Count();
1465  while (System.GetTickCount() < tickEnd)
1466  {
1467  //--- Completed
1468  if (m_iAsyncIndex >= count)
1469  {
1470  m_aAsyncPrefabs = null;
1471  FilterEntries();
1472  return true;
1473  }
1474 
1475  info = null;
1476  entityPrefab = m_aAsyncPrefabs[m_iAsyncIndex];
1477  if (entityPrefab)
1478  {
1479  entityResource = BaseContainerTools.LoadContainer(m_aAsyncPrefabs[m_iAsyncIndex]);
1480  if (entityResource && entityResource.IsValid())
1481  {
1482  editableEntitySource = SCR_EditableEntityComponentClass.GetEditableEntitySource(entityResource);
1483  if (editableEntitySource)
1484  {
1485  info = SCR_EditableEntityUIInfo.Cast(SCR_EditableEntityComponentClass.GetInfo(editableEntitySource));
1486  if (!info)
1487  {
1488  Print(string.Format("Prefab '%1' is missing UI info in SCR_EditableEntityComponent!", m_aAsyncPrefabs[m_iAsyncIndex]), LogLevel.ERROR);
1489  }
1490  }
1491  else
1492  {
1493  Print(string.Format("Prefab '%1' is missing SCR_EditableEntityComponent!", m_aAsyncPrefabs[m_iAsyncIndex]), LogLevel.ERROR);
1494  }
1495  }
1496  else
1497  {
1498  Print(string.Format("Prefab '%1' is missing at index '%2'!", m_aAsyncPrefabs[m_iAsyncIndex], m_iAsyncIndex), LogLevel.ERROR);
1499  }
1500  }
1501 
1502  //--- Register even when faulty, to keep indexes
1503  m_aInfos.Insert(info);
1504 
1505  m_iAsyncIndex++;
1506  }
1507  return false;
1508  }
1509 
1510  override void EOnEditorDeactivate()
1511  {
1512  m_aInfos = null;
1513  }
1514 
1515 }
1516 
ComponentEditorProps
SCR_FragmentEntityClass ComponentEditorProps
EEditableEntityInteraction
EEditableEntityInteraction
Type of suggested interaction when hovering edited entity on top of another entity.
Definition: EEditableEntityInteraction.c:5
EEditableEntityLabel
EEditableEntityLabel
Definition: EEditableEntityLabel.c:1
EEditableEntityFlag
EEditableEntityFlag
Unique flags of the entity.
Definition: EEditableEntityFlag.c:5
SCR_EditableEntityCore
Definition: SCR_EditableEntityCore.c:10
SCR_PrefabsCacheEditorComponent
Definition: SCR_PrefabsCacheEditorComponent.c:13
SCR_EditorContentBrowserDisplayConfig
Definition: SCR_EditorContentBrowserDisplayConfig.c:5
GetGame
ArmaReforgerScripted GetGame()
Definition: game.c:1424
SCR_EditableEntityUIInfo
Definition: SCR_EditableEntityUIInfo.c:2
desc
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition: SCR_RespawnBriefingComponent.c:17
func
func
Definition: SCR_AIThreatSystem.c:5
SCR_ContentBrowserEditorComponent
Definition: SCR_ContentBrowserEditorComponent.c:16
EEditableEntityBudget
EEditableEntityBudget
Definition: EEditableEntityBudget.c:1
SCR_BudgetEditorComponent
Definition: SCR_BudgetEditorComponent.c:18
m_PlacingManager
protected SCR_PlacingEditorComponent m_PlacingManager
Definition: SCR_PreviewEntityEditorUIComponent.c:43
SCR_ContentBrowserEditorComponentClass
Definition: SCR_ContentBrowserEditorComponent.c:2
EEditorTransformVertical
EEditorTransformVertical
Vertical transformation mode.
Definition: EEditorTransformVertical.c:5
SCR_BaseEditorComponent
Definition: SCR_BaseEditorComponent.c:119
SCR_EditableEntityCoreLabelSetting
Definition: SCR_EditableEntityCoreLabelSetting.c:2
Attribute
typedef Attribute
Post-process effect of scripted camera.
m_EntityCore
protected SCR_EditableEntityCore m_EntityCore
Definition: SCR_CampaignBuildingManagerComponent.c:40
EEditableEntityLabelGroup
EEditableEntityLabelGroup
Definition: EEditableEntityLabel.c:200
EEditableEntityType
EEditableEntityType
Defines type of SCR_EditableEntityComponent. Assigned automatically based on IEntity inheritance.
Definition: EEditableEntityType.c:5
SCR_EditableEntityCache
Definition: SCR_EditableEntityCache.c:1
SCR_EntityBudgetValue
Definition: SCR_EntityBudgetValue.c:2
EEditorPlacingFlags
EEditorPlacingFlags
Definition: EEditorPlacingFlags.c:1
ScriptInvoker_BrowserBudgetPreviewRefreshEvent
ScriptInvokerBase< ScriptInvoker_BrowserBudgetPreviewRefresh > ScriptInvoker_BrowserBudgetPreviewRefreshEvent
Definition: SCR_ContentBrowserEditorComponent.c:9
SCR_EditableEntityCoreLabelGroupSetting
Definition: SCR_EditableEntityCoreLabelGroupSetting.c:2
SCR_EditorContentBrowserSaveStateData
Definition: SCR_EditorContentBrowserStateData.c:5
SCR_UIInfo
Definition: SCR_UIInfo.c:7
SCR_BaseEditorComponentClass
Definition: SCR_BaseEditorComponent.c:2
SCR_EditableEntityComponent
Definition: SCR_EditableEntityComponent.c:13
EEditorMode
EEditorMode
Editor mode that defines overall functionality.
Definition: EEditorMode.c:5
ScriptInvoker_BrowserBudgetPreviewRefresh
func ScriptInvoker_BrowserBudgetPreviewRefresh
Definition: SCR_ContentBrowserEditorComponent.c:8
index
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Definition: SCR_DestructionSynchronizationComponent.c:17
ChimeraMenuPreset
ChimeraMenuPreset
Menu presets.
Definition: ChimeraMenuBase.c:3
SCR_MenuEditorComponent
Definition: SCR_MenuEditorComponent.c:8
params
Configs ServerBrowser KickDialogs params
Definition: SCR_NotificationSenderComponent.c:24
m_MenuPreset
private ChimeraMenuPreset m_MenuPreset
Definition: SCR_AttributesManagerEditorComponent.c:59
SCR_EditableEntityComponentClass
Definition: SCR_EditableEntityComponentClass.c:2
SCR_PlacingEditorComponent
Definition: SCR_PlacingEditorComponent.c:118
SCR_EditorPreviewParams
Network packet of variables for entity placing and transformation.
Definition: SCR_EditorPreviewParams.c:4
SCR_PlacingEditorComponentClass
Definition: SCR_PlacingEditorComponent.c:2
SCR_PreviewEntityEditorComponent
Definition: SCR_PreviewEntityEditorComponent.c:12
category
params category
Definition: SCR_VehicleDamageManagerComponent.c:180
SCR_EditorContentBrowserSaveStateDataUI
Editor Content browser State data that includes UI data for tabs.
Definition: SCR_EditorContentBrowserStateDataUI.c:3