BloodRegen.c
class BloodRegenMdfr: ModifierBase
{
override void Init()
{
m_TrackActivatedTime = false;
m_ID = eModifiers.MDF_BLOOD_REGEN;
m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
}
override bool ActivateCondition(PlayerBase player)
{
float m_MaxBlood = player.GetMaxHealth("GlobalHealth", "Blood");
if ( player.GetHealth("GlobalHealth", "Blood") <= m_MaxBlood )
{
return true;
}
else
{
return false;
}
}
override void OnActivate(PlayerBase player)
{
}
override bool DeactivateCondition(PlayerBase player)
{
float m_MaxBlood = player.GetMaxHealth("GlobalHealth", "Blood");
if ( player.GetHealth("GlobalHealth", "Blood") >= m_MaxBlood )
{
return true;
}
else
{
return false;
}
}
override void OnTick(PlayerBase player, float deltaT)
{
float regen_modifier_water = GetRegenModifierWater( player.GetStatWater().Get() );
float regen_modifier_energy = GetRegenModifierEnergy( player.GetStatEnergy().Get() );
float blood_regen_speed = PlayerConstants.BLOOD_REGEN_RATE_PER_SEC * regen_modifier_water * regen_modifier_energy;
/*
PrintString("regen_modifier_water" + regen_modifier_water);
PrintString("regen_modifier_energy" + regen_modifier_energy);
PrintString("blood_regen_speed" + blood_regen_speed);
*/
if ( player.IsUnconscious() && player.GetHealth("GlobalHealth", "Blood") <= PlayerConstants.SL_BLOOD_CRITICAL )
{
blood_regen_speed *= PlayerConstants.UNCONSCIOUS_BLOOD_REGEN_MLTP;
}
player.AddHealth("","Blood", blood_regen_speed * deltaT );
}
float GetRegenModifierWater(float water)
{
float modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_HIGH;
int water_level = m_Player.GetStatLevelWater();
/*
if( water < PlayerConstants.BLOOD_REGEN_THRESHOLD_WATER_MID ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_MID}
if( water < PlayerConstants.BLOOD_REGEN_THRESHOLD_WATER_LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_LOW}
*/
if( water_level == EStatLevels.MEDIUM ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_MID}
if( water_level >= EStatLevels.LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_LOW}
return modifier;
}
float GetRegenModifierEnergy(float energy)
{
float modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_HIGH;
int energy_level = m_Player.GetStatLevelEnergy();
//if( energy < PlayerConstants.BLOOD_REGEN_THRESHOLD_ENERGY_MID ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_MID}
//if( energy < PlayerConstants.BLOOD_REGEN_THRESHOLD_ENERGY_LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_LOW}
if( energy_level == EStatLevels.MEDIUM ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_MID}
if( energy_level >= EStatLevels.LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_LOW}
return modifier;
}
};