namespace BP
{
	class HostileInfo
	{
		SActor sActor;
		float hostility;
		//------------------------------------------------------------------------------------------------------------------------
		HostileInfo()
		{
			hostility = 0.0f;
		}
		//------------------------------------------------------------------------------------------------------------------------
		HostileInfo(SActor @sActor, float hostility)
		{
			this.sActor = sActor;
			this.hostility = hostility;
		}
		//------------------------------------------------------------------------------------------------------------------------
		bool opEquals(const HostileInfo &in other)
		{
			return sActor == other.sActor;
		}
		//------------------------------------------------------------------------------------------------------------------------
		HostileInfo@ opAssign(const HostileInfo &in other)
		{
			sActor = other.sActor;
			hostility = other.hostility;
			
			return this;
		}
		//------------------------------------------------------------------------------------------------------------------------
		#ifdef BP_DEBUG
		kStr ToString()
		{
			return "sActor: " + sActor.ToString() + " hostility: " + hostility;
		}
		#endif
		//------------------------------------------------------------------------------------------------------------------------
		void Serialize(kDict dict, kStr& in key)
		{
			SERIALIZEKEY_FLOAT(key, hostility);
			SERIALIZEKEY_SACTOR(key, sActor);
		}
		//------------------------------------------------------------------------------------------------------------------------
		void Deserialize(kDict& in dict, kStr& in key)
		{
			DESERIALIZEKEY_FLOAT(key, hostility);
			DESERIALIZEKEY_SACTOR(key, sActor);
		}
		//------------------------------------------------------------------------------------------------------------------------
		bool Exists()
		{
			return sActor.Exists();
		}
		//------------------------------------------------------------------------------------------------------------------------
		void GainHostility(float amount)
		{
			hostility = Math::Clampf(hostility + amount, 0.0f, 100.0f);
		}
		//------------------------------------------------------------------------------------------------------------------------
		void LoseHostility(float amount)
		{
			hostility = Math::Clampf(hostility - amount, 0.0f, 100.0f);
		}
		//------------------------------------------------------------------------------------------------------------------------
	};
}
