using NodeCanvas.Framework;
using ParadoxNotion.Design;
using RaycastPro.RaySensors;
using RaycastPro.RaySensors2D;
using UnityEngine;


namespace NodeCanvas.Tasks.Actions{

	[Category("RaycastPro")]
	[Description("Its simple Task for check a 3D ray-sensor Cast")]
	public class Cast2D : ActionTask<RaySensor2D>{
		
		[BlackboardOnly]
		public BBParameter<GameObject> saveHitGameObjectAs;
		[BlackboardOnly]
		public BBParameter<float> saveLengthAs;
		[BlackboardOnly]
		public BBParameter<Vector3> savePointAs;
		[BlackboardOnly]
		public BBParameter<Vector3> saveNormalAs;
		[BlackboardOnly]
		[Tooltip("Save direction of ray extention.")]
		public BBParameter<Vector3> saveHitDirection;

		private RaycastHit2D hit = new RaycastHit2D();

		protected override void OnExecute()
		{
			if (!agent.enabled) agent.Cast();

			hit = agent.Hit;
			if (saveHitGameObjectAs.isDefined)
			{
				saveHitGameObjectAs.value = hit.collider.gameObject;
			}
			if (saveLengthAs.isDefined)
			{
				saveLengthAs.value = agent.HitLength;
			}
			if (saveHitDirection.isDefined)
			{
				saveNormalAs.value = agent.HitDirection;
			}
			if (savePointAs.isDefined)
			{
				savePointAs.value = hit.point;
			}
			if (saveNormalAs.isDefined)
			{
				saveNormalAs.value = hit.normal;
			}
			EndAction(agent.Performed);
		}
	}
}