Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
undergroundtrigger.c
Go to the documentation of this file.
1
3class UndergroundTriggerCarrier : UndergroundTriggerCarrierBase
4{
6 UndergroundTrigger m_Trigger;
7
8 void UndergroundTriggerCarrier()
9 {
10 RegisterNetSyncVariableInt("m_TriggerIndex", -1, 255);
11 RegisterNetSyncVariableInt("m_ParentObjectNetIdLow");
12 RegisterNetSyncVariableInt("m_ParentObjectNetIdHigh");
13 }
14
15 void ~UndergroundTriggerCarrier()
16 {
17 if (m_Trigger && !m_Trigger.IsSetForDeletion() && g_Game)
18 {
19 m_Trigger.Delete();
20 }
21 }
22
23 override void OnVariablesSynchronized()
24 {
25 super.OnVariablesSynchronized();
26
27 if (g_Game.IsMultiplayer())
29
30 if (!m_Trigger)
31 SpawnTrigger();
32 }
33
34 bool CanSpawnTrigger()
35 {
36 return UndergroundAreaLoader.m_JsonData && m_TriggerIndex != -1;
37 }
38
39 void RequestDelayedTriggerSpawn()
40 {
41 g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(SpawnTrigger, 100);
42 }
43
44 void SpawnTrigger()
45 {
46 if (!CanSpawnTrigger())
47 {
48 RequestDelayedTriggerSpawn();
49 return;
50 }
51
52 if (UndergroundAreaLoader.m_JsonData.Triggers && UndergroundAreaLoader.m_JsonData.Triggers.IsValidIndex(m_TriggerIndex))
53 {
54 JsonUndergroundAreaTriggerData data = UndergroundAreaLoader.m_JsonData.Triggers[m_TriggerIndex];
55 UndergroundTrigger trigger = UndergroundTrigger.Cast(g_Game.CreateObjectEx("UndergroundTrigger", GetPosition(), ECE_LOCAL));
56 if (trigger)
57 {
58 #ifdef DIAG_DEVELOPER
59 trigger.m_Local = true;
60 #endif
61 trigger.SetPosition(vector.Zero);
62 AddChild(trigger, -1);
63 trigger.Init(data);
64 trigger.SetTriggerParentObject(m_ParentObject);
65
66 m_Trigger = trigger;
67 }
68 }
69 }
70}
71
72enum EUndergroundTriggerType
73{
77 INNER
78}
79
80class UndergroundTrigger : ManTrigger
81{
83
84 EUndergroundTriggerType m_Type;
87
89
91 {
92 m_Data = data;
93 //Print("Spawning trigger " + this + "at pos: " + GetPosition());
94 vector extMax = data.GetSize() * 0.5;
95 vector extMin = -extMax;
96 SetExtents(extMin, extMax);
97 m_Accommodation = data.EyeAccommodation;
98 m_InterpolationSpeed = data.InterpolationSpeed;
99
100 if (data.Breadcrumbs && data.Breadcrumbs.Count() > 0) //TODO: simpler check
101 {
102 if (data.Breadcrumbs.Count() > 32)
103 {
104 ErrorEx("max 'Breadcrumb' count is 32, found: " + data.Breadcrumbs.Count());
105 }
106 m_Type = EUndergroundTriggerType.TRANSITIONING;
107 }
108 else
109 {
110 if (m_Accommodation == 1.0)
111 {
112 m_Type = EUndergroundTriggerType.OUTER;
113 }
114 else
115 {
116 m_Type = EUndergroundTriggerType.INNER;
117 }
118 }
119 }
120
123 {
124 m_ParentObject = parent;
125 }
126
131
132 override protected bool CanAddObjectAsInsider(Object object)
133 {
134 if (!super.CanAddObjectAsInsider(object))
135 {
136 return false;
137 }
138
139 return ManBase.Cast(object).IsControlledPlayer();
140 }
141
142
143 override void EOnInit(IEntity other, int extra)
144 {
145 //disable parent behaviour
146 }
147
148 #ifdef DEVELOPER
149 override protected void OnEnterServerEvent(TriggerInsider insider)
150 {
151 #ifndef SERVER//to make it work in single during development
152 OnEnterClientEvent(insider);
153 #endif
154 }
155 override protected void OnLeaveServerEvent(TriggerInsider insider)
156 {
157 #ifndef SERVER//to make it work in single during development
158 OnLeaveClientEvent(insider);
159 #endif
160 }
161 #endif
162
163 override protected void OnEnterClientEvent(TriggerInsider insider)
164 {
165 PlayerBase player = PlayerBase.Cast(insider.GetObject());
166 if (player)
167 {
168 UndergroundHandlerClient handler = player.GetUndergroundHandler();
169 if (handler)
170 {
171 handler.OnTriggerEnter(this);
172 }
173 }
174 }
175
176 override protected void OnLeaveClientEvent(TriggerInsider insider)
177 {
178 PlayerBase player = PlayerBase.Cast(insider.GetObject());
179 if (player)
180 {
181 UndergroundHandlerClient handler = player.GetUndergroundHandler();
182 if (handler)
183 {
184 handler.OnTriggerLeave(this);
185 }
186 }
187 }
188
189};
eBleedingSourceType m_Type
void SetExtents(vector mins, vector maxs)
override void OnLeaveClientEvent(TriggerInsider insider)
override void OnLeaveServerEvent(TriggerInsider insider)
override void OnEnterServerEvent(TriggerInsider insider)
override void OnEnterClientEvent(TriggerInsider insider)
const int ECE_LOCAL
Trigger only accepting Object which IsMan().
Definition mantrigger.c:3
The object which is in a trigger and its metadata.
Definition trigger.c:3
Object GetObject()
Definition trigger.c:28
override void OnVariablesSynchronized()
DayZGame g_Game
Definition dayzgame.c:3942
class DayZProfilesOptions UNDEFINED
override Widget Init()
Definition dayzgame.c:127
Object m_ParentObject
Cached parent.
Definition effect.c:39
enum ShapeType ErrorEx
vector GetPosition()
Get the world position of the Effect.
Definition effect.c:473
const int CALL_CATEGORY_SYSTEM
Definition tools.c:8
override void EOnInit(IEntity other, int extra)
bool CanAddObjectAsInsider(Object object)
Definition traptrigger.c:93
void UndergroundHandlerClient(PlayerBase player)
void SetTriggerParentObject(Object parent)
sets parent "virtual" parent object that trigger is registered to, eg. building
Object GetTriggerParentObject()
float m_Accommodation
float m_InterpolationSpeed