35typedef Param7<vector, vector, vector, vector, float, string, array<ref TriggerInsider>> DebugTriggerInfo;
42 const int TIMEOUT = 1000;
44 ref array<ref TriggerInsider> m_insiders;
48 string m_DebugAreaType;
49 ref array<ref TriggerInsider> m_dbgInsiders;
53 private void Trigger()
58 m_insiders =
new array<ref TriggerInsider>;
62 private void ~Trigger()
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))
116 void SetExtents(vector mins, vector maxs)
118 SetCollisionBox(mins, maxs);
124 return GetCollisionRadius();
128 array<ref TriggerInsider> GetInsiders()
134 TriggerInsider GetInsiderForObject(
Object object)
138 for (
int n = 0; n < m_insiders.Count(); ++n )
149 int GetInsiderIndexForObject(
Object object)
153 for (
int n = 0; n < m_insiders.Count(); ++n )
234 if ( GetInsiderForObject( obj ) )
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
273 m_insiders.Remove(index);
275 m_insiders.RemoveItemUnOrdered(insider);
282 for (
int n = 0; n < m_insiders.Count(); ++n )
299 #ifdef DIAG_DEVELOPER
300 DebugSendDmgTrigger();
304 if ( m_insiders.Count() == 0 )
311 for (
int n = m_insiders.Count() - 1; n >= 0 ; --n)
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 (!
g_Game.IsMultiplayer() || m_Local)
385 DebugDmgTrigger(data.param1, data.param2, data.param3, data.param4, data.param5, data.param6, data.param7);
388 protected ref array<Shape> dbgTargets =
new array<Shape>();
390 void DebugDmgTrigger( vector pos, vector orientation, vector min, vector max,
float radius,
string dmgType, array<ref TriggerInsider> insiders)
392 CleanupDebugShapes(dbgTargets);
394 bool enableDebug = DiagMenu.GetBool(
DiagMenuIDs.TRIGGER_DEBUG);
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));
450 protected Shape DrawDebugShape(vector pos, vector min, vector max,
float radius,
int color)
454 switch (GetTriggerShape())
461 dbgShape.CreateMatrix(mat);
462 dbgShape.SetMatrix(mat);
475 dbgTargets.Insert(dbgShape);
480 protected void CleanupDebugShapes(array<Shape> shapes)
482 foreach (
Shape shape : shapes)
484 Debug.RemoveShape(shape);
The class that will be instanced (moddable).
void Enter(TriggerInsider insider)
void Leave(TriggerInsider insider)
void StayStart(int nrOfInsiders)
void Stay(TriggerInsider insider, float deltaTime)
override void OnLeave(Object obj)
override void OnEnter(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.
int timeStamp
Last time the object was seen in ms.
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)
override string GetDebugName()
Serializer ParamsReadContext
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.