using System; using System.Collections.Generic; using System.Linq; using System.Text; using CommonLang.Property; using CommonAI.Zone.Instance; using CommonAI.Zone.Attributes; using CommonAI.Zone.EventTrigger; using CommonLang.Formula; using CommonLang.Vector; namespace CommonAI.Zone.ZoneEditor.EventTrigger { [DescAttribute("小数点型")] public abstract class RealValue : AbstractValue { [DescAttribute("值", "值")] public class VALUE : RealValue { [DescAttribute("值")] public float Value = 20.00f; public VALUE() { } public VALUE(float value) { this.Value = value; } public override string ToString() { return Value + ""; } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { return Value; } } //------------------------------------------------------------------------------------------------------------ #region __MathAndConverter__ [DescAttribute("小数计算", "数学")] public class RealOP : RealValue { [DescAttribute("值1")] public RealValue Value1 = new RealValue.VALUE(); [DescAttribute("运算符")] public NumericOP OP = NumericOP.ADD; [DescAttribute("值2")] public RealValue Value2 = new RealValue.VALUE(); public override string ToString() { return string.Format("({0}) {1} ({2})", Value1, FormulaHelper.ToString(OP), Value2); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { float ret = FormulaHelper.Calculate(Value1.GetValue(api, args), OP, Value2.GetValue(api, args)); return ret; } } [DescAttribute("函数-返回最小值", "数学")] public class MinFunction : RealValue { [DescAttribute("值1")] public RealValue Value1 = new RealValue.VALUE(); [DescAttribute("值2")] public RealValue Value2 = new RealValue.VALUE(); public override string ToString() { return string.Format("取{0}和{1}最小值", Value1, Value2); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { float v1 = Value1.GetValue(api, args); float v2 = Value2.GetValue(api, args); return Math.Min(v1, v2); } } [DescAttribute("函数-返回最大值", "数学")] public class MaxFunction : RealValue { [DescAttribute("值1")] public RealValue Value1 = new RealValue.VALUE(); [DescAttribute("值2")] public RealValue Value2 = new RealValue.VALUE(); public override string ToString() { return string.Format("取{0}和{1}最大值", Value1, Value2); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { float v1 = Value1.GetValue(api, args); float v2 = Value2.GetValue(api, args); return Math.Max(v1, v2); } } [DescAttribute("随机小数", "数学")] public class RandomReal : RealValue { public override string ToString() { return string.Format("介于0.0和1.0之间的随机数"); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { return (float)api.ZoneAPI.RandomN.NextDouble(); } } [DescAttribute("从整数转换", "转换")] public class ConvertFromInteger : RealValue { [DescAttribute("值")] public IntegerValue Value = new IntegerValue.VALUE(); public override string ToString() { return string.Format("从{0}转换", Value); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { int value = Value.GetValue(api, args); return (float)value; } } [DescAttribute("从字符串转换", "转换")] public class ParseFromString : RealValue { [DescAttribute("值")] public StringValue Value = new StringValue.VALUE("1"); public override string ToString() { return string.Format("从{0}转换", Value); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { string value = Value.GetValue(api, args); float ret = 0; float.TryParse(value, out ret); return ret; } } #endregion //------------------------------------------------------------------------------------------------------------ #region __Attributes__ [DescAttribute("场景用户自定义属性", "场景")] public class ZoneRealAttribute : RealValue { [DescAttribute("键值")] public string Key; public override string ToString() { return string.Format("场景键值[{0}]", Key); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { try { return Single.Parse(api.ZoneAPI.GetAttribute(Key) as string); } catch (Exception err) { Console.WriteLine("ZoneRealAttribute : " + Key + ", catch: " + err); } return 0; } } [DescAttribute("单位用户自定义属性", "单位")] public class UnitRealAttribute : RealValue { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("键值")] public string Key; public override string ToString() { return string.Format("单位({0})键值[{1}]", Unit, Key); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit unit = Unit.GetValue(api, args); if (unit != null) { try { return Single.Parse(unit.GetAttribute(Key) as string); } catch (Exception err) { Console.WriteLine("UnitRealAttribute : " + Key + ", catch: " + err); } return 0; } return 0; } } #endregion //------------------------------------------------------------------------------------------------------------ #region __TowUnit__ [DescAttribute("获得两个单位的夹角(弧度)", "2单位")] public class GetTowUnitAngle : RealValue { [DescAttribute("单位A")] public UnitValue UnitA = new UnitValue.Trigging(); [DescAttribute("单位B")] public UnitValue UnitB = new UnitValue.Trigging(); public override string ToString() { return string.Format("GetDirect({0}, {1})", UnitA, UnitB); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit a = UnitA.GetValue(api, args); InstanceUnit b = UnitB.GetValue(api, args); if (a != null && b!=null) { return MathVector.getDegree(a.X, a.Y, b.X, b.Y); } return 0; } } [DescAttribute("获得两个单位的距离", "2单位")] public class GetTowUnitDistance : RealValue { [DescAttribute("单位A")] public UnitValue UnitA = new UnitValue.Trigging(); [DescAttribute("单位B")] public UnitValue UnitB = new UnitValue.Trigging(); public override string ToString() { return string.Format("GetDistance({0}, {1})", UnitA, UnitB); } public override Single GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit a = UnitA.GetValue(api, args); InstanceUnit b = UnitB.GetValue(api, args); if (a != null && b != null) { return MathVector.getDistance(a.X, a.Y, b.X, b.Y); } return 0; } } #endregion } }