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

namespace CommonAI.Zone.ZoneEditor.EventTrigger
{

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsString : StringValue
    {
        [SceneVarIDAttribute(typeof(StringValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override string GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<string>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsInteger : IntegerValue
    {
        [SceneVarIDAttribute(typeof(IntegerValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Int32 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Int32>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsReal : RealValue
    {
        [SceneVarIDAttribute(typeof(RealValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Single GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Single>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsBoolean : BooleanValue
    {
        [SceneVarIDAttribute(typeof(BooleanValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Boolean>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsUnit : UnitValue
    {
        [SceneVarIDAttribute(typeof(UnitValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceUnit GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceUnit>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsItem : ItemValue
    {
        [SceneVarIDAttribute(typeof(ItemValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceItem>(Key);
        }
    }
    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsFlag : FlagValue
    {
        [SceneVarIDAttribute(typeof(FlagValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceFlag>(Key);
        }
    }

    [DescAttribute("环境变量", "环境变量")]
    public class GetEnvironmentAsPosition : PositionValue
    {
        [SceneVarIDAttribute(typeof(PositionValue))]
        [DescAttribute("变量名")]
        public string Key = "VarName";
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Vector2>(Key);
        }
    }

    //---------------------------------------------------------------------------------------------------


    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsStringSV : StringValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override string GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<string>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsIntegerSV : IntegerValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Int32 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Int32>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsRealSV : RealValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Single GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Single>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsBooleanSV : BooleanValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Boolean>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsUnitSV : UnitValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceUnit GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceUnit>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsItemSV : ItemValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceItem GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceItem>(Key.GetValue(api, args));
        }
    }
    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsFlagSV : FlagValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override InstanceFlag GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<InstanceFlag>(Key.GetValue(api, args));
        }
    }

    [DescAttribute("环境变量(变量)", "环境变量")]
    public class GetEnvironmentAsPositionSV : PositionValue
    {
        [DescAttribute("变量名")]
        public StringValue Key = new StringValue.VALUE("VarName");
        public override string ToString()
        {
            return string.Format("获取环境变量\"{0}\"", Key);
        }
        public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
        {
            return api.ZoneAPI.GetEnvironmentVarAs<Vector2>(Key.GetValue(api, args));
        }
    }

}