2[
ComponentEditorProps(
category:
"GameScripted/Editor", description:
"Main conflict component for handling building editor mode", icon:
"WBData/ComponentEditorProps/componentEditor.png")]
45 SCR_MilitaryBaseComponent
base = providerComponent.GetMilitaryBaseComponent();
70 SCR_CampaignBuildingProviderComponent temporaryProviderComponent;
79 if (getMasterProviderComponent && temporaryProviderComponent && temporaryProviderComponent.UseMasterProvider())
82 return temporaryProviderComponent;
87 void SetForcedProvider(SCR_CampaignBuildingProviderComponent forcedProviderComponent = null)
120 resourceComponent = SCR_ResourceComponent.FindResourceComponent(
GetProviderEntity());
122 if (resourceComponent)
129 resourceComponent = SCR_ResourceComponent.FindResourceComponent(parent);
131 if (resourceComponent)
145 if (!providerComponent)
148 return providerComponent.GetShownBudget();
152 [
Obsolete(
"SCR_CampaignBuildingEditorComponent.GetProviderResourceComponent() should be used instead.")]
162 if (suppliesComponent)
210 BaseGameMode gameMode =
GetGame().GetGameMode();
212 SCR_CampaignBuildingManagerComponent buildingManagerComponent = SCR_CampaignBuildingManagerComponent.Cast(gameMode.FindComponent(SCR_CampaignBuildingManagerComponent));
213 if (!buildingManagerComponent)
217 if (!providerComponent)
224 Resource resource =
Resource.Load(buildingManagerComponent.GetClientTriggerResourceName());
225 if (!resource || !resource.IsValid())
229 params.TransformMode = ETransformMode.LOCAL;
232 return ScriptedGameTriggerEntity.Cast(
GetGame().SpawnEntityPrefab(resource, provider.
GetWorld(),
params));
241 if (!providerComponent)
252 SCR_CampaignBuildingAreaMeshComponent areaMeshComponent = SCR_CampaignBuildingAreaMeshComponent.Cast(
m_BuildingAreaTrigger.FindComponent(SCR_CampaignBuildingAreaMeshComponent));
253 if (areaMeshComponent && areaMeshComponent.ShouldEnableFrameUpdateDuringEditor())
255 areaMeshComponent.ActivateEveryFrame();
256 areaMeshComponent.GenerateAreaMesh();
263 if (providerComponent.ObstrucViewWhenEnemyInRange())
269 if (!factionComponent)
274 buildingFaction = factionComponent.GetDefaultAffiliatedFaction();
277 buildingFaction = factionComponent.GetAffiliatedFaction();
279 if (!buildingFaction)
280 buildingFaction = factionComponent.GetDefaultAffiliatedFaction();
286 array<SCR_EditorContentBrowserSaveStateDataUI> contentBrowserStates = {};
289 for (
int i = 0; i < tabsCount; i++)
291 if (!contentBrowserStates[i])
296 if (i == 0 || !
CanBeShown(contentBrowserStates[i]))
303 if (!nonMasterProviderComponent)
306 if (!nonMasterProviderComponent.UseAllAvailableProviders())
309 array<SCR_MilitaryBaseComponent> bases = {};
310 int basesCount = nonMasterProviderComponent.GetBases(bases);
341 if (!providerComponent)
344 array<EEditableEntityLabel> labels = providerComponent.GetAvailableTraits();
345 if (labels.Contains(
EEditableEntityLabel.SERVICE_HQ) && !SCR_CampaignBuildingProviderComponent.CanBeUsedToEstablishBase(providerComponent.GetOwner(), m_Manager.GetPlayerID()))
350 if (tab.ContainsLabel(label))
362 if (!providerComponent)
365 return providerComponent.GetMilitaryBaseComponent();
379 SCR_CampaignBuildingGadgetToolComponent gadgetComponent = SCR_CampaignBuildingGadgetToolComponent.Cast(gadgetManager.
GetHeldGadgetComponent());
380 if (!gadgetComponent)
384 gadgetComponent.ToolToHand();
386 gadgetComponent.ToolToInventory();
412 SCR_NotificationsComponent.SendLocal(
ENotification.EDITOR_ENEMY_IN_AREA);
429 ScriptedGameTriggerEntity trigger =
GetTrigger();
433 trigger.QueryEntitiesInside();
434 array<IEntity> entitiesInside = {};
435 trigger.GetEntitiesInside(entitiesInside);
438 foreach (
IEntity entity : entitiesInside)
459 SCR_ChimeraCharacter character = SCR_ChimeraCharacter.Cast(ent);
463 CharacterControllerComponent charControl = character.GetCharacterController();
467 int playerId = SCR_PossessingManagerComponent.GetPlayerIdFromControlledEntity(ent);
470 AIControlComponent ctrComp = charControl.GetAIControlComponent();
471 if (ctrComp && !ctrComp.IsAIActivated())
477 if (!providerComponent || !providerComponent.IsEnemyFaction(character))
490 SCR_EditableCharacterComponent editableCharacter = SCR_EditableCharacterComponent.Cast(ent.
FindComponent(SCR_EditableCharacterComponent));
491 if (!editableCharacter)
502 SCR_EditableCharacterComponent editableCharacter = SCR_EditableCharacterComponent.Cast(ent.
FindComponent(SCR_EditableCharacterComponent));
503 if (!editableCharacter)
515 PlayerController playerController =
GetGame().GetPlayerManager().GetPlayerController(playerId);
516 if (!playerController)
517 return SCR_ECharacterRank.INVALID;
525 SCR_MilitaryBaseComponent
base;
530 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(provider.
FindComponent(SCR_CampaignBuildingProviderComponent));
531 if (!providerComponent)
534 base = providerComponent.GetMilitaryBaseComponent();
553 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(provider.
FindComponent(SCR_CampaignBuildingProviderComponent));
554 if (!providerComponent)
557 SCR_MilitaryBaseComponent
base = providerComponent.GetMilitaryBaseComponent();
571 SCR_CampaignBuildingCompositionComponent comp = SCR_CampaignBuildingCompositionComponent.Cast(ent.
FindComponent(SCR_CampaignBuildingCompositionComponent));
576 if (comp.GetProviderEntity() == null)
589 SCR_CampaignBuildingCompositionComponent comp = SCR_CampaignBuildingCompositionComponent.Cast(ent.
FindComponent(SCR_CampaignBuildingCompositionComponent));
594 comp.SetProviderEntityServer(null);
608 SCR_CampaignBuildingNetworkComponent buildingNetworkingComp = SCR_CampaignBuildingNetworkComponent.Cast(
SCR_PlayerController.s_pLocalPlayerController.FindComponent(SCR_CampaignBuildingNetworkComponent));
609 if (buildingNetworkingComp)
610 buildingNetworkingComp.RequestBuildModeProvider();
620 RplComponent providerRplComp;
621 array<RplId> providerIds = {};
629 providerIds.Insert(providerRplComp.Id());
637 forcedProviderId = providerRplComp.Id();
640 if (forcedProviderId.IsValid() && providerIds.IsEmpty())
653 RplComponent providerRplComp = RplComponent.Cast(
Replication.FindItem(forcedProvider));
655 SCR_CampaignBuildingProviderComponent providerComp;
658 providerEnt = providerRplComp.GetEntity();
659 providerComp = SCR_CampaignBuildingProviderComponent.Cast(providerEnt.
FindComponent(SCR_CampaignBuildingProviderComponent));
666 foreach (
RplId providerRplId : providers)
668 providerRplComp = RplComponent.Cast(
Replication.FindItem(providerRplId));
669 if (!providerRplComp)
672 providerEnt = providerRplComp.GetEntity();
676 providerComp = SCR_CampaignBuildingProviderComponent.Cast(providerEnt.
FindComponent(SCR_CampaignBuildingProviderComponent));
687 ScriptedGameTriggerEntity trigger =
GetTrigger();
690 IEntity ent = trigger.GetParent();
699 if (factionComponent)
702 Faction buildingFaction = factionComponent.GetAffiliatedFaction();
704 if (!buildingFaction)
705 buildingFaction = factionComponent.GetDefaultAffiliatedFaction();
714 if (!providerComponent)
717 if (!providerComponent.UseAllAvailableProviders())
720 array<SCR_MilitaryBaseComponent> bases = {};
721 int basesCount = providerComponent.GetBases(bases);
732 SCR_CampaignBuildingProviderComponent provider = SCR_CampaignBuildingProviderComponent.Cast(baseComponent);
746 array<SCR_EditorContentBrowserSaveStateDataUI> contentBrowserStates = {};
749 for (
int i = 0; i < tabsCount; i++)
751 if (!contentBrowserStates[i])
754 if (i == 0 || !
CanBeShown(contentBrowserStates[i]))
766 if (getMasterProvider)
770 if (!providerComponent)
773 return providerComponent.GetOwner();
782 if (!providerComponent)
785 return providerComponent.GetMasterProviderEntity();
793 for (
int i = 0; i < count; i++)
799 IEntity provider = rplComp.GetEntity();
803 SCR_CampaignBuildingProviderComponent providerComponent = SCR_CampaignBuildingProviderComponent.Cast(provider.
FindComponent(SCR_CampaignBuildingProviderComponent));
804 if (!providerComponent)
817 private void RequestRecreationOfEditors()
820 m_Manager.RecreateEditorModes();
824 override protected bool RplSave(ScriptBitWriter writer)
826 array<RplId> providers = {};
827 RplComponent rplComp;
833 Debug.Error(
string.Format(
"WARNING: SCR_CampaignBuildingEditorComponent.RplSave encountered a null in the list of providers while packing data for the editor %1, which belongs to the player %2",
FilePath.StripPath(
GetOwner().
GetPrefabData().GetPrefabName().GetPath()),
SCR_PlayerIdentityUtils.GetPlayerLogInfo(m_Manager.GetPlayerID())));
835 GetGame().GetCallqueue().CallLater(RequestRecreationOfEditors);
840 if (!providerComponent)
843 provider = providerComponent.GetOwner();
849 providers.Insert(rplComp.Id());
852 int count = providers.Count();
853 writer.WriteInt(count);
854 foreach (
RplId rplId : providers)
856 writer.WriteRplId(rplId);
866 RplComponent rplComp;
869 SCR_CampaignBuildingProviderComponent providerComponent;
870 reader.ReadInt(count);
872 for (
int i = 0; i < count; i++)
874 reader.ReadRplId(entityRplID);
875 if (!entityRplID.IsValid())
878 rplComp = RplComponent.Cast(
Replication.FindItem(entityRplID));
885 ent = rplComp.GetEntity();
889 providerComponent = SCR_CampaignBuildingProviderComponent.Cast(ent.
FindComponent(SCR_CampaignBuildingProviderComponent));
890 if (providerComponent)
ArmaReforgerScripted GetGame()
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
SCR_ECharacterRank GetUserRank()
IEntity GetProviderEntity()
void SetProviderFromRplID()
Set a provider, loaded from RPL ID.
bool GetProviderResourceComponent(out SCR_ResourceComponent resourceComponent)
ScriptInvokerBool GetOnObstructionEventTriggered()
ref ScriptInvokerBool m_OnObstructionEventTriggered
SCR_FactionAffiliationComponent GetProviderFactionComponent()
ScriptInvoker GetOnProviderChanged()
bool AssociateCompositionsToProvider(IEntity ent)
void RemoveOnEntityKilled(IEntity ent)
Remove an event called when entity which can block view in Free Roam Building is killed / leave the a...
bool TabContainLabel(SCR_EditorContentBrowserSaveStateDataUI tab)
Check if the given tabUI contains any label set on provider.
bool GetProviderSuppliesComponent(out SCR_CampaignSuppliesComponent suppliesComponent)
ref array< RplId > m_aProvidersRplIds
SCR_ContentBrowserEditorComponent m_ContentBrowserManager
void AddProviderEntityEditorComponent(notnull SCR_CampaignBuildingProviderComponent providerComponent)
ScriptedGameTriggerEntity m_BuildingAreaTrigger
void OnMilitaryBaseRegistrationChanged(SCR_MilitaryBaseLogicComponent baseComponent)
void SetOnEnterEvent()
Set event to obstruct view when enemy character enters a building radius.
bool IsViewObstructed()
returns true if the view should be obsctructed
void SendProviders_S()
Authority method for replicating information about currently used providers to the client who owns th...
SCR_CampaignBuildingProviderComponent GetProviderComponent(bool getMasterProviderComponent=false)
Return provider component of current provider.
ref ScriptInvoker m_OnProviderChanged
bool CanBlockView(notnull IEntity ent)
bool IsProviderBase()
Returns true if the provider is a base.
void UpdateTabs()
Update tabs.
void ToggleBuildingTool(bool mode)
void RpcDo_SyncBuildModeProviders(array< RplId > providers, RplId forcedProvider)
void AddRemoveFactionLabel(SCR_Faction faction, bool addLabel)
void RemoveProviderEntityEditorComponent(SCR_CampaignBuildingProviderComponent providerComponent)
void EntityEnterTrigger(IEntity ent)
void SetForcedProvider(SCR_CampaignBuildingProviderComponent forcedProviderComponent=null)
Used when player initiate a building mode via user action - forced provider is an entity owning the u...
IEntity GetMasterProviderEntity()
bool UnassignCompositionProvider(IEntity ent)
int GetProviderEntitiesCount()
SCR_CampaignBuildingEditorComponentClass m_aProvidersComponents
bool IsActiveProvider(notnull SCR_CampaignBuildingProviderComponent providerComponent)
void EntityLeaveTrigger(IEntity ent)
ScriptedGameTriggerEntity GetTrigger()
bool CanBeShown(notnull SCR_EditorContentBrowserSaveStateDataUI tab)
Check if the given tab can be shown.
SCR_CampaignBuildingProviderComponent m_ForcedProviderComponent
ScriptedGameTriggerEntity SpawnClientTrigger()
RplComponent m_RplComponent
void SetOnEntityKilled(IEntity ent)
Set an event called when entity spawned by this provider get killed.
EEditableEntityBudget GetShownBudget()
Evaluate all set budgets with this provider and return first one that is marked as to be shown in UI.
float GetBuildingRadius()
void SCR_CampaignSuppliesComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
void SCR_CharacterRankComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
ScriptInvokerBase< ScriptInvokerBoolMethod > ScriptInvokerBool
SCR_VehicleDamageManagerComponentClass GetPrefabData()
proto external GenericComponent FindComponent(typename typeName)
void Rpc(func method, void p0=NULL, void p1=NULL, void p2=NULL, void p3=NULL, void p4=NULL, void p5=NULL, void p6=NULL, void p7=NULL)
proto external Managed FindComponent(typename typeName)
proto external BaseWorld GetWorld()
proto external IEntity GetParent()
proto external void RemoveChild(notnull IEntity child, bool keepTransform=false)
Remove Entity from hierarchy.
Object holding reference to resource. In destructor release the resource.
Replication item identifier.
void EOnEditorDeactivate()
void EOnEditorCloseServer()
When the editor is closed (called on server).
void EOnEditorOpenServer()
When the editor is opened (called on server).
void EOnEditorPostActivate()
When the component is activated, but after EOnEditorActivate() function was called in all components.
SCR_EditableEntityComponent GetParentEntity()
Editor Content browser State data that includes UI data for tabs.
static RplComponent GetEntityRplComponent(notnull IEntity entity)
EEditableEntityLabel GetFactionLabel()
ScriptInvokerEntity GetOnEntityEnterTrigger()
ScriptInvokerEntity GetOnEntityLeaveTrigger()
static SCR_GadgetManagerComponent GetGadgetManager(IEntity entity)
SCR_GadgetComponent GetHeldGadgetComponent()
static int GetLocalPlayerId()
Returns either a valid ID of local player or 0.
bool RplLoad(ScriptBitReader reader)
bool RplSave(ScriptBitWriter writer)
IEntity GetOwner()
Owner entity of the fuel tank.
EntityFlags
Various entity flags.
proto external PlayerController GetPlayerController()
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.