Пример #1
0
 private void MovePlayer(Toolbox.Orientation orientation, Vector2 vDestPos)
 {
     if (GameMap.Map.ContainsKey(vDestPos))
     {
         GameMap.player.MoveTo(orientation, vDestPos);
     }
 }
Пример #2
0
        private void MovePlayer(Toolbox.Orientation orientation, Vector2 vDestPos)
        {
            Rectangle pSourceRect = ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Anime.SourceRect;
            //Vector2 origin = new Vector2(pSourceRect.Width / 2, pSourceRect.Height / 2);
            Vector2 vLvlArea = ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.Map
                               [
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.TileIndex
                               ].Level.Size * ToT.Settings.LevelTileSize;

            //vDestPos = vDestPos - origin;
            //if (vDestPos.X >= ToT.Settings.LevelTileSize.X / 2
            //    && vDestPos.X <= vLvlArea.X - ToT.Settings.LevelTileSize.X / 2
            //    && vDestPos.Y >= ToT.Settings.LevelTileSize.Y / 2
            //    && vDestPos.Y <= vLvlArea.Y - ToT.Settings.LevelTileSize.Y / 2)
            //{
            //if (
            //    !CheckIfThingBlocking(
            //        vDestPos,
            //        pSourceRect,
            //        ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.Map
            //        [
            //            ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.TileIndex
            //        ].Level.Things
            //        )
            //    )
            //{
            if (IsMoveableTo(vDestPos, ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.Map
                             [
                                 ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.TileIndex
                             ].Level))
            {
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.State = Toolbox.EntityState.Moving;
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.LevelMoveTo(orientation, vDestPos);
            }
            //}
            //}
        }
Пример #3
0
        private void UpdatePlayerMovement(InputManager input)
        {
            Vector2 vCurrentPos = ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.LevelPosition;

            Toolbox.Orientation ori = ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Orientation;
            float pSpeed            = ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.GetStat(Toolbox.Stat.Speed);

            ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.State = Toolbox.EntityState.Idle;
            if (input.KeyDown(Keys.Left) || input.KeyDown(ToT.Settings.Controls[Toolbox.Controls.MoveLeft]))
            {
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Anime.FY = 1;
                vCurrentPos = new Vector2(vCurrentPos.X - pSpeed, vCurrentPos.Y);
                ori         = Toolbox.Orientation.West;
            }
            if (input.KeyDown(Keys.Right) || input.KeyDown(ToT.Settings.Controls[Toolbox.Controls.MoveRight]))
            {
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Anime.FY = 2;
                vCurrentPos = new Vector2(vCurrentPos.X + pSpeed, vCurrentPos.Y);
                ori         = Toolbox.Orientation.East;
            }
            if (input.KeyDown(Keys.Up) || input.KeyDown(ToT.Settings.Controls[Toolbox.Controls.MoveUp]))
            {
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Anime.FY = 3;
                vCurrentPos = new Vector2(vCurrentPos.X, vCurrentPos.Y - pSpeed);
                ori         = Toolbox.Orientation.North;
            }
            if (input.KeyDown(Keys.Down) || input.KeyDown(ToT.Settings.Controls[Toolbox.Controls.MoveDown]))
            {
                ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.Anime.FY = 0;
                vCurrentPos = new Vector2(vCurrentPos.X, vCurrentPos.Y + pSpeed);
                ori         = Toolbox.Orientation.South;
            }
            if (vCurrentPos != ((GameMapScreen)ToT.screenManager.Screens[Toolbox.ScreenType.GameMap]).GameMap.player.LevelPosition)
            {
                MovePlayer(ori, vCurrentPos);
            }
        }
Пример #4
0
 internal void MoveTo(Toolbox.Orientation orientation, Vector2 vDestPos)
 {
     DestTileIndex = vDestPos;
     State         = Toolbox.EntityState.Moving;
     Orientation   = orientation;
 }
Пример #5
0
 internal void LevelMoveTo(Toolbox.Orientation orientation, Vector2 vDestPos)
 {
     State         = Toolbox.EntityState.Moving;
     LevelPosition = vDestPos;
     Orientation   = orientation;
 }
Пример #6
0
        public static Dictionary <Vector2, Room> GenerateMap(string lvlBase)
        {
            Dictionary <Vector2, Room> tMap = new Dictionary <Vector2, Room>();
            int     iX;
            int     iY;
            int     iLastX = 0;
            int     iLastY = 0;
            int     nbRoom;
            int     LastRoomOri = -1; //0 = North, 1 = East, 2 = South, 3 = West
            int     roomOri;
            bool    bOverlapses;
            int     maxLoops;
            Vector2 currentPos = Vector2.Zero;
            Vector2 tempPos    = currentPos;

            nbRoom = Toolbox.StaticRandom.Instance.Next(6, 25);

            for (int iR = 0; iR < nbRoom; iR++)
            {
                maxLoops = 20;
                int[,] tArr;
                do
                {
                    iX = Toolbox.StaticRandom.Instance.Next(6, 19);
                    iY = Toolbox.StaticRandom.Instance.Next(6, 19);

                    int[,] arr = new int[iX, iY];
                    for (int i = 0; i < iX; i++)
                    {
                        for (int j = 0; j < iY; j++)
                        {
                            arr[i, j] = 1;
                        }
                    }
                    tArr = arr;

                    do
                    {
                        roomOri = Toolbox.StaticRandom.Instance.Next(0, 4);
                    } while (roomOri == LastRoomOri);

                    if (LastRoomOri != -1)
                    {
                        switch (roomOri)
                        {
                        case 0:
                            tempPos = new Vector2(currentPos.X, currentPos.Y - iY - 1);
                            break;

                        case 1:
                            tempPos = new Vector2(currentPos.X + iLastX + 1, currentPos.Y);
                            break;

                        case 2:
                            tempPos = new Vector2(currentPos.X, currentPos.Y + iLastY + 1);
                            break;

                        case 3:
                            tempPos = new Vector2(currentPos.X - iX - 1, currentPos.Y);
                            break;
                        }
                    }
                    bOverlapses = false;
                    foreach (KeyValuePair <Vector2, Room> tRoom in tMap)
                    {
                        if (Intersects(tRoom.Key, new Vector2(tRoom.Value.Size.GetLength(0), tRoom.Value.Size.GetLength(1)), tempPos, new Vector2(iX, iY)))
                        {
                            bOverlapses = true;
                            break;
                        }
                    }
                    maxLoops--;
                    if (maxLoops <= 0)
                    {
                        return(null);
                    }
                } while (bOverlapses);
                currentPos  = tempPos;
                iLastX      = iX;
                iLastY      = iY;
                LastRoomOri = roomOri;
                Toolbox.Orientation gateOrientation = Toolbox.Orientation.North;
                //0 = North, 1 = East, 2 = South, 3 = West
                switch (roomOri)
                {
                case 0:
                    gateOrientation = Toolbox.Orientation.South;
                    break;

                case 1:
                    gateOrientation = Toolbox.Orientation.West;
                    break;

                case 2:
                    gateOrientation = Toolbox.Orientation.North;
                    break;

                case 3:
                    gateOrientation = Toolbox.Orientation.East;
                    break;
                }
                Room tNewRoom = new Room
                {
                    Size            = tArr,
                    GateOrientation = gateOrientation
                };
                tMap.Add(currentPos, tNewRoom);
            }
            return(tMap);
        }