123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- class InfluenzaAgent : AgentBase
- {
- const float INFLUENZA_AGENT_AUTOINFECT_THRESHOLD_HC = PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING;
-
- protected const float INVASIBILITY_INC_LOW_HC = 0.40;
- protected const float INVASIBILITY_INC_MEDIUM_HC = 0.60;
- protected const float INVASIBILITY_INC_CRITICAL_HC = 0.70;
-
- protected const float INVASIBILITY_DEC_COMMON_COLD = -0.3;
- protected const float INVASIBILITY_DEC_INFLUENZA = -0.3;
- protected const float INVASIBILITY_DEC_PNEUMONIA = 0.00;
- protected const int MAX_TIME_TO_CONTRACT = 8650; //! at this time [s], character will contract the disease
- protected const int CONTRACT_TIME_THRESHOLD_MIN = 10; //! min value of time [s] for subtraction from MAX_TIME_TO_CONTRACT (used for randomization)
- protected const int CONTRACT_TIME_THRESHOLD_MAX = 200; //! max value of time [s] for subtraction from MAX_TIME_TO_CONTRACT (used for randomization)
-
- protected int m_TimeToContract = MAX_TIME_TO_CONTRACT;
- protected const float CONTRACT_HEATCOMFORT_MODIFIER[3] = {
- 0.25, // low
- 0.6, // medium
- 1.0, // critical
- };
- protected int m_ElapsedTime;
- override void Init()
- {
- m_Type = eAgents.INFLUENZA;
- m_Invasibility = 0.33;
- m_TransferabilityIn = 1;
- m_TransferabilityOut = 1;
- m_MaxCount = 1200;
- m_Digestibility = 0.1;
- m_AntibioticsResistance = 0;
- m_AutoinfectCount = CommonColdMdfr.AGENT_THRESHOLD_ACTIVATE+10;
- m_TransferabilityAirOut = 1;
- m_Potency = EStatLevels.MEDIUM;
- m_DieOffSpeed = 0.30;
-
- m_ElapsedTime = 0.0;
- }
- override bool AutoinfectCheck(float deltaT, PlayerBase player)
- {
- if (!player.m_AgentPool.GetTemporaryResistance(eAgents.INFLUENZA))
- {
- float heatcomfort = player.GetStatHeatComfort().Get();
- if (heatcomfort < PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING)
- {
- float subtractTimeModifier;
- float subtractTimeRandomized = Math.RandomFloatInclusive(CONTRACT_TIME_THRESHOLD_MIN, CONTRACT_TIME_THRESHOLD_MAX);
-
- if (heatcomfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING && heatcomfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL)
- subtractTimeModifier = CONTRACT_HEATCOMFORT_MODIFIER[0];
- else if (heatcomfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL && heatcomfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY)
- subtractTimeModifier = CONTRACT_HEATCOMFORT_MODIFIER[1];
- else if (heatcomfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY)
- subtractTimeModifier = CONTRACT_HEATCOMFORT_MODIFIER[2];
-
- float subtractTimeModified = subtractTimeRandomized * subtractTimeModifier;
- m_TimeToContract -= subtractTimeModified;
- if (m_ElapsedTime >= m_TimeToContract)
- {
- m_ElapsedTime = 0;
- m_TimeToContract = MAX_TIME_TO_CONTRACT;
-
- return true;
- }
-
- m_ElapsedTime += deltaT;
- }
- else
- {
- m_ElapsedTime = Math.Clamp(m_ElapsedTime - deltaT, 0.0, float.MAX);
- m_TimeToContract = Math.Clamp(m_TimeToContract + deltaT*15, 0.0, MAX_TIME_TO_CONTRACT);
- }
- }
-
- return false;
- }
- override bool CanAutoinfectPlayer(PlayerBase player)
- {
- if (player.GetStatHeatComfort().Get() < INFLUENZA_AGENT_AUTOINFECT_THRESHOLD_HC)
- return true;
- return false;
- }
-
- override float GetInvasibilityEx(PlayerBase player)
- {
- float heatComfort = player.GetStatHeatComfort().Get();
- if (heatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING)
- {
- if (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_PNEUMONIA))
- return INVASIBILITY_DEC_PNEUMONIA;
- if (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_INFLUENZA))
- return INVASIBILITY_DEC_INFLUENZA;
-
- return INVASIBILITY_DEC_COMMON_COLD;
- }
-
- if (heatComfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING && heatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL)
- return INVASIBILITY_INC_LOW_HC;
- else if (heatComfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL && heatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY)
- return INVASIBILITY_INC_MEDIUM_HC;
- else if (heatComfort <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY)
- return INVASIBILITY_INC_CRITICAL_HC;
-
- return INVASIBILITY_INC_LOW_HC;
- }
-
- override EStatLevels GetPotencyEx(PlayerBase player)
- {
- if (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_PNEUMONIA))
- return EStatLevels.GREAT;
-
- return super.GetPotencyEx(player);
- }
-
- override float GetDieOffSpeedEx(PlayerBase player)
- {
- if (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_ANTIBIOTICS))
- return GetDieOffSpeed() * 3;
- else if (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_IMMUNITYBOOST))
- return GetDieOffSpeed() * 2;
- return super.GetDieOffSpeedEx(player);
- }
- }
|