misc_tirepile_burning.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. class Misc_TirePile_Burning_DE : BuildingSuper
  2. {
  3. private const float TIMER_HEATING_UPDATE_INTERVAL = 2;
  4. private const float PARAM_HEAT_RADIUS = 6;
  5. private const float PARAM_FULL_HEAT_RADIUS = 4;
  6. private const float PARAM_MAX_TRANSFERED_TEMPERATURE = 25; //! maximum value for temperature that will be transfered to player (environment)
  7. protected TirePileLight m_Light;
  8. protected Particle m_ParticleFire;
  9. protected EffectSound m_SoundFireLoop;
  10. // UniversalTemperatureSource
  11. protected ref UniversalTemperatureSource m_UTSource;
  12. protected ref UniversalTemperatureSourceSettings m_UTSSettings;
  13. protected ref UniversalTemperatureSourceLambdaConstant m_UTSLTirePile;
  14. protected ref AreaDamageManager m_AreaDamage;
  15. override void EEInit()
  16. {
  17. super.EEInit();
  18. #ifndef SERVER
  19. // object creation - create effects (light, particles, sound)
  20. if (!m_Light)
  21. {
  22. m_Light = TirePileLight.Cast(ScriptedLightBase.CreateLight(TirePileLight, Vector(0,0,0), 1));
  23. m_Light.AttachOnMemoryPoint(this, m_Light.m_MemoryPoint);
  24. m_Light.FadeBrightnessTo(m_Light.m_FireBrightness, 0);
  25. m_Light.FadeRadiusTo(m_Light.m_FireRadius, 0);
  26. }
  27. if (!m_ParticleFire)
  28. m_ParticleFire = ParticleManager.GetInstance().PlayOnObject(ParticleList.TIREPILE_FIRE, this, GetMemoryPointPos("tirepile_fire"), Vector(0,0,0), true);
  29. if (!m_SoundFireLoop)
  30. PlaySoundSetLoop(m_SoundFireLoop, "HeavyFire_SoundSet", 1.0, 2.0);
  31. #endif
  32. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  33. {
  34. m_UTSSettings = new UniversalTemperatureSourceSettings();
  35. m_UTSSettings.m_UpdateInterval = TIMER_HEATING_UPDATE_INTERVAL;
  36. m_UTSSettings.m_Updateable = true;
  37. m_UTSSettings.m_TemperatureItemCap = GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE;
  38. m_UTSSettings.m_TemperatureCap = PARAM_MAX_TRANSFERED_TEMPERATURE;
  39. m_UTSSettings.m_RangeFull = PARAM_FULL_HEAT_RADIUS;
  40. m_UTSSettings.m_RangeMax = PARAM_HEAT_RADIUS;
  41. m_UTSLTirePile = new UniversalTemperatureSourceLambdaConstant();
  42. m_UTSource = new UniversalTemperatureSource(this, m_UTSSettings, m_UTSLTirePile);
  43. m_UTSource.SetActive(true);
  44. }
  45. }
  46. override void EEDelete(EntityAI parent)
  47. {
  48. super.EEDelete(parent);
  49. #ifndef SERVER
  50. // outside of bubble - do effects cleanup (light, particles, sound)
  51. if (m_Light)
  52. m_Light.FadeOut();
  53. if (m_ParticleFire)
  54. m_ParticleFire.Stop();
  55. if (m_SoundFireLoop)
  56. m_SoundFireLoop.SoundStop();
  57. #endif
  58. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  59. {
  60. m_UTSource.SetActive(false);
  61. DestroyAreaDamage();
  62. }
  63. }
  64. override void DeferredInit()
  65. {
  66. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  67. {
  68. if (!m_AreaDamage)
  69. CreateAreaDamage();
  70. }
  71. }
  72. protected void CreateAreaDamage()
  73. {
  74. //destroy area damage if some already exists
  75. DestroyAreaDamage();
  76. //create new area damage
  77. m_AreaDamage = new AreaDamageLoopedDeferred(this);
  78. m_AreaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
  79. m_AreaDamage.SetExtents("-2.0 0 -2.0", "2.0 2.0 2.0");
  80. m_AreaDamage.SetLoopInterval(0.5);
  81. m_AreaDamage.SetDeferDuration(0.5);
  82. m_AreaDamage.SetHitZones({ "Head","Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" });
  83. m_AreaDamage.SetAmmoName("FireDamage");
  84. m_AreaDamage.Spawn();
  85. }
  86. protected void DestroyAreaDamage()
  87. {
  88. if (m_AreaDamage)
  89. m_AreaDamage.Destroy();
  90. }
  91. }