Hunger.c
class HungerMdfr: ModifierBase
{
protected float m_EnergyDelta;
protected float m_LastEnergyLevel;
ref HumanMovementState m_MovementState = new HumanMovementState();
override void Init()
{
m_TrackActivatedTime = false;
m_ID = eModifiers.MDF_HUNGER;
m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
m_TickIntervalActive = 1;
DisableDeactivateCheck();
}
override bool ActivateCondition(PlayerBase player)
{
return true;
}
override bool DeactivateCondition(PlayerBase player)
{
return false;
}
override void OnReconnect(PlayerBase player)
{
}
override void OnTick(PlayerBase player, float deltaT)
{
player.GetMovementState(m_MovementState);
float energy = player.GetStatEnergy().Get();
float metabolic_speed = MiscGameplayFunctions.GetEnergyMetabolicSpeed(m_MovementState.m_iMovement);
float modifier = energy/PlayerConstants.SL_ENERGY_MAX + PlayerConstants.CONSUMPTION_MULTIPLIER_BASE;
metabolic_speed *= modifier; //non linear shaping for consumption curve (comment out to have it linear)
player.GetStatEnergy().Add( -metabolic_speed * deltaT );
if ( energy <= PlayerConstants.LOW_ENERGY_THRESHOLD )
{
player.SetMixedSoundState( eMixedSoundStates.HUNGRY );
if ((player.GetStomach().GetDigestingType() & PlayerStomach.DIGESTING_ENERGY) == 0)
player.AddHealth("GlobalHealth", "Health", -PlayerConstants.LOW_ENERGY_DAMAGE_PER_SEC * deltaT );
}
else
{
player.UnsetMixedSoundState( eMixedSoundStates.HUNGRY );
}
}
};