namespace BP
{
	namespace Trigger
	{
		BP::ScriptActor@ scriptResult;
		
		array<kActor@> argActors;
		array<int> argInts;
		array<float> argFloats;
		array<bool> argBools;
		array<kVec3> argVectors;
		array<kStr> argStrings;
		//------------------------------------------------------------------------------------------------------------------------
		//void WorldCharSetup(kActor@ charActor, kActor@ target, const kStr&in text, const kVec3& in origin, const kVec3& in originOffset, const float offset)
		void WorldCharSetup(kActor@ charActor, kActor@ target, const int charValue, const kVec3& in origin, const kVec3& in originOffset, const float offset)
		{
			//argStrings = array<kStr> = { text };
			argInts = array<int> = { charValue };
			argFloats = array<float> = { offset };
			argVectors = array<kVec3> = { origin, originOffset };
			argActors = array<kActor@> = { @target };
			Trigger(@charActor, TRIGGER_MSG_SPAWN);
		}
		//------------------------------------------------------------------------------------------------------------------------
		BP::ScriptActor@ GetScript(kActor@ actor)
		{
			@scriptResult = null;
			Trigger(@actor, TRIGGER_MSG_GET_SCRIPT);
			return @scriptResult;
		}
		//------------------------------------------------------------------------------------------------------------------------
		BP::AI@ AIGetScript(kActor@ actor)
		{
			return cast<BP::AI>(GetScript(@actor));
			// @BP::triggerAIResult = null;
			// Trigger(@actor, TRIGGER_MSG_AI_GET_SCRIPT);
			// return @BP::triggerAIResult;
		}
		//------------------------------------------------------------------------------------------------------------------------
		void AISetAttackPoint(kActor@ actor, const kVec3& in point)
		{
			argVectors = array<kVec3> = { point };
			Trigger(@actor, TRIGGER_MSG_AI_ATTACK_POINT);
		}
		//------------------------------------------------------------------------------------------------------------------------
		void AISetMovePoint(kActor@ actor, const kVec3& in point)
		{
			argVectors = array<kVec3> = { point };
			Trigger(@actor, TRIGGER_MSG_AI_MOVE_POINT);
		}
		//------------------------------------------------------------------------------------------------------------------------
		// Returns the actors InstanceID or 0 if doesn't have one
		//------------------------------------------------------------------------------------------------------------------------
		int InstanceID(kActor@ actor)
		{
			instanceIDResult = 0;
			Trigger(@actor, TRIGGER_MSG_INSTANCE_ID);
			return instanceIDResult;
		}
		//------------------------------------------------------------------------------------------------------------------------
		void OnPost()
		{
			argActors.resize(0);
			argInts.resize(0);
			argFloats.resize(0);
			argBools.resize(0);
			argVectors.resize(0);
			argStrings.resize(0);
		}
		//------------------------------------------------------------------------------------------------------------------------
		void Trigger(kActor @actor, int msg)
		{
			if (@actor != null)
			{
				actor.TriggerMessageID() = msg;
				actor.Trigger(null);
			}
			else
			{
				DebugError("[BP::Trigger::Trigger] actor is null");
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
	}
}
