defibrillator.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. class Defibrillator extends ItemBase
  2. {
  3. static const string CHARGING_SOUND = "defibrillator_charge_SoundSet";
  4. static const string CHARGED_AND_READY_SOUND = "defibrillator_ready_SoundSet";
  5. static const string SHOCK_SOUND = "defibrillator_shock_SoundSet";
  6. bool m_IsCharged = false;
  7. static float m_ChargeTime = 5;
  8. static float m_EnergyNeededToCharge = 20;
  9. ref Timer m_ChargingTimer;
  10. EffectSound m_ChargedAlarm;
  11. EffectSound m_ChargingSound;
  12. void Defibrillator()
  13. {
  14. // Read all config parameters
  15. //m_ChargeTime = GetTimeNeededToCharge();
  16. m_EnergyNeededToCharge = GetEnergyNeededToCharge();
  17. }
  18. void ~Defibrillator()
  19. {
  20. SEffectManager.DestroyEffect(m_ChargedAlarm);
  21. SEffectManager.DestroyEffect(m_ChargingSound);
  22. }
  23. float GetTimeNeededToCharge()
  24. {
  25. string cfg_path = "CfgVehicles " + GetType() + " ";
  26. return GetGame().ConfigGetFloat (cfg_path + "defibChargeTime");
  27. }
  28. float GetEnergyNeededToCharge()
  29. {
  30. string cfg_path = "CfgVehicles " + GetType() + " ";
  31. return GetGame().ConfigGetFloat (cfg_path + "defibEnergyNeededPerCharge");
  32. }
  33. override void OnWorkStart()
  34. {
  35. if ( !GetGame().IsDedicatedServer() )
  36. m_ChargingSound = SEffectManager.PlaySoundOnObject(CHARGING_SOUND, this, 0, 0.15);
  37. float energy_needed = m_EnergyNeededToCharge / m_ChargeTime;
  38. GetCompEM().SetEnergyUsage(energy_needed);
  39. if (!m_ChargingTimer)
  40. m_ChargingTimer = new Timer( CALL_CATEGORY_GAMEPLAY );
  41. if ( !m_ChargingTimer.IsRunning() )
  42. {
  43. m_ChargingTimer.Run(m_ChargeTime, this, "OnIsCharged", NULL, false);
  44. }
  45. }
  46. override void OnWorkStop()
  47. {
  48. GetCompEM().SwitchOff();
  49. GetCompEM().ResetEnergyUsage();
  50. StopChargingTimer();
  51. StopChargedAlarm();
  52. StopChargingSound();
  53. m_IsCharged = false;
  54. }
  55. void OnIsCharged()
  56. {
  57. if ( GetCompEM().IsWorking() )
  58. {
  59. if (!GetGame().IsMultiplayer() || GetGame().IsClient())
  60. {
  61. //m_ChargedAlarm = PlaySoundLoop(CHARGED_AND_READY_SOUND, 40);
  62. m_ChargedAlarm = SEffectManager.PlaySoundOnObject(CHARGED_AND_READY_SOUND, this);
  63. m_ChargingSound.SoundStop();
  64. }
  65. GetCompEM().ResetEnergyUsage();
  66. m_IsCharged = true;
  67. }
  68. }
  69. void StopChargedAlarm()
  70. {
  71. if (m_ChargedAlarm)
  72. {
  73. //GetGame().ObjectDelete(m_ChargedAlarm);
  74. m_ChargedAlarm.SoundStop();
  75. m_ChargedAlarm = NULL;
  76. }
  77. }
  78. void StopChargingSound()
  79. {
  80. if(m_ChargingSound)
  81. {
  82. m_ChargingSound.SoundStop();
  83. }
  84. }
  85. void StopChargingTimer()
  86. {
  87. if (m_ChargingTimer)
  88. {
  89. m_ChargingTimer.Stop();
  90. m_ChargingTimer = NULL;
  91. }
  92. }
  93. bool IsCharged()
  94. {
  95. return m_IsCharged;
  96. }
  97. void DischargeServer(PlayerBase victim)
  98. {
  99. /*
  100. bool has_heart_attack = victim.m_ModifiersManager.IsModifierActive(eModifiers.MDF_HEART_ATTACK);
  101. if ( has_heart_attack )
  102. {
  103. victim.m_ModifiersManager.DeactivateModifier ( eModifiers.MDF_HEART_ATTACK );
  104. }
  105. else
  106. {
  107. victim.m_ModifiersManager.ActivateModifier ( eModifiers.MDF_HEART_ATTACK );
  108. }
  109. */
  110. /*
  111. if (!GetGame().IsMultiplayer() || GetGame().IsClient())
  112. {
  113. SEffectManager.PlaySoundOnObject(SHOCK_SOUND, this);
  114. }*/
  115. victim.SetPulseType(!victim.GetPulseType());
  116. victim.SetHealth("","Shock",0);
  117. GetCompEM().SwitchOff();
  118. }
  119. void DischargeClient(PlayerBase victim)
  120. {
  121. SEffectManager.PlaySoundOnObject(SHOCK_SOUND, this);
  122. }
  123. override void SetActions()
  124. {
  125. super.SetActions();
  126. AddAction(ActionTurnOnWhileInHands);
  127. AddAction(ActionTurnOffWhileInHands);
  128. AddAction(ActionDefibrilateTarget);
  129. AddAction(ActionDefibrilateSelf);
  130. }
  131. }