DIFF

BrokenLegs.c

class BrokenLegsMdfr: ModifierBase
{
	private const 	float	HEALTHY_LEG = 100; //Health at which legs are no longer considered broken
	private 		int 	currentState = -1; //Current broken leg state used upon reconnect
	private const 	float	TIME_TO_UPDATE = 0.5;
	private			float	elapsedTime = TIME_TO_UPDATE + 1;
	
	#ifdef DEVELOPER
	ref static Timer timer;
	#endif

	override void Init()
	{
		m_TrackActivatedTime 	= false;
		m_AnalyticsStatsEnabled = true;
		m_ID 					= eModifiers.MDF_BROKEN_LEGS;
		m_TickIntervalInactive 	= DEFAULT_TICK_TIME_INACTIVE;
		m_TickIntervalActive 	= 0.5;
		m_ActivationType 		= EActivationType.TRIGGER_EVENT_ON_ACTIVATION;
		m_IsPersistent			= true;
	}
	
	override void OnActivate(PlayerBase player)
	{
		//Print("------------> OnActivate - BrokenLegsMdfr");
		player.SetBrokenLegs(-eBrokenLegs.BROKEN_LEGS);//note the negative sign
		player.GetNotifiersManager().ActivateByType(eNotifiers.NTF_FRACTURE);
	}
	
	override void OnReconnect(PlayerBase player)
	{
		//Print("------------> OnReconnect - BrokenLegsMdfr");
		player.SetBrokenLegs(player.GetBrokenLegs());
		player.GetNotifiersManager().ActivateByType(eNotifiers.NTF_FRACTURE);
	}
	
	
	override void OnDeactivate(PlayerBase player)
	{
		player.UpdateBrokenLegs(eBrokenLegs.NO_BROKEN_LEGS);
		if ( player.IsWearingSplint() )
		{
			MiscGameplayFunctions.RemoveSplint(player); //Remove splint when leg is healed
		}
		
		player.SetBrokenLegs(eBrokenLegs.NO_BROKEN_LEGS);
		player.GetNotifiersManager().DeactivateByType(eNotifiers.NTF_FRACTURE);
	}

	override bool DeactivateCondition(PlayerBase player)
	{
		if ( player.GetHealth("RightLeg", "Health") >= HEALTHY_LEG && player.GetHealth("LeftLeg", "Health") >= HEALTHY_LEG )
		{
			
			return true;
		}
		else
		{
			return false;
		}
	}

	override void OnTick(PlayerBase player, float deltaT)
	{
		player.UpdateBrokenLegs(/*legacy param - value not used*/0);
	}
	

	#ifdef DEVELOPER
	static void DelayedRequest(PlayerBase player, bool state)
	{
		timer = new Timer( CALL_CATEGORY_SYSTEM );
		if(state)
			timer.Run( 10 , player.GetModifiersManager().GetModifier(eModifiers.MDF_BROKEN_LEGS), "Delayed", new Param1<bool>(state));
		else
			BrokenLegsMdfr.Cast(player.GetModifiersManager().GetModifier(eModifiers.MDF_BROKEN_LEGS)).Delayed(false);
	}
	
	void Delayed(bool state)
	{
		m_Player.GetModifiersManager().ActivateModifier(eModifiers.MDF_BROKEN_LEGS);
	}
	#endif
};