コード例 #1
0
        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);
            }
            }
        }
コード例 #2
0
        //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();
            }
        }