123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using CommonLang.Property;
- using CommonAI.RTS; using CommonLang.Vector;
- using CommonAI.Zone.Instance;
- using CommonLang;
- using CommonAI.Zone.EventTrigger;
- namespace CommonAI.Zone.ZoneEditor.EventTrigger
- {
- [DescAttribute("地图坐标")]
- public abstract class PositionValue : AbstractValue<Vector2>
- {
- [DescAttribute("值", "值")]
- public class VALUE : PositionValue
- {
- public float X;
- public float Y;
- public override string ToString()
- {
- return string.Format("坐标({0},{1})", X, Y);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- return new Vector2(X, Y);
- }
- }
- [DescAttribute("单位坐标", "功能")]
- public class PositionOfUnit : PositionValue
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.NA();
- public override string ToString()
- {
- return string.Format("({0})坐标", Unit);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- return new Vector2(unit.X, unit.Y);
- }
- return null;
- }
- }
- [DescAttribute("Flag坐标", "功能")]
- public class CenterOfFlag : PositionValue
- {
- [DescAttribute("Flag")]
- public FlagValue Flag = new FlagValue.EditorPoint();
- public override string ToString()
- {
- return string.Format("({0})坐标", Flag);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- InstanceFlag flag = Flag.GetValue(api, args);
- if (flag != null)
- {
- return new Vector2(flag.X, flag.Y);
- }
- return null;
- }
- }
- [DescAttribute("Flag内随机点", "功能")]
- public class RandomPointInFlag : PositionValue
- {
- [DescAttribute("Flag")]
- public FlagValue Flag = new FlagValue.EditorRegion();
- public override string ToString()
- {
- return string.Format("({0})内随机点", Flag);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- InstanceFlag flag = Flag.GetValue(api, args);
- if (flag != null)
- {
- Random rd = api.ZoneAPI.RandomN;
- var pos = flag.getRandomPos(rd);
- return new Vector2(pos.X, pos.Y);
- }
- return null;
- }
- }
- [DescAttribute("相对坐标", "功能")]
- public class PointWithOffset : PositionValue
- {
- [DescAttribute("参照位置")]
- public PositionValue SrcPosition = new PositionValue.VALUE();
- [DescAttribute("偏移位置")]
- public float OffsetX;
- [DescAttribute("偏移位置")]
- public float OffsetY;
- public override string ToString()
- {
- return string.Format("相对于({0})位置偏移({1}{2})", SrcPosition, OffsetX, OffsetY);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- Vector2 pos = SrcPosition.GetValue(api, args);
- if (pos != null)
- {
- pos.AddX(OffsetX);
- pos.AddY(OffsetY);
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("相对坐标(变量)", "功能")]
- public class PointWithOffsetVar : PositionValue
- {
- [DescAttribute("参照位置")]
- public PositionValue SrcPosition = new PositionValue.VALUE();
- [DescAttribute("偏移位置")]
- public RealValue OffsetX = new RealValue.VALUE();
- [DescAttribute("偏移位置")]
- public RealValue OffsetY = new RealValue.VALUE();
- public override string ToString()
- {
- return string.Format("相对于({0})位置偏移({1}{2})", SrcPosition, OffsetX, OffsetY);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- Vector2 pos = SrcPosition.GetValue(api, args);
- if (pos != null)
- {
- pos.AddX(OffsetX.GetValue(api, args));
- pos.AddY(OffsetY.GetValue(api, args));
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("相对极坐标", "功能")]
- public class PointWithPolarOffset : PositionValue
- {
- [DescAttribute("参照位置")]
- public PositionValue SrcPosition = new PositionValue.VALUE();
- [DescAttribute("半径")]
- public float Radius = 1;
- [DescAttribute("角度(0~360)")]
- public float Angle;
- public override string ToString()
- {
- return string.Format("相对于({0})位置偏移(半径:{1} 角度:{2})", SrcPosition, Radius, Angle);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- Vector2 pos = SrcPosition.GetValue(api, args);
- if (pos != null)
- {
- float da = CMath.DegreesToRadians(Angle);
- float dx = (float)(Math.Cos(da) * Radius);
- float dy = (float)(Math.Sin(da) * Radius);
- pos.AddX(dx);
- pos.AddY(dy);
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("相对极坐标(变量)", "功能")]
- public class PointWithPolarOffsetVar : PositionValue
- {
- [DescAttribute("参照位置")]
- public PositionValue SrcPosition = new PositionValue.VALUE();
- [DescAttribute("半径")]
- public RealValue Radius = new RealValue.VALUE();
- [DescAttribute("角度(0~360)")]
- public RealValue Angle = new RealValue.VALUE();
- public override string ToString()
- {
- return string.Format("相对于({0})位置偏移(半径:{1} 角度:{2})", SrcPosition, Radius, Angle);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- Vector2 pos = SrcPosition.GetValue(api, args);
- if (pos != null)
- {
- float va = Angle.GetValue(api, args);
- float vr = Radius.GetValue(api, args);
- float da = CMath.DegreesToRadians(va);
- float dx = (float)(Math.Cos(da) * vr);
- float dy = (float)(Math.Sin(da) * vr);
- pos.AddX(dx);
- pos.AddY(dy);
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("单位相对极坐标", "功能")]
- public class PointWithPolarOfUnit : PositionValue
- {
- [DescAttribute("参照单位")]
- public UnitValue SrcUnit = new UnitValue.Trigging();
- [DescAttribute("半径")]
- public float Radius = 1;
- [DescAttribute("角度(0~360)")]
- public float Angle;
- public override string ToString()
- {
- return string.Format("相对于单位({0})位置朝向偏移(半径:{1} 角度:{2})", SrcUnit, Radius, Angle);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- InstanceUnit unit = SrcUnit.GetValue(api, args);
- if (unit != null)
- {
- Vector2 pos = new Vector2(unit.X, unit.Y);
- float da = CMath.DegreesToRadians(Angle) + unit.Direction;
- float dx = (float)(Math.Cos(da) * Radius);
- float dy = (float)(Math.Sin(da) * Radius);
- pos.AddX(dx);
- pos.AddY(dy);
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("单位相对极坐标(变量)", "功能")]
- public class PointWithPolarOfUnitVar : PositionValue
- {
- [DescAttribute("参照单位")]
- public UnitValue SrcUnit = new UnitValue.Trigging();
- [DescAttribute("半径")]
- public RealValue Radius = new RealValue.VALUE();
- [DescAttribute("角度(0~360)")]
- public RealValue Angle = new RealValue.VALUE();
- public override string ToString()
- {
- return string.Format("相对于单位({0})位置朝向偏移(半径:{1} 角度:{2})", SrcUnit, Radius, Angle);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- InstanceUnit unit = SrcUnit.GetValue(api, args);
- if (unit != null)
- {
- float va = Angle.GetValue(api, args);
- float vr = Radius.GetValue(api, args);
- Vector2 pos = new Vector2(unit.X, unit.Y);
- float da = CMath.DegreesToRadians(va) + unit.Direction;
- float dx = (float)(Math.Cos(da) * vr);
- float dy = (float)(Math.Sin(da) * vr);
- pos.AddX(dx);
- pos.AddY(dy);
- return pos;
- }
- return null;
- }
- }
- [DescAttribute("相对范围内随机可移动点", "功能")]
- public class RandomMoveableInRange : PositionValue
- {
- [DescAttribute("参照位置")]
- public PositionValue SrcPosition = new PositionValue.VALUE();
- [DescAttribute("半径")]
- public RealValue Radius = new RealValue.VALUE(20);
-
- public override string ToString()
- {
- return string.Format("相对于位置:{0}半径:{1}范围内随机可移动点", SrcPosition, Radius);
- }
- public override Vector2 GetValue(IEditorValueAdapter api, EventArguments args)
- {
- Vector2 pos = SrcPosition.GetValue(api, args);
- if (pos != null)
- {
- var node = api.ZoneAPI.PathFinder.FindNearRandomMoveableNode(api.ZoneAPI.RandomN, pos.X, pos.Y, Radius.GetValue(api, args));
- if (node != null)
- {
- return new Vector2(node.PosX, node.PosY);
- }
- }
- return null;
- }
- }
- }
- }
|