DIFF

irritatedeyes.c

class IrritatedEyesMdfr : ModifierBase
{
	private int m_EyesIrritationAgentsMax;
	private int m_AgentsCountPrevious;

	private ref SymptomBase m_IrritatedEyesSymptom;

	override void Init()
	{
		m_TrackActivatedTime	= false;
		m_ID 					= eModifiers.MDF_PARTICLES_EYES;
		m_TickIntervalInactive 	= DEFAULT_TICK_TIME_INACTIVE_LONG;
		m_TickIntervalActive 	= 5;
		m_SyncID				= eModifierSyncIDs.MODIFIER_SYNC_PARTICLE_EYES;
		
		m_EyesIrritationAgentsMax 	= PluginTransmissionAgents.GetAgentMaxCount(eAgents.EYES_IRRITATION);
	}
	
	override protected bool ActivateCondition(PlayerBase player)
	{
		return (player.GetSingleAgentCount(eAgents.EYES_IRRITATION) > 0);
	}

	override bool DeactivateCondition(PlayerBase player)
	{
		return (player.GetSingleAgentCount(eAgents.EYES_IRRITATION) == 0);
	}

	override void OnActivate(PlayerBase player)
	{
		Param2<int, ref SymptomSyncData> params = new Param2<int, ref SymptomSyncData>(0, null);
		
		m_IrritatedEyesSymptom = player.GetSymptomManager().QueueUpSecondarySymptomEx(SymptomIDs.SYMPTOM_IRRITATED_EYES);
		if (m_IrritatedEyesSymptom)
		{
			SymptomSyncData irritatedEyesData = new SymptomSyncData();
			params.param1 = SymptomIDs.SYMPTOM_IRRITATED_EYES;
			irritatedEyesData.m_FloatArray.Insert(0.0);

			params.param2 = irritatedEyesData;

			m_IrritatedEyesSymptom.SetParam(params);		
		}
	}

	override void OnDeactivate(PlayerBase player)
	{
		if (m_IrritatedEyesSymptom)
		{
			Param2<int, ref SymptomSyncData> params = new Param2<int, ref SymptomSyncData>(0, null);
			SymptomSyncData irritatedEyesData = new SymptomSyncData();
			params.param1 = SymptomIDs.SYMPTOM_IRRITATED_EYES;
			irritatedEyesData.m_FloatArray.Insert(0.0);

			params.param2 = irritatedEyesData;

			m_IrritatedEyesSymptom.SetParam(params);		
		}

		player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_IRRITATED_EYES);
	}

	override void OnTick(PlayerBase player, float deltaT)
	{
		#ifdef DEVELOPER
		if(!player.GetCanBeDestroyed())
			return;
		#endif
		
		float agentsCount = player.GetSingleAgentCount(eAgents.EYES_IRRITATION);

		Param2<int, ref SymptomSyncData> params = new Param2<int, ref SymptomSyncData>(0, null);
		if (m_IrritatedEyesSymptom)
		{
			SymptomSyncData irritatedEyesData = new SymptomSyncData();
			params.param1 = SymptomIDs.SYMPTOM_IRRITATED_EYES;
		
			// TODO@RR move count limit to class wide const
			float AGENTS_LIMIT = 15.0;
			if (agentsCount >= AGENTS_LIMIT && agentsCount != m_AgentsCountPrevious)
			{
				float threshold = Math.Remap(AGENTS_LIMIT, m_EyesIrritationAgentsMax, 0.0, 1.0, m_AgentsCountPrevious);
				
				m_AgentsCountPrevious = agentsCount;
				irritatedEyesData.m_FloatArray.Insert(threshold);
				params.param2 = irritatedEyesData;
				m_IrritatedEyesSymptom.SetParam(params);
			}
			else if (agentsCount < AGENTS_LIMIT)
			{
				irritatedEyesData.m_FloatArray.Insert(0.0);
				params.param2 = irritatedEyesData;
				m_IrritatedEyesSymptom.SetParam(params);
			}
		}
	}
}