using CommonAI.RTS; using CommonLang.Vector;
using CommonAI.Zone.Attributes;
using CommonAI.Zone.Instance;
using CommonAI.Zone.ZoneEditor;
using CommonAI.Zone.ZoneEditor.EventTrigger;
using CommonLang.Property;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonAI.Zone.EventTrigger;

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{

    //-------------------------------------------------------------------------------------------
    #region _获取_单位变量_


    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsString : StringValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override string GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<string>(Key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsInteger : IntegerValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Int32 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<Int32>(Key);
            }
            return 0;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsReal : RealValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Single GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<Single>(Key);
            }
            return 0;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsBoolean : BooleanValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<Boolean>(Key);
            }
            return false;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsUnit : UnitValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceUnit GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<InstanceUnit>(Key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsItem : ItemValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<InstanceItem>(Key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsFlag : FlagValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<InstanceFlag>(Key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量")]
    public class GetUnitAsPosition : PositionValue
    {
        [DescAttribute("变量名")]
        public string Key = "VarName";
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            if (unit != null)
            {
                return unit.GetEnvironmentVarAs<Vector2>(Key);
            }
            return null;
        }
    }

    #endregion
    //-------------------------------------------------------------------------------------------
    #region _获取_单位变量_StringValueKey_


    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsStringStringValueKey : StringValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override string GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<string>(key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsIntegerStringValueKey : IntegerValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Int32 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<Int32>(key);
            }
            return 0;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsRealStringValueKey : RealValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Single GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<Single>(key);
            }
            return 0;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsBooleanStringValueKey : BooleanValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<Boolean>(key);
            }
            return false;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsUnitStringValueKey : UnitValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceUnit GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<InstanceUnit>(key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsItemStringValueKey : ItemValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<InstanceItem>(key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsFlagStringValueKey : FlagValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<InstanceFlag>(key);
            }
            return null;
        }
    }

    [DescAttribute("单位变量", "单位 - 变量(变量索引)")]
    public class GetUnitAsPositionStringValueKey : PositionValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        [DescAttribute("单位")]
        public UnitValue Unit = new UnitValue.Trigging();
        public override string ToString()
        {
            return string.Format("获取单位({1})变量\"{0}\"", Key, Unit);
        }
        public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            InstanceUnit unit = Unit.GetValue(api, args);
            string key = Key.GetValue(api, args);
            if (unit != null && key != null)
            {
                return unit.GetEnvironmentVarAs<Vector2>(key);
            }
            return null;
        }
    }

    #endregion


}