public static int DetermineSpeed(Enums.MovementSpeed speed) { switch (speed) { case (Enums.MovementSpeed.Standing): { return(0); } case (Enums.MovementSpeed.SuperSlow): { return(2); } case (Enums.MovementSpeed.Slow): { return(3); } case (Enums.MovementSpeed.Walking): { return(4); } case (Enums.MovementSpeed.Running): { return(8); } case (Enums.MovementSpeed.Fast): { return(16); } case (Enums.MovementSpeed.SuperFast): { return(24); } case (Enums.MovementSpeed.Slip): { return(32); } default: { return(4); } } }
//public static void ProcessMovement(int index) { // // Check if player is walking, and if so process moving them over // Players.Player player = Players.PlayerHelper.Players[index]; // if (player.MovementSpeed == Enums.MovementSpeed.Walking) { // switch (player.Direction) { // case Enums.Direction.Up: // player.Offset = new System.Drawing.Point(player.Offset.X, player.Offset.Y - Constants.WALK_SPEED); // break; // case Enums.Direction.Down: // player.Offset = new System.Drawing.Point(player.Offset.X, player.Offset.Y + Constants.WALK_SPEED) // break; // case Enums.Direction.Left: // player.Offset = new System.Drawing.Point(player.Offset.X - Constants.WALK_SPEED, player.Offset.Y); // break; // case Enums.Direction.Right: // player.Offset = new System.Drawing.Point(player.Offset.X + Constants.WALK_SPEED, player.Offset.Y); // break; // } // // Check if completed walking over to the next tile // if ((player.Offset.X == 0) && (player.Offset.Y == 0)) { // player.MovementSpeed = Enums.MovementSpeed.Standing; // } // } else if (player.MovementSpeed == Enums.MovementSpeed.Running) { // switch (player.Direction) { // case Enums.Direction.Up: // player.Offset = new System.Drawing.Point(player.Offset.X, player.Offset.Y - Constants.RUN_SPEED); // break; // case Enums.Direction.Down: // player.Offset = new System.Drawing.Point(player.Offset.X, player.Offset.Y + Constants.RUN_SPEED) // break; // case Enums.Direction.Left: // player.Offset = new System.Drawing.Point(player.Offset.X - Constants.RUN_SPEED, player.Offset.Y); // break; // case Enums.Direction.Right: // player.Offset = new System.Drawing.Point(player.Offset.X + Constants.RUN_SPEED, player.Offset.Y); // break; // } // // Check if completed walking over to the next tile // if ((player.Offset.X == 0) && (player.Offset.Y == 0)) { // player.MovementSpeed = Enums.MovementSpeed.Standing; // } // } //} //public static void ProcessNpcMovement(Maps.Map activeMap, int npcSlot) { // // Check if npc is walking, and if so process moving them over // if (activeMap.MapNpcs[npcSlot].Moving == Enums.MovementSpeed.Walking) { // switch (activeMap.MapNpcs[npcSlot].Direction) { // case Enums.Direction.Up: // activeMap.MapNpcs[npcSlot].YOffset -= Constants.WALK_SPEED; // break; // case Enums.Direction.Down: // activeMap.MapNpcs[npcSlot].YOffset += Constants.WALK_SPEED; // break; // case Enums.Direction.Left: // activeMap.MapNpcs[npcSlot].XOffset -= Constants.WALK_SPEED; // break; // case Enums.Direction.Right: // activeMap.MapNpcs[npcSlot].XOffset += Constants.WALK_SPEED; // break; // } // if ((activeMap.MapNpcs[npcSlot].Offset.X == 0) && activeMap.MapNpcs[npcSlot].Offset.Y == 0) { // activeMap.MapNpcs[npcSlot].Moving = Enums.MovementSpeed.Standing; // } // } //} public static void ProcessSpriteMovement(Graphics.Renderers.Sprites.ISprite sprite) { // Check if sprite is walking, and if so process moving them over if (sprite.MovementSpeed != Enums.MovementSpeed.Standing) { //if (sprite.Offset.X > 0) { // sprite.Direction = Enums.Direction.Left; //} else if (sprite.Offset.X < 0) { // sprite.Direction = Enums.Direction.Right; //} else if (sprite.Offset.Y > 0) { // sprite.Direction = Enums.Direction.Up; //} else if (sprite.Offset.X < 0) { // sprite.Direction = Enums.Direction.Down; //} switch (sprite.Direction) { case Enums.Direction.Up: sprite.Offset = new System.Drawing.Point(sprite.Offset.X, sprite.Offset.Y - DetermineSpeed(sprite.MovementSpeed)); if (sprite.Offset.Y < 0) { sprite.Offset = new System.Drawing.Point(0, 0); } break; case Enums.Direction.Down: sprite.Offset = new System.Drawing.Point(sprite.Offset.X, sprite.Offset.Y + DetermineSpeed(sprite.MovementSpeed)); if (sprite.Offset.Y > 0) { sprite.Offset = new System.Drawing.Point(0, 0); } break; case Enums.Direction.Left: sprite.Offset = new System.Drawing.Point(sprite.Offset.X - DetermineSpeed(sprite.MovementSpeed), sprite.Offset.Y); if (sprite.Offset.X < 0) { sprite.Offset = new System.Drawing.Point(0, 0); } break; case Enums.Direction.Right: sprite.Offset = new System.Drawing.Point(sprite.Offset.X + DetermineSpeed(sprite.MovementSpeed), sprite.Offset.Y); if (sprite.Offset.X > 0) { sprite.Offset = new System.Drawing.Point(0, 0); } break; } // Check if completed walking over to the next tile if ((sprite.Offset.X == 0 && sprite.Offset.Y == 0) /*|| sprite.Offset.X > Constants.TILE_WIDTH || sprite.Offset.X < -Constants.TILE_WIDTH || sprite.Offset.Y > Constants.TILE_HEIGHT || sprite.Offset.Y < -Constants.TILE_HEIGHT*/) { Enums.MovementSpeed speed = sprite.MovementSpeed; sprite.MovementSpeed = Enums.MovementSpeed.Standing; sprite.Leaving = false; if (sprite == PlayerManager.MyPlayer) { if (Maps.MapHelper.Maps[Enums.MapID.Active].Tile[PlayerManager.MyPlayer.Location.X, PlayerManager.MyPlayer.Location.Y].Type == Enums.TileType.Slippery) { int mobilityList = Maps.MapHelper.ActiveMap.Tile[PlayerManager.MyPlayer.Location.X, PlayerManager.MyPlayer.Location.Y].Data1; bool slip = false; for (int i = 0; i < 16; i++) { if (mobilityList % 2 == 1 && !PlayerManager.MyPlayer.Mobility[i]) { slip = true; break; } mobilityList /= 2; } if (speed > Enums.MovementSpeed.Walking) { slip = true; } if (slip) { if (speed != Enums.MovementSpeed.Slip) { int distance = GetSlipperyDistance(PlayerManager.MyPlayer.Location.X, PlayerManager.MyPlayer.Location.Y, PlayerManager.MyPlayer.Direction); //if (distance > 12) { // Music.Music.AudioPlayer.PlaySoundEffect("magic779.wav"); //} else if (distance > 6) { Music.Music.AudioPlayer.PlaySoundEffect("magic762.wav"); } else if (distance > 0) { Music.Music.AudioPlayer.PlaySoundEffect("magic628.wav"); } } Input.InputProcessor.MovePlayer(PlayerManager.MyPlayer.Direction, true); } } else { if (Input.InputProcessor.MoveUp) { Input.InputProcessor.MovePlayer(Enums.Direction.Up, false); } else if (Input.InputProcessor.MoveDown) { Input.InputProcessor.MovePlayer(Enums.Direction.Down, false); } else if (Input.InputProcessor.MoveLeft) { Input.InputProcessor.MovePlayer(Enums.Direction.Left, false); } else if (Input.InputProcessor.MoveRight) { Input.InputProcessor.MovePlayer(Enums.Direction.Right, false); } } if (Maps.MapHelper.Maps[Enums.MapID.Active].Tile[PlayerManager.MyPlayer.Location.X, PlayerManager.MyPlayer.Location.Y].Type == Enums.TileType.Scripted) { PlayerManager.MyPlayer.CurrentEmote = new Client.Logic.Graphics.Renderers.Sprites.Emoticon(13, 2, 1); } } } } else { sprite.WalkingFrame = -1; } if (Input.InputProcessor.Attacking && !PlayerManager.MyPlayer.Attacking) { CheckAttack(); } }