Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_PlayerDelegateEditorComponent.c
Go to the documentation of this file.
1[ComponentEditorProps(category: "GameScripted/Editor", description: "", icon: "WBData/ComponentEditorProps/componentEditor.png")]
5
10{
11 [Attribute(params: "et")]
13
14 protected int m_iPlayerID;
15 protected SCR_EditablePlayerDelegateComponent m_PlayerDelegate;
18
19 //------------------------------------------------------------------------------------------------
22 void RegisterDelegate(SCR_EditablePlayerDelegateComponent delegate)
23 {
24 m_Delegates.Set(delegate.GetPlayerID(), delegate);
25
26 delegate.GetOnLimitedEditorChanged().Insert(OnLimitedEditorChanged);
27 OnLimitedEditorChanged(delegate.GetPlayerID(), delegate.HasLimitedEditor());
28 }
29
30 //------------------------------------------------------------------------------------------------
33 void UnegisterDelegate(SCR_EditablePlayerDelegateComponent delegate)
34 {
35 m_Delegates.Remove(delegate.GetPlayerID());
36
37 delegate.GetOnLimitedEditorChanged().Remove(OnLimitedEditorChanged);
38 OnLimitedEditorChanged(delegate.GetPlayerID(), true);
39 }
40
41 //------------------------------------------------------------------------------------------------
46 {
47 return outDelegates.Copy(m_Delegates);
48 }
49
50 //------------------------------------------------------------------------------------------------
54 SCR_EditablePlayerDelegateComponent GetDelegate(int playerID)
55 {
56 SCR_EditablePlayerDelegateComponent delegate;
57 m_Delegates.Find(playerID, delegate);
58 return delegate;
59 }
60
61 //------------------------------------------------------------------------------------------------
64 {
65 if (!m_Delegates || m_Delegates.IsEmpty())
66 return false;
67
68 for (int i, count = m_Delegates.Count(); i < count; i++)
69 {
70 if (!m_Delegates.GetElement(i))
71 continue;
72
73 if (!m_Delegates.GetElement(i).HasLimitedEditor())
74 return true;
75 }
76 return false;
77 }
78
79 //------------------------------------------------------------------------------------------------
86
87 //------------------------------------------------------------------------------------------------
88 protected void OnLimitedEditorChanged(int playerID, bool isLimited)
89 {
90 m_OnLimitedEditorChanged.Invoke(playerID, isLimited);
91 }
92
93 //------------------------------------------------------------------------------------------------
94 protected void OnSpawnServer(int playerID, IEntity controlledEntity)
95 {
96 if (m_PlayerDelegate && m_iPlayerID == playerID)
97 m_PlayerDelegate.SetControlledEntity(controlledEntity);
98 }
99
100 //------------------------------------------------------------------------------------------------
101 protected void OnDeathServer(notnull SCR_InstigatorContextData instigatorContextData)
102 {
103 if (m_PlayerDelegate && m_iPlayerID == instigatorContextData.GetVictimPlayerID())
104 m_PlayerDelegate.SetControlledEntity(null);
105 }
106
107 //------------------------------------------------------------------------------------------------
108 protected void OnPlayerDeletedServer(int playerID, IEntity controlledEntity)
109 {
110 OnDeathServer(new SCR_InstigatorContextData(playerID, controlledEntity, null, Instigator.CreateInstigatorGM(), true));
111 }
112
113 //------------------------------------------------------------------------------------------------
114 override void EOnEditorInitServer()
115 {
116 Resource entityResource = Resource.Load(m_PlayerDelegatePrefab);
117 IEntityComponentSource componentSource = SCR_EditablePlayerDelegateComponentClass.GetEditableEntitySource(entityResource);
118 if (!componentSource)
119 {
120 Print(string.Format("SCR_EditablePlayerDelegateComponent missing in '%1'!", m_PlayerDelegatePrefab.GetPath()), LogLevel.WARNING);
121 return;
122 }
123
124 if (!componentSource.GetClassName().ToType().IsInherited(SCR_EditablePlayerDelegateComponent))
125 {
126 Print(string.Format("'%1' contains editable entity entity of type %2, must be SCR_EditablePlayerDelegateComponent!", m_PlayerDelegatePrefab.GetPath(), componentSource.GetClassName()), LogLevel.WARNING);
127 return;
128 }
129
130 SCR_EditorManagerEntity editorManager = GetManager();
131 m_iPlayerID = editorManager.GetPlayerID();
132
133 IEntity delegateEntity = GetGame().SpawnEntityPrefab(entityResource);
134 m_PlayerDelegate = SCR_EditablePlayerDelegateComponent.Cast(SCR_EditablePlayerDelegateComponent.GetEditableEntity(delegateEntity));
135 m_PlayerDelegate.InitPlayerDelegate(editorManager, m_iPlayerID);
136 m_PlayerDelegate.RestoreParentEntity();
137
139 if (gameMode)
140 {
141 gameMode.GetOnPlayerSpawned().Insert(OnSpawnServer);
142 gameMode.GetOnPlayerKilled().Insert(OnDeathServer);
143 gameMode.GetOnPlayerDeleted().Insert(OnPlayerDeletedServer);
144
145 m_PlayerDelegate.SetControlledEntity(SCR_PossessingManagerComponent.GetPlayerMainEntity(m_iPlayerID));
146 }
147 else
148 {
150 if (playerController && playerController.GetPlayerId() == m_iPlayerID)
151 {
152 m_PlayerDelegate.SetControlledEntity(playerController.GetMainEntity());
153 }
154 }
155 }
156
157 //------------------------------------------------------------------------------------------------
158 override void EOnEditorDeleteServer()
159 {
161 m_PlayerDelegate.Delete();
162
164 if (gameMode)
165 {
166 gameMode.GetOnPlayerSpawned().Remove(OnSpawnServer);
167 gameMode.GetOnPlayerKilled().Remove(OnDeathServer);
168 gameMode.GetOnPlayerDeleted().Remove(OnPlayerDeletedServer);
169 }
170 }
171};
ArmaReforgerScripted GetGame()
Definition game.c:1398
enum EAIGroupCombatMode ComponentEditorProps(category:"GameScripted/AI", description:"Component for utility AI system for groups")
SCR_BaseGameMode GetGameMode()
void SCR_EditorManagerEntity(IEntitySource src, IEntity parent)
Object holding reference to resource. In destructor release the resource.
Definition Resource.c:25
void SCR_BaseEditorComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
SCR_EditorManagerEntity GetManager()
ScriptInvokerBase< SCR_BaseGameMode_PlayerIdAndEntity > GetOnPlayerSpawned()
ScriptInvokerBase< SCR_BaseGameMode_PlayerIdAndEntity > GetOnPlayerDeleted()
ScriptInvokerBase< SCR_BaseGameMode_OnControllableDestroyed > GetOnPlayerKilled()
void RegisterDelegate(SCR_EditablePlayerDelegateComponent delegate)
void OnSpawnServer(int playerID, IEntity controlledEntity)
ref map< int, SCR_EditablePlayerDelegateComponent > m_Delegates
SCR_EditablePlayerDelegateComponent GetDelegate(int playerID)
int GetDelegates(out notnull map< int, SCR_EditablePlayerDelegateComponent > outDelegates)
void OnPlayerDeletedServer(int playerID, IEntity controlledEntity)
SCR_EditablePlayerDelegateComponent m_PlayerDelegate
void OnDeathServer(notnull SCR_InstigatorContextData instigatorContextData)
void UnegisterDelegate(SCR_EditablePlayerDelegateComponent delegate)
void OnLimitedEditorChanged(int playerID, bool isLimited)
Definition Types.c:486
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
SCR_FieldOfViewSettings Attribute
proto external PlayerController GetPlayerController()
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134