Sharplike.Mapping.Entities.AbstractEntity.Move C# (CSharp) Méthode

Move() public méthode

Thread Safe. Makes an entity walk along the map world in a given direction. This function will respect the passable state of the target map square.
public Move ( Direction dir ) : bool
dir Direction The direction to walk in.
Résultat bool
        public virtual bool Move(Direction dir)
        {
            Vector3 w;
            switch (dir)
            {
                case Direction.North:
                    w = new Vector3(0, -1, 0);
                    break;
                case Direction.South:
                    w = new Vector3(0, 1, 0);
                    break;
                case Direction.East:
                    w = new Vector3(1, 0, 0);
                    break;
                case Direction.West:
                    w = new Vector3(-1, 0, 0);
                    break;
                case Direction.Northwest:
                    w = new Vector3(-1, -1, 0);
                    break;
                case Direction.Southwest:
                    w = new Vector3(1, -1, 0);
                    break;
                case Direction.Northeast:
                    w = new Vector3(-1, 1, 0);
                    break;
                case Direction.Southeast:
                    w = new Vector3(1, 1, 0);
                    break;
                case Direction.Up:
                    w = new Vector3(0, 0, -1);
                    break;
                case Direction.Down:
                    w = new Vector3(0, 0, 1);
                    break;
                default:
                    throw new ArgumentException("Direction was invalid.", "dir");
            }

            Vector3 newloc = this.Location + w;

            lock (Map)
            {
                AbstractSquare sq = Map.GetSafeSquare(newloc);
                if (sq != null && sq.IsPassable(DirectionUtils.OppositeDirection(dir)))
                {
                    this.Location = newloc;
                    sq.Teleport(DirectionUtils.OppositeDirection(dir), this);
                    return true;
                }
            }
            return false;
        }