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