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;
}