﻿/*     INFINITY CODE 2013-2019      */
/*   http://www.infinity-code.com   */

using HutongGames.PlayMaker;
using UnityEngine;

namespace InfinityCode.RealWorldTerrain.Playmaker
{
    [ActionCategory(CATEGORY)]
    [HutongGames.PlayMaker.Tooltip("Get coordinates by Unity World Position")]
    public class GetCoordinatesByWorldPosition : RealWorldTerrainFSMStateAction
    {
        [HutongGames.PlayMaker.Tooltip("Real World Terrain Container")]
        public RealWorldTerrainMonoBase terrainItem;

        [UnityEngine.Tooltip("Position in Unity world space")]
        public FsmVector3 position;

        [RequiredField]
        [UnityEngine.Tooltip("Coordinates")]
        [UIHint(UIHint.Variable)]
        public FsmVector2 storeCoordinates;

        [UnityEngine.Tooltip("Altitude")]
        [UIHint(UIHint.Variable)]
        public FsmFloat storeAltitude;

        public override void Reset()
        {
            storeCoordinates = null;
            storeAltitude = null;
            position = new FsmVector3 { UseVariable = true };
        }

        public override void OnEnter()
        {
            DoEnter();
            Finish();
        }

        private void DoEnter()
        {
            if (terrainItem == null) terrainItem = container;
            double lng, lat, alt;
            terrainItem.GetCoordinatesByWorldPosition(position.Value, out lng, out lat, out alt);
            storeCoordinates.Value = new Vector2((float)lng, (float)lat);
            if (!storeAltitude.IsNone) storeAltitude.Value = (float)alt;
        }
    }
}