public static Script GoTo(this Scripts scripts, Vector2 target, Directions8 direction = Directions8.None, Action cb = null) { if (scripts.HasScript(GOTOSCRIPTID)) { scripts.Remove(GOTOSCRIPTID); //throw new Exception(); } return(scripts.Enqueue(GoToScript(scripts, target, direction, cb), GOTOSCRIPTID)); }
private static IEnumerator GoToScript(Scripts scripts, Vector2 target, Directions8 direction = Directions8.None, Action cb = null) { var Navigation = scripts.Get <Navigation>(); var Transform = scripts.Get <Transform>(); if (Transform == null) { yield break; } List <Vector2> Waypoints; if (Navigation == null) { Waypoints = new List <Vector2>() { target }; } else { Navigation.FindPath(target); Waypoints = Navigation.WayPoints; } foreach (var WayPoint in Waypoints) { Vector2 Target; while ((Target = WayPoint - Transform.Position).Length() > 1) { Transform.AddState(State.Walking); Transform.Orientation = Target; // prevents loops for high walking speeds var Increment = Transform.Orientation * GameSpeed.TickDuration * Transform.EffectiveSpeed; var Speeding = Increment.LengthSquared() > Target.LengthSquared(); Transform.Position = (Transform.Position + (Speeding ? Target : Increment)); yield return(0); } } if (direction != Directions8.None) { Transform.Direction8 = direction; yield return(0); } Transform.RemoveState(State.Walking); cb?.Invoke(); }
public Script GoTo(Entity entity, Directions8 direction = Directions8.None, Action cb = null) { var Interaction = entity.Get <Interaction>(); if (null != Interaction) { return(GoTo(Interaction, cb)); } var Transform = entity.Get <Transform>(); if (null != Transform) { return(GoTo(Transform.Position, direction, cb)); } Log.WriteLine("GoTo entity <" + entity.ID + ">: no Interaction and no Transform component avaiable.", LogLevel.Warning); return(Script.None); }
public static Vector2 ToVector2(this Directions8 direction) { switch (direction) { case Directions8.LeftUp: return(new Vector2(-1, -1)); case Directions8.Up: return(new Vector2(0, -1)); case Directions8.RightUp: return(new Vector2(1, -1)); case Directions8.Right: return(new Vector2(1, 0)); case Directions8.RightDown: return(new Vector2(1, 1)); case Directions8.Down: return(new Vector2(0, 1)); case Directions8.LeftDown: return(new Vector2(-1, 1)); case Directions8.Left: return(new Vector2(-1, 0)); } return(Vector2.Zero); }
public Transform SetDirection(Directions8 value) { Orientation = value.ToVector2(); return(this); }
public void Turn(Directions8 direction) { Direction8 = direction; }
public Script GoTo(Vector2 position, Directions8 direction = Directions8.None, Action cb = null) { return(Get <Scripts>().GoTo(position, direction, cb)); }
public Script GoTo(int x, int y, Directions8 direction = Directions8.None, Action cb = null) { return(GoTo(new Vector2(x, y), direction, cb)); }
public Interaction SetDirection(Directions8 value) { Direction = value; return(this); }
public static Script GoTo(this Scripts scripts, float x, float y, Directions8 direction = Directions8.None, Action cb = null) { return(GoTo(scripts, new Vector2(x, y), direction, cb)); }
public void Turn(Directions8 direction) { Get <Transform>().Turn(direction); }