Vector2 conv(WalkDirections wd) { switch (wd) { case WalkDirections.up: return(Vector2.up); case WalkDirections.down: return(Vector2.down); case WalkDirections.left: return(Vector2.left); case WalkDirections.right: return(Vector2.right); case WalkDirections.right_down: return(Vector2.right * slow_r + Vector2.down * slow_r); case WalkDirections.right_up: return(Vector2.right * slow_r + Vector2.up * slow_r); case WalkDirections.left_up: return(Vector2.left * slow_r + Vector2.up * slow_r); case WalkDirections.left_down: return(Vector2.left * slow_r + Vector2.down * slow_r); } return(Vector2.zero); }
/// <summary> /// For arrow keys (websockets) /// </summary> public static Point GetDirectionDeviation(RoomUser User) { if (User == null) { return(new Point(0, 0)); } if (User.GetClient() == null) { return(new Point(0, 0)); } WalkDirections Direction = User.GetClient().GetRoleplay().WalkDirection; Point Deviation = new Point(User.Coordinate.X, User.Coordinate.Y); if (Direction == WalkDirections.Up) { Deviation = new Point(User.Coordinate.X - 2, User.Coordinate.Y); if (!User.GetRoom().GetGameMap().IsValidStep(new Vector2D(User.X, User.Y), new Vector2D(Deviation.X, Deviation.Y), (User.GoalX == Deviation.X && User.GoalY == User.SetY), User.AllowOverride)) { Deviation = new Point(User.Coordinate.X - 1, User.Coordinate.Y); } } else if (Direction == WalkDirections.Down) { Deviation = new Point(User.Coordinate.X + 2, User.Coordinate.Y); if (!User.GetRoom().GetGameMap().IsValidStep(new Vector2D(User.X, User.Y), new Vector2D(Deviation.X, Deviation.Y), (User.GoalX == Deviation.X && User.GoalY == User.SetY), User.AllowOverride)) { Deviation = new Point(User.Coordinate.X + 1, User.Coordinate.Y); } } else if (Direction == WalkDirections.Right) { Deviation = new Point(User.Coordinate.X, User.Coordinate.Y - 2); if (!User.GetRoom().GetGameMap().IsValidStep(new Vector2D(User.X, User.Y), new Vector2D(Deviation.X, Deviation.Y), (User.GoalX == Deviation.X && User.GoalY == User.SetY), User.AllowOverride)) { Deviation = new Point(User.Coordinate.X, User.Coordinate.Y - 1); } } else if (Direction == WalkDirections.Left) { Deviation = new Point(User.Coordinate.X, User.Coordinate.Y + 2); if (!User.GetRoom().GetGameMap().IsValidStep(new Vector2D(User.X, User.Y), new Vector2D(Deviation.X, Deviation.Y), (User.GoalX == Deviation.X && User.GoalY == User.SetY), User.AllowOverride)) { Deviation = new Point(User.Coordinate.X, User.Coordinate.Y + 1); } } return(Deviation); }
/// <summary> /// Executes socket data. /// </summary> /// <param name="Client"></param> /// <param name="Data"></param> /// <param name="Socket"></param> public void Execute(GameClient Client, string Data, IWebSocketConnection Socket) { if (Data.Contains("stop")) { Client.GetRoleplay().WalkDirection = WalkDirections.None; Client.GetRoomUser().GoalX = Client.GetRoomUser().SetX; Client.GetRoomUser().GoalY = Client.GetRoomUser().SetY; return; } if (Client.GetRoleplay().Game != null) { Client.SendWhisper("Você não pode usar as setas enquanto estiver dentro de um evento!", 1); Client.GetRoleplay().ArrowEnabled = false; PlusEnvironment.GetGame().GetWebEventManager().SendDataDirect(Client, "compose_arrowmovement:no"); return; } WalkDirections Direction = WalkDirections.None; Direction = (WalkDirections)Enum.Parse(typeof(WalkDirections), Data); if (Direction == WalkDirections.None) { return; } Client.GetRoleplay().WalkDirection = Direction; if (Client.GetRoomUser() != null) { Client.GetRoomUser().GoalX = Client.GetRoomUser().SetX; Client.GetRoomUser().GoalY = Client.GetRoomUser().SetY; } Point Point = RoleplayManager.GetDirectionDeviation(Client.GetRoomUser()); if (Point != new Point(0, 0)) { Client.GetRoomUser().MoveTo(Point); } return; }