1[
ComponentEditorProps(
category:
"GameScripted/Editor", description:
"Management of placeable entities. Works only with SCR_EditorBaseEntity!", icon:
"WBData/ComponentEditorProps/componentEditor.png")]
18 [
Attribute(
"1",
"If true will show the faction icon on the content browser cards, If false will hide them")]
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")]
32 [
Attribute(
desc:
"A list of saved states of the content browser such as labels and pagination. Index 0 is the saved hand filters.")]
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))]
45 private ref array<EEditableEntityLabel> m_ActiveLabels = {};
47 protected ref array<ref SCR_EditableEntityCoreLabelGroupSetting>
m_LabelGroups = {};
61 protected ref array<ref SCR_EditableEntityUIInfo>
m_aInfos;
157 if (!extendedEntityCache)
160 set<int> extendableEntities =
new set<int>();
164 foreach (
int prefabID : extendableEntities)
189 validBlackListLabels.Clear();
195 validBlackListLabels.Insert(label);
203 return validBlackListLabels.Count();
211 if (entityCache.GetPrefab() == extendedEntityResource)
215 set<int> extendedEntities =
new set<int>();
218 for (
int prefabId, count =
GetInfoCount(); prefabId < count; prefabId++)
225 extendedEntities.Insert(prefabId);
228 if (extendedEntities.Count() <= 0)
234 extendedEntityCache.
SetPrefab(extendedEntityResource);
236 return extendedEntityCache;
251 array<EEditableEntityLabel> entityLabels = {};
253 array<EEditableEntityLabel> validBlackListLabels = {};
259 for (
int i = 0; i < count; i++)
261 isBlackListed =
false;
262 entityLabels.Clear();
277 if (entityLabels.Contains(blackListLabel))
279 isBlackListed =
true;
295 if (!currentSearch.IsEmpty())
297 array<int> searchResultPrefabID = {}, searchResultIndices = {};
300 foreach (
int searchResultIndex : searchResultIndices)
303 searchResultPrefabID.Insert(prefabID);
318 array<EEditableEntityLabel> activeLabels = {};
334 if (entityLabels.IsEmpty())
339 array<SCR_EditableEntityCoreLabelSetting> groupLabels = {};
344 m_EntityCore.GetLabelsOfGroup(labelGroupType, groupLabels);
346 int activeLabels = 0;
347 int matchesActive = 0;
349 bool needsAllActive = labelGroup.GetRequiresAllLabelsMatch();
359 if (entityLabels.Find(entityLabel) != -1)
365 if (activeLabels > 0)
367 if (needsAllActive && matchesActive != activeLabels)
371 else if (!needsAllActive && matchesActive == 0)
388 return m_ActiveLabels.Find(entityLabel) != -1;
397 return !m_ActiveLabels.IsEmpty();
408 if (active && !labelActive)
410 m_ActiveLabels.Insert(entityLabel);
412 else if (!active && labelActive)
414 m_ActiveLabels.RemoveItem(entityLabel);
426 m_ActiveLabels.Clear();
434 activeLabels.Copy(m_ActiveLabels);
439 return m_ActiveLabels.Count();
442 void GetLabelGroups(out notnull array<ref SCR_EditableEntityCoreLabelGroupSetting> labelGroups)
449 return m_EntityCore.GetLabelGroupType(entityLabel, groupLabel);
464 return m_EntityCore.GetLabelsOfGroup(labelGroupType, labels);
469 return m_EntityCore.GetLabelUIInfo(entityLabel, uiInfo);
474 return m_EntityCore.GetLabelUIInfoIfValid(entityLabel, currentMode, uiInfo);
481 void OrderLabels(inout notnull array<EEditableEntityLabel> activeLabels)
495 array<SCR_EditableEntityCoreLabelSetting> labelsInGroup =
new array<SCR_EditableEntityCoreLabelSetting>;
500 int count = labelsInGroup.Count();
502 for (
int i = 0; i < count; i++)
504 if (labelsInGroup[i].GetLabelType() == entityLabel)
521 return uiInfo.GetName();
609 contentBrowserStates.Insert(state);
611 return contentBrowserStates.Count();
819 if (browserInfo && browserInfo.GetName() == info.
GetName())
834 array<ref SCR_EntityBudgetValue> budgetCosts = {};
837 if (!budgetCosts.IsEmpty())
838 budgetCost = budgetCosts.Get(0);
839 return budgetCost != null;
852 if (
m_BudgetManager.CanPlaceEntityInfo(prefabInfo, budgetCosts, blockingBudget, showNotification))
858 m_BudgetManager.GetCurrentBudgetInfo(blockingBudget, blockingBudgetInfo);
881 array<ref SCR_EntityBudgetValue> fullBudgetCosts = {};
882 array<ref SCR_EntityBudgetValue> budgetCosts = {};
895 if (fallbackBudgetType != -1)
896 m_BudgetManager.GetEntityTypeBudgetCost(fallbackBudgetType, budgetCosts);
930 array<ref SCR_EntityBudgetValue> budgetCosts = {};
931 if (
m_BudgetManager.GetEntityPreviewBudgetCosts(editableUIInfo, budgetCosts))
948 if (contentBrowserManager)
949 return contentBrowserManager.
OpenBrowser(browserStateIndex);
962 if (contentBrowserManager)
977 if (contentBrowserManager)
996 SCR_CompositionSlotManagerComponent slotManager = SCR_CompositionSlotManagerComponent.GetInstance();
997 if (slotManager && slotManager.IsOccupied(extendedEntity.GetOwner()))
1002 if (contentBrowserConfig == null)
1007 int extendedPrefabCount = 0;
1009 if (extendedEntity && !contentBrowserConfig)
1014 if (extendedPrefabCount == 0)
1037 else if (extendedEntity.GetOwner().FindComponent(SCR_BaseCompartmentManagerComponent))
1041 params.m_Parent = extendedEntity;
1045 params.m_vTransform = transform;
1046 params.SetTarget(extendedEntity);
1066 if (browserStateIndex > 0)
1108 if (!contentBrowserConfig)
1128 void SetBrowserState(
int browserStateIndex = -1,
bool saveCurrentState =
false,
bool clearConfigData =
true)
1130 if (saveCurrentState)
1133 if (browserStateIndex < 0)
1213 if (stateIndex > -1)
1221 state.AddRemoveLabel(label, addLabel);
1271 if (clearConfigData)
1299 array<EEditableEntityLabel> stateActiveLabels =
new array<EEditableEntityLabel>;
1311 if (!clearConfigData)
1340 array<EEditableEntityLabel> labels =
new array<EEditableEntityLabel>;
1362 BaseContainer editorSettings =
GetGame().GetGameUserSettings().GetModule(
"SCR_EditorPersistentData");
1363 if (!editorSettings)
1366 array<ref SCR_EditorContentBrowserSaveStateData> settingBrowserStates = {};
1371 settingBrowserStates.Insert(state);
1375 editorSettings.Set(
"m_aSavedContentBrowserStates", settingBrowserStates);
1377 GetGame().UserSettingsChanged();
1386 BaseContainer editorSettings =
GetGame().GetGameUserSettings().GetModule(
"SCR_EditorPersistentData");
1387 if (!editorSettings)
1390 array<ref SCR_EditorContentBrowserSaveStateData> settingBrowserStates;
1391 editorSettings.Get(
"m_aSavedContentBrowserStates", settingBrowserStates);
1393 if (!settingBrowserStates)
1396 int savedCount = settingBrowserStates.Count();
1401 array<EEditableEntityLabel> settingSavedLabels = {};
1404 for (
int i = 0; i < savedCount; i++)
1407 settingBrowserStates[i].GetLabels(settingSavedLabels);
1460 if (!placingPrefabData)
1475 while (
System.GetTickCount() < tickEnd)
EEditableEntityLabelGroup
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
func ScriptInvoker_BrowserBudgetPreviewRefresh
ScriptInvokerBase< ScriptInvoker_BrowserBudgetPreviewRefresh > ScriptInvoker_BrowserBudgetPreviewRefreshEvent
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
override SCR_UIInfo GetInfo()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
static const vector SPAWN_IN_VEHICLE_OFFSET
Object holding reference to resource. In destructor release the resource.
void SCR_BaseEditorComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_BaseEditorComponent FindEditorComponent(typename type, bool showError=false, bool modeFirst=false)
SCR_EditorManagerEntity GetManager()
ScriptInvoker GetOnEnableSaveStateTabs()
override void EOnEditorDeactivate()
bool m_bShowFactionOnContentBrowserCards
bool OpenBrowserExtended(SCR_EditableEntityComponent extendedEntity, SCR_EditorContentBrowserDisplayConfig contentBrowserConfig=null)
ref array< EEditableEntityLabel > m_eBlackListedLabels
ref ScriptInvoker Event_OnBrowserStateLoaded
bool GetLabelsOfGroup(EEditableEntityLabelGroup labelGroupType, out notnull array< SCR_EditableEntityCoreLabelSetting > labels)
bool IsExtendedEntity(notnull SCR_EditableEntityComponent entity)
SCR_PlacingEditorComponent m_PlacingManager
ScriptInvoker GetOnBrowserStateLoaded()
ref SCR_EditorContentBrowserDisplayConfig m_ContentBrowserConfig
void ResetAllLabels(bool setConfigData=true)
void SetCurrentSearch(string searchText)
void SetSaveStateTabsEnabled(bool enabled)
void OrderLabels(inout notnull array< EEditableEntityLabel > activeLabels)
ScriptInvoker GetOnBrowserStatePreload()
void SetBrowserStateIndex(int index)
void SetPageIndex(int pageIndex)
bool OpenBrowser(int browserStateIndex=-1)
override bool EOnEditorActivateAsync(int attempt)
bool IsPrefabIDAvailable(int prefabID)
void LoadAllPersistentBrowserState()
void ClearBrowserState(bool clearConfigData)
bool IsMatchingToggledLabels(notnull array< EEditableEntityLabel > entityLabels)
SCR_EditableEntityCore m_EntityCore
void AddRemoveLabelOfPersistentBrowserState(EEditableEntityLabel label, bool addLabel, int stateIndex=-1)
override void EOnEditorInit()
bool CanPlace(int prefabID, out notnull array< ref SCR_EntityBudgetValue > budgetCosts, out SCR_UIInfo blockingBudgetInfo, bool showNotification=false, out EEditableEntityBudget blockingBudget=-1)
bool GetLabelUIInfoIfValid(EEditableEntityLabel entityLabel, EEditorMode currentMode, out SCR_UIInfo uiInfo)
ref ScriptInvoker Event_OnBrowserStatePreload
override void EOnEditorActivate()
ScriptInvoker GetOnBrowserEntriesFiltered()
int GetFilteredPrefabID(int index)
void OnPlaceEntityServer(int prefabID, SCR_EditableEntityComponent entity)
ScriptInvoker GetOnBrowserStatesSaved()
const int ASYNC_TICK_LENGTH
ref array< ref SCR_EditableEntityUIInfo > m_aInfos
void LoadBrowserState(SCR_EditorContentBrowserSaveStateData state, bool clearConfigData)
void SetBrowserState(int browserStateIndex=-1, bool saveCurrentState=false, bool clearConfigData=true)
void GetLabelGroups(out notnull array< ref SCR_EditableEntityCoreLabelGroupSetting > labelGroups)
ScriptInvoker GetOnBrowserStateCleared()
void SetCustomBrowserState(SCR_EditorContentBrowserSaveStateData state, bool clearConfigData=true)
string GetLabelName(EEditableEntityLabel entityLabel)
ScriptInvoker GetOnStateTabVisibilityChanged()
int GetActiveLabelCount()
ref ScriptInvoker Event_OnSearchConfirm
int GetContentBrowserTabStates(out notnull array< SCR_EditorContentBrowserSaveStateDataUI > contentBrowserStates)
bool GetConfigState(SCR_EditorContentBrowserDisplayConfig browserConfig, out SCR_EditorContentBrowserSaveStateData state)
bool CanPlace(notnull array< ResourceName > prefabs, EEditableEntityType fallbackBudgetType=-1)
void SetStateTabVisible(int tabIndex, bool setVisible)
ScriptInvoker GetOnSearchConfirm()
bool IsLabelActive(EEditableEntityLabel entityLabel)
override void EOnEditorActivateServer()
void SetPageEntryCount(int pageEntryCount)
void GetActiveLabels(out notnull array< EEditableEntityLabel > activeLabels)
bool GetFirstAvailabeBudgetCost(int prefabID, out SCR_EntityBudgetValue budgetCost)
bool AreFactionsShownOnContentCards()
bool GetLabelGroupType(EEditableEntityLabel entityLabel, out EEditableEntityLabelGroup groupLabel)
void SetBrowserState(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig, bool saveCurrentState=false)
int GetLabelGroupOrder(EEditableEntityLabelGroup groupLabel)
bool OpenBrowserLabelConfig(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig)
ref ScriptInvoker Event_OnBrowserStatesSaved
static bool OpenBrowserInstance(SCR_EditorContentBrowserSaveStateData saveState)
int GetFilteredPrefabCount()
bool CanSavePersistentBrowserStates()
SCR_EditorContentBrowserDisplayConfig GetContentBrowserDisplayConfig()
void SetExtendedEntity(SCR_EditableEntityComponent extendedEntity)
ref array< ref SCR_EditableEntityCoreLabelGroupSetting > m_LabelGroups
static bool OpenBrowserLabelConfigInstance(SCR_EditorContentBrowserDisplayConfig contentBrowserConfig=null)
bool m_bShowEntityBudgetCost
ref ScriptInvoker Event_OnStateTabVisibilityChanged
void SetLabel(EEditableEntityLabel entityLabel, bool active)
SCR_PrefabsCacheEditorComponent m_PrefabsCache
ref set< ref SCR_EditableEntityCache > m_aExtendedEntitiesCache
bool m_bUsePersistentBrowserStates
ref ScriptInvoker Event_OnEnableSaveStateTabs
ResourceName GetResourceNamePrefabID(int prefabID)
ref array< int > m_aHiddenStateTabs
SCR_EditableEntityUIInfo GetInfo(int index)
void LoadBrowserState(int stateIndex, bool clearConfigData)
int GetLabelOrderInGroup(EEditableEntityLabel entityLabel)
ScriptInvoker GetOnLabelChanged()
int m_iFilteredPrefabIDsCount
SCR_EditableEntityCache FindExtendedEntityCache(ResourceName extendedEntityResource)
int FindIndexOfInfo(SCR_EditableEntityUIInfo info)
ref map< ref SCR_EditorContentBrowserDisplayConfig, ref SCR_EditorContentBrowserSaveStateData > m_mContentBrowserConfigStates
ref ScriptInvoker Event_OnBrowserEntriesFiltered
SCR_EditableEntityComponent m_ExtendedEntity
SCR_BudgetEditorComponent m_BudgetManager
ref array< string > m_aLocalizationKeys
override void EOnEditorDeactivateServer()
ref array< ref SCR_EditorContentBrowserSaveStateDataUI > m_aContentBrowserTabStates
bool GetLabelUIInfo(EEditableEntityLabel entityLabel, out SCR_UIInfo uiInfo)
void SaveAllPersistentBrowserState()
int GetBrowserStateIndex()
ref ScriptInvoker Event_OnLabelChanged
ref array< int > m_aFilteredPrefabIDs
bool RefreshPreviewCost(int prefabID=-1)
void ResetBrowserState(bool clearConfigData)
SCR_EditableEntityComponent GetExtendedEntity()
ref array< ResourceName > m_aAsyncPrefabs
void GetHiddenStateTabs(out notnull array< int > hiddenStateTabs)
int FilterExtendedSlots()
Filters all prefab IDs that match the extended entity.
string GetCurrentSearch()
bool isMatchingToggledLabelsOfState(int savedStateIndex)
SCR_MenuEditorComponent m_EditorMenuManager
static bool OpenBrowserInstance(int browserStateIndex=-1)
int GetValidBlackListedLabels(out notnull array< EEditableEntityLabel > validBlackListLabels)
bool OpenBrowserState(SCR_EditorContentBrowserSaveStateData saveState, SCR_EditorContentBrowserDisplayConfig displayConfig=null)
string m_sCurrentSearchText
SCR_EditorContentBrowserSaveStateData GetContentBrowserTabState(int index=-1)
ref ScriptInvoker Event_OnBrowserStateCleared
SCR_PlacingEditorComponentClass m_PlacingManagerData
void SetExtendedEntities(notnull set< int > prefabIDs)
void SetPrefab(ResourceName prefabResource)
int GetExtendedEntities(notnull out set< int > prefabIDs)
static IEntityComponentSource GetEditableEntitySource(Resource entityResource)
ResourceName GetPrefab(bool shorten=false)
bool HasEntityFlag(EEditableEntityFlag flag)
EEditableEntityType GetEntityType(IEntity owner=null)
bool GetTransform(out vector outTransform[4])
ResourceName GetSlotPrefab()
int GetEntityLabels(out notnull array< EEditableEntityLabel > entityLabels)
static SCR_EditableEntityUIInfo ExtractEditableUIInfoFromPrefab(ResourceName prefab)
override LocalizedString GetName()
int GetLabels(out notnull array< EEditableEntityLabel > labels)
void SetPageIndex(int pageIndex)
void SetSearchString(string searchString)
void SetLabels(notnull array< EEditableEntityLabel > savedLabels, bool checkForInvalid=false)
Editor Content browser State data that includes UI data for tabs.
Network packet of variables for entity placing and transformation.
static SCR_EditorPreviewParams CreateParams(vector transform[4], RplId parentID=Replication.INVALID_ID, EEditorTransformVertical verticalMode=EEditorTransformVertical.SEA, bool isUnderwater=false, SCR_EditableEntityComponent target=null, EEditableEntityInteraction targetInteraction=EEditableEntityInteraction.NONE)
int GetPrefabs(out notnull array< ResourceName > outPrefabs, bool onlyExposed=false)
EEditorTransformVertical GetVerticalMode()
EEditableEntityType
Defines type of SCR_EditableEntityComponent. Assigned automatically based on IEntity inheritance.
EEditableEntityFlag
Unique flags of the entity.
SCR_FieldOfViewSettings Attribute
EEditorMode
Editor mode that defines overall functionality.
EEditorTransformVertical
Vertical transformation mode.
EEditableEntityInteraction
Type of suggested interaction when hovering edited entity on top of another entity.