35typedef Param7<vector, vector, vector, vector, float, string, array<ref TriggerInsider>> DebugTriggerInfo;
42 const int TIMEOUT = 1000;
48 string m_DebugAreaType;
65 CleanupDebugShapes(dbgTargets);
74 override void EOnInit(
IEntity other,
int extra)
76 SetExtents(
"-2 -4 -2",
"2 4 2");
88 override void EOnFrame(
IEntity other,
float timeSlice)
94 override void EOnEnter(
IEntity other,
int extra)
102 override void EOnLeave(
IEntity other,
int extra)
105 if (
Class.CastTo(obj, other))
124 return GetCollisionRadius();
138 for (
int n = 0; n < m_insiders.Count(); ++n )
141 if (ins.GetObject() ==
object)
149 int GetInsiderIndexForObject(
Object object)
153 for (
int n = 0; n < m_insiders.Count(); ++n )
156 if (ins.GetObject() ==
object)
172 OnEnter(insider.GetObject());
234 if ( GetInsiderForObject( obj ) )
242 insider.timeStamp =
g_Game.GetTime();
251 int index = m_insiders.Insert(insider);
255 obj.OnEnterTrigger(
this);
257 #ifdef TRIGGER_DEBUG_NORMAL
266 insider.GetObject().OnLeaveTrigger(
this);
268 #ifdef TRIGGER_DEBUG_NORMAL
269 Debug.TriggerLog(
string.Format(
"%1: removing at index %2",
GetDebugName(insider.GetObject()), index),
"Trigger",
"",
"RemoveInsider",
GetDebugName(
this));
273 m_insiders.Remove(index);
275 m_insiders.RemoveItemUnOrdered(insider);
282 for (
int n = 0; n < m_insiders.Count(); ++n )
285 if (ins.GetObject() ==
object)
299 #ifdef DIAG_DEVELOPER
300 DebugSendDmgTrigger();
304 if ( m_insiders.Count() == 0 )
311 for (
int n = m_insiders.Count() - 1; n >= 0 ; --n)
314 Object obj = insider.GetObject();
319 #ifdef TRIGGER_DEBUG_BASIC
323 m_insiders.Remove(n);
336 float currentTime =
g_Game.GetTickTime();
352 super.OnRPC(sender, rpc_type, ctx);
354 #ifdef DIAG_DEVELOPER
357 case ERPCs.DIAG_TRIGGER_DEBUG:
361 DebugDmgTrigger(data.param1, data.param2, data.param3, data.param4, data.param5, data.param6, data.param7);
368 void DebugSendDmgTrigger()
371 GetCollisionBox(minmax);
374 data.param1 = GetWorldPosition();
376 data.param3 = minmax[0];
377 data.param4 = minmax[1];
378 data.param5 = GetCollisionRadius();
379 data.param6 = m_DebugAreaType;
380 data.param7 = m_insiders;
383 PluginDiagMenuServer.SendDataToSubscribersServer(
this, ESubscriberSystems.TRIGGERS,
ERPCs.DIAG_TRIGGER_DEBUG, data,
false);
384 else if (!
GetGame().IsMultiplayer() || m_Local)
385 DebugDmgTrigger(data.param1, data.param2, data.param3, data.param4, data.param5, data.param6, data.param7);
392 CleanupDebugShapes(dbgTargets);
402 vector w_pos, w_pos_sphr, w_pos_lend;
411 m_DebugAreaType = dmgType;
414 switch ( m_DebugAreaType )
420 case "BarbedWireHit":
430 m_dbgInsiders = insiders;
432 if (m_dbgInsiders.Count() > 0)
437 for (
int i = 0; i < m_dbgInsiders.Count(); i++)
442 vector insiderPos = insider_EAI.GetWorldPosition() +
"0 0.1 0";
443 dbgTargets.Insert(
Debug.DrawArrow(w_pos, insiderPos));
454 switch (GetTriggerShape())
461 dbgShape.CreateMatrix(mat);
462 dbgShape.SetMatrix(mat);
475 dbgTargets.Insert(dbgShape);
482 foreach (
Shape shape : shapes)
484 Debug.RemoveShape(shape);
Super root of all classes in Enforce script.
The class that will be instanced (moddable)
Serialization general interface. Serializer API works with:
void Enter(TriggerInsider insider)
void Leave(TriggerInsider insider)
void StayStart(int nrOfInsiders)
void Stay(TriggerInsider insider, float deltaTime)
override void OnLeave(Object obj)
TriggerInsider CreateInsider(Object obj)
Used for easily overriding TriggerInsider creation without rewriting AddInsider.
void RemoveInsider(TriggerInsider insider, int index=-1)
Removing of TriggerInsider.
void OnLeaveBeginEvent(TriggerInsider insider)
bool ShouldRemoveInsider(TriggerInsider insider)
Condition whether a TriggerInsider should still be updated or not (checked in update loop and before ...
void UpdateInsiders(int timeout)
override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
bool CanAddObjectAsInsider(Object object)
Condition whether an Object can be added as TriggerInsider (checked before calling AddInsider)
void OnEnterBeginEvent(TriggerInsider insider)
void RemoveInsiderByObject(Object object)
Removing of TriggerInsider through Object.
void AddInsider(Object obj)
Adding of new TriggerInsider.
bool ShouldRemoveInsiderNoLeave(TriggerInsider insider)
Condition whether a TriggerInsider should still be updated or not, skips OnLeaveEvent (checked in upd...
The object which is in a trigger and its metadata.
Object m_Object
Object that data belongs to.
float lastUpdated
Last time the object was updated in seconds, is used for calculating deltaTime.
float timeEntered
Time the object was first seen in seconds.
void TriggerInsider(Object obj)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
override string GetDebugName()
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
proto native void SetFlags(ShapeFlags flags)
EntityEvent
Entity events for event-mask, or throwing event from code.
proto native vobject GetObject(string name)
Loads object from data, or gets it from cache. Object must be released when not used.
proto native void SetCollisionBox(vector mins, vector maxs)
Sets collision box for object.