triggerevents.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //! Events API for triggers, keep in sync with AreaDamageEvents for consistency
  2. //! NOTE: The deltaTime passed in is the one for the Insider specifically.
  3. class TriggerEvents : ScriptedEntity
  4. {
  5. protected ref ScriptInvoker m_OnEnterInvoker;
  6. protected ref ScriptInvoker m_OnLeaveInvoker;
  7. ScriptInvoker GetOnEnterInvoker()
  8. {
  9. if ( !m_OnEnterInvoker )
  10. m_OnEnterInvoker = new ScriptInvoker;
  11. return m_OnEnterInvoker;
  12. }
  13. ScriptInvoker GetOnLeaveInvoker()
  14. {
  15. if ( !m_OnLeaveInvoker )
  16. m_OnLeaveInvoker = new ScriptInvoker;
  17. return m_OnLeaveInvoker;
  18. }
  19. /** \name OnEnter
  20. Called when an object enters the trigger
  21. */
  22. ///@{
  23. protected void Enter(TriggerInsider insider)
  24. {
  25. #ifdef TRIGGER_DEBUG_BASIC
  26. Debug.TriggerLog(GetDebugName(insider.GetObject()), "TriggerEvents", "", "Enter", GetDebugName(this));
  27. #endif
  28. OnEnterBeginEvent(insider);
  29. if (m_OnEnterInvoker)
  30. m_OnEnterInvoker.Invoke(insider);
  31. if ( GetGame().IsServer() )
  32. OnEnterServerEvent(insider);
  33. else
  34. OnEnterClientEvent(insider);
  35. OnEnterEndEvent(insider);
  36. }
  37. protected void OnEnterBeginEvent(TriggerInsider insider) {}
  38. protected void OnEnterServerEvent(TriggerInsider insider) {}
  39. protected void OnEnterClientEvent(TriggerInsider insider) {}
  40. protected void OnEnterEndEvent(TriggerInsider insider) {}
  41. ///@}
  42. /** \name OnStayStart
  43. Called at the beginning of an update loop
  44. */
  45. ///@{
  46. protected void StayStart(int nrOfInsiders)
  47. {
  48. #ifdef TRIGGER_DEBUG_SPAM
  49. Debug.TriggerLog(nrOfInsiders.ToString(), "TriggerEvents", "", "StayStart", GetDebugName(this));
  50. #endif
  51. OnStayStartBeginEvent(nrOfInsiders);
  52. if ( GetGame().IsServer() )
  53. OnStayStartServerEvent(nrOfInsiders);
  54. else
  55. OnStayStartClientEvent(nrOfInsiders);
  56. OnStayStartEndEvent(nrOfInsiders);
  57. }
  58. protected void OnStayStartBeginEvent(int nrOfInsiders) {}
  59. protected void OnStayStartServerEvent(int nrOfInsiders) {}
  60. protected void OnStayStartClientEvent(int nrOfInsiders) {}
  61. protected void OnStayStartEndEvent(int nrOfInsiders) {}
  62. ///@}
  63. /** \name OnStay
  64. Called in the update loop
  65. */
  66. ///@{
  67. protected void Stay(TriggerInsider insider, float deltaTime)
  68. {
  69. #ifdef TRIGGER_DEBUG_SPAM
  70. Debug.TriggerLog(GetDebugName(insider.GetObject()), "TriggerEvents", "", "Stay", GetDebugName(this));
  71. #endif
  72. OnStayBeginEvent(insider, deltaTime);
  73. if ( GetGame().IsServer() )
  74. OnStayServerEvent(insider, deltaTime);
  75. else
  76. OnStayClientEvent(insider, deltaTime);
  77. OnStayEndEvent(insider, deltaTime);
  78. }
  79. protected void OnStayBeginEvent(TriggerInsider insider, float deltaTime) {}
  80. protected void OnStayServerEvent(TriggerInsider insider, float deltaTime) {}
  81. protected void OnStayClientEvent(TriggerInsider insider, float deltaTime) {}
  82. protected void OnStayEndEvent(TriggerInsider insider, float deltaTime) {}
  83. ///@}
  84. /** \name OnStayFinish
  85. Called at the end of an update loop
  86. */
  87. ///@{
  88. protected void StayFinish()
  89. {
  90. #ifdef TRIGGER_DEBUG_SPAM
  91. Debug.TriggerLog("", "TriggerEvents", "", "StayFinish", GetDebugName(this));
  92. #endif
  93. OnStayFinishBeginEvent();
  94. if ( GetGame().IsServer() )
  95. OnStayFinishServerEvent();
  96. else
  97. OnStayFinishClientEvent();
  98. OnStayFinishEndEvent();
  99. }
  100. protected void OnStayFinishBeginEvent() {}
  101. protected void OnStayFinishServerEvent() {}
  102. protected void OnStayFinishClientEvent() {}
  103. protected void OnStayFinishEndEvent() {}
  104. ///@}
  105. /** \name OnLeave
  106. Called when an object leaves the trigger
  107. */
  108. ///@{
  109. protected void Leave(TriggerInsider insider)
  110. {
  111. #ifdef TRIGGER_DEBUG_BASIC
  112. Debug.TriggerLog(GetDebugName(insider.GetObject()), "TriggerEvents", "", "Leave", GetDebugName(this));
  113. #endif
  114. OnLeaveBeginEvent(insider);
  115. if (m_OnLeaveInvoker)
  116. m_OnLeaveInvoker.Invoke(insider);
  117. if ( GetGame() && GetGame().IsServer() )
  118. OnLeaveServerEvent(insider);
  119. else
  120. OnLeaveClientEvent(insider);
  121. OnLeaveEndEvent(insider);
  122. }
  123. protected void OnLeaveBeginEvent(TriggerInsider insider) {}
  124. protected void OnLeaveServerEvent(TriggerInsider insider) {}
  125. protected void OnLeaveClientEvent(TriggerInsider insider) {}
  126. protected void OnLeaveEndEvent(TriggerInsider insider) {}
  127. ///@}
  128. }