staminasoundhandler.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. const float TICK_INTERVAL = 1;
  2. const float STAMINA_SOUND_TR1 = 0.55;
  3. const float STAMINA_SOUND_TR2 = 0.25;
  4. enum eStaminaZones
  5. {
  6. ZONE0,
  7. ZONE1,
  8. ZONE2,
  9. }
  10. enum eStaminaTendency
  11. {
  12. UP,
  13. DOWN,
  14. }
  15. enum eStaminaState
  16. {
  17. ZONE0_UP = 1,
  18. ZONE0_DOWN,
  19. ZONE1_UP,
  20. ZONE1_DOWN,
  21. ZONE2_UP,
  22. ZONE2_DOWN,
  23. //count bellow, add above
  24. COUNT
  25. }
  26. class SoundHandlerBase
  27. {
  28. eSoundHandlers m_Id;
  29. PlayerBase m_Player;
  30. void Update();
  31. eSoundHandlers GetID()
  32. {
  33. return m_Id;
  34. }
  35. void SoundHandlerBase(PlayerBase player)
  36. {
  37. m_Player = player;
  38. Init();
  39. }
  40. void Init();
  41. }
  42. class StaminaSoundHandlerBase extends SoundHandlerBase
  43. {
  44. override void Init()
  45. {
  46. m_Id = eSoundHandlers.STAMINA;
  47. }
  48. eStaminaState GetStaminaState(eStaminaTendency tendency, eStaminaZones zone)
  49. {
  50. eStaminaState stamina_state;
  51. zone = Math.Clamp(zone, eStaminaZones.ZONE0, eStaminaZones.ZONE2);
  52. if(zone == eStaminaZones.ZONE1 && tendency == eStaminaTendency.DOWN)
  53. {
  54. stamina_state = eStaminaState.ZONE1_DOWN;
  55. }
  56. if(zone == eStaminaZones.ZONE1 && tendency == eStaminaTendency.UP)
  57. {
  58. stamina_state = eStaminaState.ZONE1_UP;
  59. }
  60. if(zone == eStaminaZones.ZONE2 && tendency == eStaminaTendency.DOWN)
  61. {
  62. stamina_state = eStaminaState.ZONE2_DOWN;
  63. }
  64. if(zone == eStaminaZones.ZONE2 && tendency == eStaminaTendency.UP)
  65. {
  66. stamina_state = eStaminaState.ZONE2_UP;
  67. }
  68. if(zone == eStaminaZones.ZONE0 && tendency == eStaminaTendency.UP)
  69. {
  70. stamina_state = eStaminaState.ZONE0_UP;
  71. }
  72. if(zone == eStaminaZones.ZONE0 && tendency == eStaminaTendency.DOWN)
  73. {
  74. stamina_state = eStaminaState.ZONE0_DOWN;
  75. }
  76. return stamina_state;
  77. }
  78. }
  79. //---------------------------
  80. // Server
  81. //---------------------------
  82. class StaminaSoundHandlerServer extends StaminaSoundHandlerBase
  83. {
  84. float m_Stamina;
  85. StaminaHandler m_StaminaHandler;
  86. float m_StaminaLastValue;
  87. int m_StaminaZoneOffset;
  88. void SetStaminaZoneOffset(int zone_offset)
  89. {
  90. m_StaminaZoneOffset = zone_offset;
  91. }
  92. // ! Called from command handler
  93. override void Update()
  94. {
  95. m_Stamina = m_Player.GetStaminaHandler().GetStamina();
  96. float stamina_delta = m_StaminaLastValue - m_Stamina;
  97. eStaminaTendency stamina_tendency;
  98. eStaminaZones stamina_zone;
  99. //if( stamina_delta == 0 ) return;
  100. if( stamina_delta > 0 )
  101. {
  102. stamina_tendency = eStaminaTendency.DOWN;
  103. }
  104. if( stamina_delta <= 0 )
  105. {
  106. stamina_tendency = eStaminaTendency.UP;
  107. }
  108. m_StaminaLastValue = m_Stamina;
  109. stamina_zone = GetZone(m_Stamina);
  110. m_Player.SetStaminaState( GetStaminaState(stamina_tendency, stamina_zone + m_StaminaZoneOffset) );
  111. //EPlayerSoundEventID sound_event_id = GetPlayerSoundEventID();
  112. /*
  113. //PrintString("stamina delta " +stamina_delta.ToString());
  114. //PrintString("stamina zone " +m_StaminaZone.ToString());
  115. //PrintString("stamina tendency " +m_StaminaTendency.ToString());
  116. */
  117. //PrintString(" sound event id " +sound_event_id.ToString());
  118. //if( sound_event_id !=0 ) m_Player.SendSoundEvent(sound_event_id);
  119. }
  120. eStaminaZones GetZone(float stamina)
  121. {
  122. float stamina_normalized = Math.InverseLerp(0, m_Player.GetStaminaHandler().GetStaminaCap(), stamina);
  123. stamina_normalized = Math.Clamp(stamina_normalized,0,1);
  124. //PrintString(" stamina_normalized " +stamina_normalized.ToString());
  125. eStaminaZones stamina_zone = eStaminaZones.ZONE0;
  126. if( stamina_normalized < STAMINA_SOUND_TR1)
  127. {
  128. stamina_zone = eStaminaZones.ZONE1;
  129. }
  130. if( stamina_normalized < STAMINA_SOUND_TR2)
  131. {
  132. stamina_zone = eStaminaZones.ZONE2;
  133. }
  134. return stamina_zone;
  135. }
  136. }
  137. //---------------------------
  138. // Client
  139. //---------------------------
  140. class StaminaSoundHandlerClient extends StaminaSoundHandlerBase
  141. {
  142. float m_PostponeTime = -1;
  143. float m_LastTick;
  144. bool m_UpdateTimerRunning;
  145. bool m_StaminaUpEndPlayed = true;
  146. ref Timer m_ClientCharacterTick = new Timer;
  147. ref Timer m_ClientCharacterDistanceCheck = new Timer;
  148. void PostponeStamina(float time)
  149. {
  150. m_PostponeTime = GetGame().GetTime() + time;
  151. }
  152. override void Update()
  153. {
  154. if( GetGame().GetTime() < m_PostponeTime || m_Player.GetPlayerSoundEventHandler().m_CurrentState )
  155. {
  156. return;
  157. }
  158. //Print(Math.RandomFloat01());
  159. eStaminaState stamina_state = m_Player.GetStaminaState();
  160. switch(stamina_state)
  161. {
  162. case eStaminaState.ZONE1_DOWN:
  163. if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_DOWN_LIGHT))
  164. {
  165. m_StaminaUpEndPlayed = false;
  166. }
  167. break;
  168. case eStaminaState.ZONE1_UP:
  169. if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_LIGHT))
  170. {
  171. m_StaminaUpEndPlayed = false;
  172. }
  173. break;
  174. case eStaminaState.ZONE2_DOWN:
  175. if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_DOWN_HEAVY))
  176. {
  177. m_StaminaUpEndPlayed = false;
  178. }
  179. break;
  180. case eStaminaState.ZONE2_UP:
  181. if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_HEAVY))
  182. {
  183. m_StaminaUpEndPlayed = false;
  184. }
  185. break;
  186. case eStaminaState.ZONE0_UP:
  187. if(!m_StaminaUpEndPlayed && m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_END))
  188. {
  189. m_StaminaUpEndPlayed = true;
  190. }
  191. else
  192. {
  193. m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_NORMAL_DUMMY);
  194. }
  195. break;
  196. case eStaminaState.ZONE0_DOWN:
  197. m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_NORMAL_DUMMY);
  198. break;
  199. }
  200. }
  201. }