Misc_TirePile_Burning.c
class Misc_TirePile_Burning_DE : BuildingSuper
{
private const float TIMER_HEATING_UPDATE_INTERVAL = 2;
private const float PARAM_HEAT_RADIUS = 6;
private const float PARAM_FULL_HEAT_RADIUS = 4;
private const float PARAM_MAX_TRANSFERED_TEMPERATURE = 25; //! maximum value for temperature that will be transfered to player (environment)
protected TirePileLight m_Light;
protected Particle m_ParticleFire;
protected EffectSound m_SoundFireLoop;
// UniversalTemperatureSource
protected ref UniversalTemperatureSource m_UTSource;
protected ref UniversalTemperatureSourceSettings m_UTSSettings;
protected ref UniversalTemperatureSourceLambdaConstant m_UTSLTirePile;
protected ref AreaDamageManager m_AreaDamage;
override void EEInit()
{
super.EEInit();
#ifndef SERVER
// object creation - create effects (light, particles, sound)
if (!m_Light)
{
m_Light = TirePileLight.Cast(ScriptedLightBase.CreateLight(TirePileLight, Vector(0,0,0), 1));
m_Light.AttachOnMemoryPoint(this, m_Light.m_MemoryPoint);
m_Light.FadeBrightnessTo(m_Light.m_FireBrightness, 0);
m_Light.FadeRadiusTo(m_Light.m_FireRadius, 0);
}
if (!m_ParticleFire)
m_ParticleFire = ParticleManager.GetInstance().PlayOnObject(ParticleList.TIREPILE_FIRE, this, GetMemoryPointPos("tirepile_fire"), Vector(0,0,0), true);
if (!m_SoundFireLoop)
PlaySoundSetLoop(m_SoundFireLoop, "HeavyFire_SoundSet", 1.0, 2.0);
#endif
if (g_Game.IsServer() || !g_Game.IsMultiplayer())
{
m_UTSSettings = new UniversalTemperatureSourceSettings();
m_UTSSettings.m_UpdateInterval = TIMER_HEATING_UPDATE_INTERVAL;
m_UTSSettings.m_Updateable = true;
m_UTSSettings.m_TemperatureItemCap = GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE;
m_UTSSettings.m_TemperatureCap = PARAM_MAX_TRANSFERED_TEMPERATURE;
m_UTSSettings.m_RangeFull = PARAM_FULL_HEAT_RADIUS;
m_UTSSettings.m_RangeMax = PARAM_HEAT_RADIUS;
m_UTSLTirePile = new UniversalTemperatureSourceLambdaConstant();
m_UTSource = new UniversalTemperatureSource(this, m_UTSSettings, m_UTSLTirePile);
m_UTSource.SetActive(true);
}
}
override void EEDelete(EntityAI parent)
{
super.EEDelete(parent);
#ifndef SERVER
// outside of bubble - do effects cleanup (light, particles, sound)
if (m_Light)
m_Light.FadeOut();
if (m_ParticleFire)
m_ParticleFire.Stop();
if (m_SoundFireLoop)
m_SoundFireLoop.SoundStop();
#endif
if (g_Game.IsServer() || !g_Game.IsMultiplayer())
{
m_UTSource.SetActive(false);
DestroyAreaDamage();
}
}
override void DeferredInit()
{
if (g_Game.IsServer() || !g_Game.IsMultiplayer())
{
if (!m_AreaDamage)
CreateAreaDamage();
}
}
protected void CreateAreaDamage()
{
//destroy area damage if some already exists
DestroyAreaDamage();
//create new area damage
m_AreaDamage = new AreaDamageLoopedDeferred(this);
m_AreaDamage.SetDamageComponentType(AreaDamageComponentTypes.HITZONE);
m_AreaDamage.SetExtents("-2.0 0 -2.0", "2.0 2.0 2.0");
m_AreaDamage.SetLoopInterval(0.5);
m_AreaDamage.SetDeferDuration(0.5);
m_AreaDamage.SetHitZones({ "Head","Torso","LeftHand","LeftLeg","LeftFoot","RightHand","RightLeg","RightFoot" });
m_AreaDamage.SetAmmoName("FireDamage");
m_AreaDamage.Spawn();
}
protected void DestroyAreaDamage()
{
if (m_AreaDamage)
m_AreaDamage.Destroy();
}
}