Beispiel #1
0
 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));
 }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public Transform SetDirection(Directions8 value)
 {
     Orientation = value.ToVector2(); return(this);
 }
Beispiel #6
0
 public void Turn(Directions8 direction)
 {
     Direction8 = direction;
 }
Beispiel #7
0
 public Script GoTo(Vector2 position, Directions8 direction = Directions8.None, Action cb = null)
 {
     return(Get <Scripts>().GoTo(position, direction, cb));
 }
Beispiel #8
0
 public Script GoTo(int x, int y, Directions8 direction = Directions8.None, Action cb = null)
 {
     return(GoTo(new Vector2(x, y), direction, cb));
 }
Beispiel #9
0
 public Interaction SetDirection(Directions8 value)
 {
     Direction = value; return(this);
 }
Beispiel #10
0
 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));
 }
Beispiel #11
0
 public void Turn(Directions8 direction)
 {
     Get <Transform>().Turn(direction);
 }