Exemple #1
0
        // _ _
        //|_| |
        //|_|_|
        private void levelRightVertTwoCorner(LevelFragment topLeftFragment, LevelFragment bottomLeftFragment, LevelFragment rightFragment, int x, int y)
        {
            if (rightFragment.type != LevelContent.Type.HalfVertical)
            {
                throw new ArgumentException("Right fragment must be a vertical half", "rightFragment");
            }
            if (topLeftFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("Both left fragments must be corners", "topLeftFragment");
            }
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("Both left fragments must be corners", "bottomLeftFragment");
            }
            initializeLevel(x, y);

            setFragmentIntoLevel(topLeftFragment, FragmentPosition.TopLeftCorner);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(rightFragment, FragmentPosition.RightHalf);

            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #2
0
        // Create level from full fragment
        // _ _
        //|   |
        //|_ _|
        private void levelFull(LevelFragment fullFragment, int x, int y)
        {
            //initialize separately from fragmented levels because making a full level is simpler
            pathfinding = new AStarPathfinding(GRID_SIZE, GRID_SIZE);
            xPos        = x;
            yPos        = y;
            alive       = true;

            levelOverlayTexture = new Texture2D(RetroGame.graphicsDevice, TEX_SIZE, TEX_SIZE);
            Color[] data = new Color[TEX_SIZE * TEX_SIZE];
            fragmentGrid[0, 0] = fullFragment;   fragmentGrid[0, 1] = fullFragment;
            fragmentGrid[1, 0] = fullFragment;   fragmentGrid[1, 1] = fullFragment;

            grid = (LevelContent.LevelTile[, ])fullFragment.grid.Clone();
            grid = new LevelContent.LevelTile[GRID_SIZE, GRID_SIZE];
            for (int i = 0; i < GRID_SIZE; i++)
            {
                for (int j = 0; j < GRID_SIZE; j++)
                {
                    grid[i, j] = fullFragment.grid[i, j]; // cut off last row and column of fragment
                }
            }

            collectableLocations = fullFragment.collectableLocations;
            enemyLocations       = fullFragment.enemyLocations;
            prisonerLocations    = fullFragment.prisonerLocations;
            powerupLocations     = fullFragment.powerupLocations;

            finalizeLevel();
        }
Exemple #3
0
        // _ _
        //|___|
        //|_|_|
        private void levelTopHorizTwoCorner(LevelFragment topFragment, LevelFragment bottomLeftFragment, LevelFragment bottomRightFragment, int x, int y)
        {
            if (topFragment.type != LevelContent.Type.HalfHorizontal)
            {
                throw new ArgumentException("Top fragment must be a horizontal half", "topFragment");
            }
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("Both bottom fragments must be corners", "bottomLeftFragment");
            }
            if (bottomRightFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("Both bottom fragments must be corners", "bottomRightFragment");
            }
            initializeLevel(x, y);

            setFragmentIntoLevel(topFragment, FragmentPosition.TopHalf);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(bottomRightFragment, FragmentPosition.BottomRightCorner);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #4
0
        // _ _
        //|_|_|
        //|_|_|
        private void levelFourCorner(LevelFragment topLeftFragment, LevelFragment topRightFragment, LevelFragment bottomLeftFragment, LevelFragment bottomRightFragment, int x, int y)
        {
            if (topLeftFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("All fragments must be corners", "topLeftFragment");
            }
            if (topRightFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("All fragments must be corners", "topRightFragment");
            }
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("All fragments must be corners", "bottomLeftFragment");
            }
            if (bottomRightFragment.type != LevelContent.Type.Corner)
            {
                throw new ArgumentException("All fragments must be corners", "bottomRightFragment");
            }
            initializeLevel(x, y);

            setFragmentIntoLevel(topLeftFragment, FragmentPosition.TopLeftCorner);
            setFragmentIntoLevel(topRightFragment, FragmentPosition.TopRightCorner);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(bottomRightFragment, FragmentPosition.BottomRightCorner);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #5
0
 public void createSpecificLevelAt(LevelFragment fullLevelFragment, int xPos, int yPos)
 {
     if (fullLevelFragment.type != LevelContent.Type.Full)
     {
         throw new ArgumentException("Creating a specific level requires a full level fragment", "fullLevelFragment");
     }
     levels[xPos, yPos] = new Level(this, fullLevelFragment, xPos, yPos);
     currentLevels      = null; // make the CurrentLevels list be recalculated
 }
Exemple #6
0
 public void Initialize(int numPlayers, bool createNewHeroes, LevelFragment fullIntroLevelFragment, Point startingLevel)
 {
     if (numPlayers <= 0 || numPlayers > RetroGame.MAX_PLAYERS)
     {
         throw new ArgumentOutOfRangeException("numPlayers", "Number of players must be between 1 and " + RetroGame.MAX_PLAYERS);
     }
     if (fullIntroLevelFragment.type != LevelContent.Type.Full)
     {
         throw new ArgumentException("LevelManager must be initialized with a Full LevelFragment", "fullIntroLevelFragment");
     }
     if (createNewHeroes)
     {
         heroes = new Hero[numPlayers];
         for (int i = 0; i < heroes.Length; i++)
         {
             heroes[i] = new Hero((PlayerIndex)Enum.Parse(typeof(PlayerIndex), i.ToString()));
             heroes[i].Initialize();
         }
     }
     createSpecificLevelAt(fullIntroLevelFragment, startingLevel.X, startingLevel.Y);
     if (fullIntroLevelFragment.type == LevelContent.Type.Full)
     {
         for (int i = 0; i < numPlayers; i++)
         {
             for (int j = 0; j < fullIntroLevelFragment.specialTiles[i].Length; j++)
             {
                 if (fullIntroLevelFragment.specialTiles[i][j] != null)
                 {
                     levels[startingLevel.X, startingLevel.Y].powerups.Add(newPowerup(Powerups.SPECIAL_INTRO_POWERUPS[j],
                                                                                      fullIntroLevelFragment.specialTiles[i][j][0], fullIntroLevelFragment.specialTiles[i][j][1],
                                                                                      levels[startingLevel.X, startingLevel.Y]));
                 }
             }
             if (fullIntroLevelFragment.heroTiles[0] != null && heroes.Length >= 1)
             {
                 heroes[i].position = new Vector2(Level.TEX_SIZE * startingLevel.X +
                                                  (Level.TILE_SIZE * (fullIntroLevelFragment.heroTiles[i][0] + 0.5f)),
                                                  Level.TEX_SIZE * startingLevel.Y +
                                                  (Level.TILE_SIZE * (fullIntroLevelFragment.heroTiles[i][1] + 0.5f)));
             }
         }
     }
     foreach (Hero hero in heroes)
     {
         hero.updateCurrentLevelAndTile();
     }
     SetCameraMode(CameraMode.Arena);
 }
Exemple #7
0
        public StoreLevel(LevelManager levelManager, LevelFragment storeLevelFragment, IList<Type> powerupTypesToUse, int xPos, int yPos)
            : base(levelManager, storeLevelFragment, xPos, yPos)
        {
            alreadyUsedTypes.Initialize();
            PowerupIcon icon;
            for (int i = 0; i < NUM_RANDOM_POWERUPS; i++)
            {
                int tileX = RANDOM_POWERUPS_TILEX[i];
                int tileY = RANDOM_POWERUPS_TILEY;
                Type powerupType = null;
                if (powerupTypesToUse == null)
                    powerupType = Powerups.RandomPowerupType(except: alreadyUsedTypes.Union(Inventory.AllCurrentlyOwnedPowerupsTypes).ToList());
                else
                    powerupType = powerupTypesToUse[i];
                icon = levelManager.newPowerup(powerupType, tileX, tileY, this);
                icon.DrawDetails = true;
                icon.DetailsAboveIcon = true;
                icon.subtractCostOnCollected = true;
                powerups.Add(icon);
                icons.Add(icon);
                alreadyUsedTypes[i] = icon.powerupType;
            }

            icon = levelManager.newRegeneratingPowerup(typeof(HealthPickup), HEALTH_POSITION.X, HEALTH_POSITION.Y, this);
            icon.DrawDetails = true;
            icon.DetailsAboveIcon = false;
            icon.subtractCostOnCollected = true;
            powerups.Add(icon);
            icons.Add(icon);
            icon = levelManager.newRegeneratingPowerup(typeof(SandPickup), SAND_POSITION.X, SAND_POSITION.Y, this);
            icon.DrawDetails = true;
            icon.DetailsAboveIcon = false;
            icon.subtractCostOnCollected = true;
            powerups.Add(icon);
            icons.Add(icon);
            icon = levelManager.newRegeneratingPowerup(typeof(BombPickup), BOMB_POSITION.X, BOMB_POSITION.Y, this);
            icon.DrawDetails = true;
            icon.DetailsAboveIcon = false;
            icon.subtractCostOnCollected = true;
            powerups.Add(icon);
            icons.Add(icon);
            icon = levelManager.newPowerup(typeof(RevivePickup), REVIVE_POSITION.X, REVIVE_POSITION.Y, this);
            icon.DrawDetails = true;
            icon.DetailsAboveIcon = false;
            icon.subtractCostOnCollected = true;
            powerups.Add(icon);
            icons.Add(icon);
        }
Exemple #8
0
        // _ _
        //|___|
        //|_ _|
        private void levelTwoHoriz(LevelFragment topFragment, LevelFragment bottomFragment, int x, int y)
        {
            if (topFragment.type != LevelContent.Type.HalfHorizontal)
            {
                throw new ArgumentException("Both fragments must be horizontal halves", "topFragment");
            }
            if (bottomFragment.type != LevelContent.Type.HalfHorizontal)
            {
                throw new ArgumentException("Both fragments must be horizontal halves", "bottomFragment");
            }
            initializeLevel(x, y);

            setFragmentIntoLevel(topFragment, FragmentPosition.TopHalf);
            setFragmentIntoLevel(bottomFragment, FragmentPosition.BottomHalf);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);

            finalizeLevel();
        }
Exemple #9
0
        // _ _
        //| | |
        //|_|_|
        private void levelTwoVert(LevelFragment leftFragment, LevelFragment rightFragment, int x, int y)
        {
            if (leftFragment.type != LevelContent.Type.HalfVertical)
            {
                throw new ArgumentException("Both fragments must be vertical halves", "leftFragment");
            }
            if (rightFragment.type != LevelContent.Type.HalfVertical)
            {
                throw new ArgumentException("Both fragments must be vertical halves", "rightFragment");
            }

            initializeLevel(x, y);

            setFragmentIntoLevel(leftFragment, FragmentPosition.LeftHalf);
            setFragmentIntoLevel(rightFragment, FragmentPosition.RightHalf);

            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #10
0
        public void DrawDebug(SpriteBatch spriteBatch)
        {
            Vector2 baseOffset = new Vector2(xPos * TEX_SIZE, yPos * TEX_SIZE);

            bool[,] fragmentAlreadyDrawn = new bool[2, 2];
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    Vector2       fragmentOffset = new Vector2(i * TILE_SIZE * (LevelContent.LEVEL_SIZE_HALF - 1), j * TILE_SIZE * (LevelContent.LEVEL_SIZE_HALF - 1));
                    LevelFragment fragment       = fragmentGrid[i, j];
                    if (!fragmentAlreadyDrawn[i, j])
                    {
                        spriteBatch.Draw(fragment.levelTextureDebug, baseOffset + fragmentOffset, null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1);
                        switch (fragment.type)
                        {
                        case LevelContent.Type.Full:
                            fragmentAlreadyDrawn[0, 0] = fragmentAlreadyDrawn[0, 1] = fragmentAlreadyDrawn[1, 0] = fragmentAlreadyDrawn[1, 1] = true;
                            break;

                        case LevelContent.Type.HalfHorizontal:
                            fragmentAlreadyDrawn[0, j] = fragmentAlreadyDrawn[1, j] = true;
                            break;

                        case LevelContent.Type.HalfVertical:
                            fragmentAlreadyDrawn[i, 0] = fragmentAlreadyDrawn[i, 1] = true;
                            break;

                        case LevelContent.Type.Corner:
                            fragmentAlreadyDrawn[i, j] = true;
                            break;
                        }
                    }
                }
            }
        }
Exemple #11
0
        // Helper function to set parts of the level
        private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position)
        {
            int texWidth = fragment.levelTexture.Width;
            int texHeight = fragment.levelTexture.Height;
            int gridWidth = fragment.grid.GetLength(0);
            int gridHeight = fragment.grid.GetLength(1);
            int texStartWidth = 0;
            int texStartHeight = 0;
            int gridStartWidth = 0;
            int gridStartHeight = 0;
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                case FragmentPosition.TopHalf:
                    texStartWidth = 0;
                    texStartHeight = 0;
                    gridStartWidth = 0;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.TopLeftCorner:
                    texStartWidth = 0;
                    texStartHeight = 0;
                    gridStartWidth = 0;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.RightHalf:
                case FragmentPosition.TopRightCorner:
                    texStartWidth = texWidth + TILE_SIZE;
                    texStartHeight = 0;
                    gridStartWidth = gridWidth - 1;
                    gridStartHeight = 0;
                    break;
                case FragmentPosition.BottomHalf:
                case FragmentPosition.BottomLeftCorner:
                    texStartWidth = 0;
                    texStartHeight = texHeight + TILE_SIZE;
                    gridStartWidth = 0;
                    gridStartHeight = gridHeight - 1;
                    break;
                case FragmentPosition.BottomRightCorner:
                    texStartWidth = texWidth + TILE_SIZE;
                    texStartHeight = texHeight + TILE_SIZE;
                    gridStartWidth = gridWidth - 1;
                    gridStartHeight = gridHeight - 1;
                    break;
            }
            //cut off last row/column if necessary
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                case FragmentPosition.BottomLeftCorner:
                    gridHeight--;
                    break;
                case FragmentPosition.TopHalf:
                case FragmentPosition.TopRightCorner:
                    gridWidth--;
                    break;
                case FragmentPosition.RightHalf:
                case FragmentPosition.BottomHalf:
                case FragmentPosition.BottomRightCorner:
                    gridWidth--;
                    gridHeight--;
                    break;
            }

            //color grid
            switch (position)
            {
                case FragmentPosition.LeftHalf:
                    fragmentGrid[0, 0] = fragment;
                    fragmentGrid[0, 1] = fragment;
                    break;
                case FragmentPosition.RightHalf:
                    fragmentGrid[1, 0] = fragment;
                    fragmentGrid[1, 1] = fragment;
                    break;
                case FragmentPosition.TopHalf:
                    fragmentGrid[0, 0] = fragment;
                    fragmentGrid[1, 0] = fragment;
                    break;
                case FragmentPosition.BottomHalf:
                    fragmentGrid[0, 1] = fragment;
                    fragmentGrid[1, 1] = fragment;
                    break;
                case FragmentPosition.TopLeftCorner:
                    fragmentGrid[0, 0] = fragment;
                    break;
                case FragmentPosition.TopRightCorner:
                    fragmentGrid[1, 0] = fragment;
                    break;
                case FragmentPosition.BottomLeftCorner:
                    fragmentGrid[0, 1] = fragment;
                    break;
                case FragmentPosition.BottomRightCorner:
                    fragmentGrid[1, 1] = fragment;
                    break;
            }
            //level grid
            grid.setDataRectangle<LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid);
            //locations
            collectableLocations.AddRange(fragment.getCollectableLocations(position));
            enemyLocations.AddRange(fragment.getEnemyLocations(position));
            prisonerLocations.AddRange(fragment.getPrisonerLocations(position));
            powerupLocations.AddRange(fragment.getPowerupLocations(position));
        }
Exemple #12
0
        // _ _
        //| | |
        //|_|_|
        private void levelTwoVert(LevelFragment leftFragment, LevelFragment rightFragment, int x, int y)
        {
            if (leftFragment.type != LevelContent.Type.HalfVertical)
                throw new ArgumentException("Both fragments must be vertical halves", "leftFragment");
            if (rightFragment.type != LevelContent.Type.HalfVertical)
                throw new ArgumentException("Both fragments must be vertical halves", "rightFragment");

            initializeLevel(x, y);

            setFragmentIntoLevel(leftFragment, FragmentPosition.LeftHalf);
            setFragmentIntoLevel(rightFragment, FragmentPosition.RightHalf);

            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #13
0
        // _ _
        //|___|
        //|_ _|
        private void levelTwoHoriz(LevelFragment topFragment, LevelFragment bottomFragment, int x, int y)
        {
            if (topFragment.type != LevelContent.Type.HalfHorizontal)
                throw new ArgumentException("Both fragments must be horizontal halves", "topFragment");
            if (bottomFragment.type != LevelContent.Type.HalfHorizontal)
                throw new ArgumentException("Both fragments must be horizontal halves", "bottomFragment");
            initializeLevel(x, y);

            setFragmentIntoLevel(topFragment, FragmentPosition.TopHalf);
            setFragmentIntoLevel(bottomFragment, FragmentPosition.BottomHalf);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);

            finalizeLevel();
        }
Exemple #14
0
        // _ _
        //|___|
        //|_|_|
        private void levelTopHorizTwoCorner(LevelFragment topFragment, LevelFragment bottomLeftFragment, LevelFragment bottomRightFragment, int x, int y)
        {
            if (topFragment.type != LevelContent.Type.HalfHorizontal)
                throw new ArgumentException("Top fragment must be a horizontal half", "topFragment");
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("Both bottom fragments must be corners", "bottomLeftFragment");
            if (bottomRightFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("Both bottom fragments must be corners", "bottomRightFragment");
            initializeLevel(x, y);

            setFragmentIntoLevel(topFragment, FragmentPosition.TopHalf);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(bottomRightFragment, FragmentPosition.BottomRightCorner);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #15
0
        // _ _
        //|_| |
        //|_|_|
        private void levelRightVertTwoCorner(LevelFragment topLeftFragment, LevelFragment bottomLeftFragment, LevelFragment rightFragment, int x, int y)
        {
            if (rightFragment.type != LevelContent.Type.HalfVertical)
                throw new ArgumentException("Right fragment must be a vertical half", "rightFragment");
            if (topLeftFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("Both left fragments must be corners", "topLeftFragment");
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("Both left fragments must be corners", "bottomLeftFragment");
            initializeLevel(x, y);

            setFragmentIntoLevel(topLeftFragment, FragmentPosition.TopLeftCorner);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(rightFragment, FragmentPosition.RightHalf);

            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #16
0
        // Create level from full fragment
        // _ _
        //|   |
        //|_ _|
        private void levelFull(LevelFragment fullFragment, int x, int y)
        {
            //initialize separately from fragmented levels because making a full level is simpler
            pathfinding = new AStarPathfinding(GRID_SIZE, GRID_SIZE);
            xPos = x;
            yPos = y;
            alive = true;

            levelOverlayTexture = new Texture2D(RetroGame.graphicsDevice, TEX_SIZE, TEX_SIZE);
            Color[] data = new Color[TEX_SIZE * TEX_SIZE];
            fragmentGrid[0, 0] = fullFragment;   fragmentGrid[0, 1] = fullFragment;
            fragmentGrid[1, 0] = fullFragment;   fragmentGrid[1, 1] = fullFragment;

            grid = (LevelContent.LevelTile[,])fullFragment.grid.Clone();
            grid = new LevelContent.LevelTile[GRID_SIZE, GRID_SIZE];
            for (int i = 0; i < GRID_SIZE; i++)
                for (int j = 0; j < GRID_SIZE; j++)
                {
                    grid[i, j] = fullFragment.grid[i, j]; // cut off last row and column of fragment
                }

            collectableLocations = fullFragment.collectableLocations;
            enemyLocations = fullFragment.enemyLocations;
            prisonerLocations = fullFragment.prisonerLocations;
            powerupLocations = fullFragment.powerupLocations;

            finalizeLevel();
        }
Exemple #17
0
        public virtual void Draw(SpriteBatch spriteBatch)
        {
            Vector2 baseOffset = new Vector2(xPos * Level.TEX_SIZE, yPos * Level.TEX_SIZE);

            bool[,] fragmentAlreadyDrawn = new bool[2, 2];
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    Vector2       fragmentOffset = new Vector2(i * Level.TILE_SIZE * (LevelContent.LEVEL_SIZE_HALF - 1), j * Level.TILE_SIZE * (LevelContent.LEVEL_SIZE_HALF - 1));
                    LevelFragment fragment       = fragmentGrid[i, j];
                    if (!fragmentAlreadyDrawn[i, j])
                    {
                        fragment.Draw(spriteBatch, baseOffset + fragmentOffset);
                        switch (fragment.type)
                        {
                        case LevelContent.Type.Full:
                            fragmentAlreadyDrawn[0, 0] = fragmentAlreadyDrawn[0, 1] = fragmentAlreadyDrawn[1, 0] = fragmentAlreadyDrawn[1, 1] = true;
                            break;

                        case LevelContent.Type.HalfHorizontal:
                            fragmentAlreadyDrawn[0, j] = fragmentAlreadyDrawn[1, j] = true;
                            break;

                        case LevelContent.Type.HalfVertical:
                            fragmentAlreadyDrawn[i, 0] = fragmentAlreadyDrawn[i, 1] = true;
                            break;

                        case LevelContent.Type.Corner:
                            fragmentAlreadyDrawn[i, j] = true;
                            break;
                        }
                    }
                }
            }
            //Draw border walls
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    int tileX = 0, tileY = 0;
                    if (borderCornerColors[i, j] != null)
                    {
                        tileX = i * (BORDER_WALL_LENGTH + 1);
                        tileY = j * (BORDER_WALL_LENGTH + 1);
                        spriteBatch.Draw(texWall, baseOffset + new Vector2(tileX * TILE_SIZE, tileY * TILE_SIZE), null, borderCornerColors[i, j].Value, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1);
                    }
                    if (borderHorizColors[i, j] != null)
                    {
                        tileX = i * (BORDER_WALL_LENGTH + 1) + 1;
                        tileY = j * (BORDER_WALL_LENGTH + 1);
                        spriteBatch.Draw(texWallHoriz, baseOffset + new Vector2(tileX * TILE_SIZE, tileY * TILE_SIZE), null, borderHorizColors[i, j].Value, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1);
                    }
                    if (borderVertColors[i, j] != null)
                    {
                        tileX = i * (BORDER_WALL_LENGTH + 1);
                        tileY = j * (BORDER_WALL_LENGTH + 1) + 1;
                        spriteBatch.Draw(texWallVert, baseOffset + new Vector2(tileX * TILE_SIZE, tileY * TILE_SIZE), null, borderVertColors[i, j].Value, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1);
                    }
                }
            }
            //Draw overlay last for drilled walls and such
            spriteBatch.Draw(levelOverlayTexture, baseOffset, null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 1);

            foreach (Collectable c in collectables)
            {
                if (c != null)
                {
                    c.Draw(spriteBatch);
                }
            }
            foreach (Enemy enemy in enemies)
            {
                enemy.Draw(spriteBatch);
            }
            foreach (Prisoner p in prisoners)
            {
                p.Draw(spriteBatch);
            }
            foreach (PowerupIcon p in powerups)
            {
                p.Draw(spriteBatch);
            }
        }
Exemple #18
0
 public void createSpecificLevelAt(LevelFragment fullLevelFragment, int xPos, int yPos)
 {
     if (fullLevelFragment.type != LevelContent.Type.Full)
         throw new ArgumentException("Creating a specific level requires a full level fragment", "fullLevelFragment");
     levels[xPos, yPos] = new Level(this, fullLevelFragment, xPos, yPos);
     currentLevels = null; // make the CurrentLevels list be recalculated
 }
Exemple #19
0
 public Level(LevelManager levelManager, LevelFragment fullLevelFragment, int x, int y)
 {
     this.levelManager = levelManager;
     levelFull(fullLevelFragment, x, y);
 }
Exemple #20
0
        // Helper function to set parts of the level
        private void setFragmentIntoLevel(LevelFragment fragment, FragmentPosition position)
        {
            int texWidth        = fragment.levelTexture.Width;
            int texHeight       = fragment.levelTexture.Height;
            int gridWidth       = fragment.grid.GetLength(0);
            int gridHeight      = fragment.grid.GetLength(1);
            int texStartWidth   = 0;
            int texStartHeight  = 0;
            int gridStartWidth  = 0;
            int gridStartHeight = 0;

            switch (position)
            {
            case FragmentPosition.LeftHalf:
            case FragmentPosition.TopHalf:
                texStartWidth   = 0;
                texStartHeight  = 0;
                gridStartWidth  = 0;
                gridStartHeight = 0;
                break;

            case FragmentPosition.TopLeftCorner:
                texStartWidth   = 0;
                texStartHeight  = 0;
                gridStartWidth  = 0;
                gridStartHeight = 0;
                break;

            case FragmentPosition.RightHalf:
            case FragmentPosition.TopRightCorner:
                texStartWidth   = texWidth + TILE_SIZE;
                texStartHeight  = 0;
                gridStartWidth  = gridWidth - 1;
                gridStartHeight = 0;
                break;

            case FragmentPosition.BottomHalf:
            case FragmentPosition.BottomLeftCorner:
                texStartWidth   = 0;
                texStartHeight  = texHeight + TILE_SIZE;
                gridStartWidth  = 0;
                gridStartHeight = gridHeight - 1;
                break;

            case FragmentPosition.BottomRightCorner:
                texStartWidth   = texWidth + TILE_SIZE;
                texStartHeight  = texHeight + TILE_SIZE;
                gridStartWidth  = gridWidth - 1;
                gridStartHeight = gridHeight - 1;
                break;
            }
            //cut off last row/column if necessary
            switch (position)
            {
            case FragmentPosition.LeftHalf:
            case FragmentPosition.BottomLeftCorner:
                gridHeight--;
                break;

            case FragmentPosition.TopHalf:
            case FragmentPosition.TopRightCorner:
                gridWidth--;
                break;

            case FragmentPosition.RightHalf:
            case FragmentPosition.BottomHalf:
            case FragmentPosition.BottomRightCorner:
                gridWidth--;
                gridHeight--;
                break;
            }

            //color grid
            switch (position)
            {
            case FragmentPosition.LeftHalf:
                fragmentGrid[0, 0] = fragment;
                fragmentGrid[0, 1] = fragment;
                break;

            case FragmentPosition.RightHalf:
                fragmentGrid[1, 0] = fragment;
                fragmentGrid[1, 1] = fragment;
                break;

            case FragmentPosition.TopHalf:
                fragmentGrid[0, 0] = fragment;
                fragmentGrid[1, 0] = fragment;
                break;

            case FragmentPosition.BottomHalf:
                fragmentGrid[0, 1] = fragment;
                fragmentGrid[1, 1] = fragment;
                break;

            case FragmentPosition.TopLeftCorner:
                fragmentGrid[0, 0] = fragment;
                break;

            case FragmentPosition.TopRightCorner:
                fragmentGrid[1, 0] = fragment;
                break;

            case FragmentPosition.BottomLeftCorner:
                fragmentGrid[0, 1] = fragment;
                break;

            case FragmentPosition.BottomRightCorner:
                fragmentGrid[1, 1] = fragment;
                break;
            }
            //level grid
            grid.setDataRectangle <LevelContent.LevelTile>(new Rectangle(gridStartWidth, gridStartHeight, gridWidth, gridHeight), fragment.grid);
            //locations
            collectableLocations.AddRange(fragment.getCollectableLocations(position));
            enemyLocations.AddRange(fragment.getEnemyLocations(position));
            prisonerLocations.AddRange(fragment.getPrisonerLocations(position));
            powerupLocations.AddRange(fragment.getPowerupLocations(position));
        }
Exemple #21
0
 public Level(LevelManager levelManager, LevelFragment fullLevelFragment, int x, int y)
 {
     this.levelManager = levelManager;
     levelFull(fullLevelFragment, x, y);
 }
Exemple #22
0
        // _ _
        //|_|_|
        //|_|_|
        private void levelFourCorner(LevelFragment topLeftFragment, LevelFragment topRightFragment, LevelFragment bottomLeftFragment, LevelFragment bottomRightFragment, int x, int y)
        {
            if (topLeftFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("All fragments must be corners", "topLeftFragment");
            if (topRightFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("All fragments must be corners", "topRightFragment");
            if (bottomLeftFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("All fragments must be corners", "bottomLeftFragment");
            if (bottomRightFragment.type != LevelContent.Type.Corner)
                throw new ArgumentException("All fragments must be corners", "bottomRightFragment");
            initializeLevel(x, y);

            setFragmentIntoLevel(topLeftFragment, FragmentPosition.TopLeftCorner);
            setFragmentIntoLevel(topRightFragment, FragmentPosition.TopRightCorner);
            setFragmentIntoLevel(bottomLeftFragment, FragmentPosition.BottomLeftCorner);
            setFragmentIntoLevel(bottomRightFragment, FragmentPosition.BottomRightCorner);

            setWallIntoLevel(BorderWall.Horiz, 0, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 0);
            setWallIntoLevel(BorderWall.Single, 1, 1);
            setWallIntoLevel(BorderWall.Horiz, 1, 1);
            setWallIntoLevel(BorderWall.Vert, 1, 1);

            finalizeLevel();
        }
Exemple #23
0
 public void Initialize(int numPlayers, bool createNewHeroes, LevelFragment fullIntroLevelFragment, Point startingLevel)
 {
     if (numPlayers <= 0 || numPlayers > RetroGame.MAX_PLAYERS)
         throw new ArgumentOutOfRangeException("numPlayers", "Number of players must be between 1 and " + RetroGame.MAX_PLAYERS);
     if (fullIntroLevelFragment.type != LevelContent.Type.Full)
         throw new ArgumentException("LevelManager must be initialized with a Full LevelFragment", "fullIntroLevelFragment");
     if (createNewHeroes){
         heroes = new Hero[numPlayers];
         for (int i = 0; i < heroes.Length; i++)
         {
             heroes[i] = new Hero((PlayerIndex)Enum.Parse(typeof(PlayerIndex), i.ToString()));
             heroes[i].Initialize();
         }
     }
     createSpecificLevelAt(fullIntroLevelFragment, startingLevel.X, startingLevel.Y);
     if (fullIntroLevelFragment.type == LevelContent.Type.Full)
     {
         for(int i = 0; i < numPlayers; i++)
         {
             for (int j = 0; j < fullIntroLevelFragment.specialTiles[i].Length; j++)
             {
                 if (fullIntroLevelFragment.specialTiles[i][j] != null)
                     levels[startingLevel.X, startingLevel.Y].powerups.Add(newPowerup(Powerups.SPECIAL_INTRO_POWERUPS[j],
                                                             fullIntroLevelFragment.specialTiles[i][j][0], fullIntroLevelFragment.specialTiles[i][j][1],
                                                             levels[startingLevel.X, startingLevel.Y]));
             }
             if (fullIntroLevelFragment.heroTiles[0] != null && heroes.Length >= 1)
                 heroes[i].position = new Vector2(Level.TEX_SIZE * startingLevel.X +
                                                  (Level.TILE_SIZE * (fullIntroLevelFragment.heroTiles[i][0] + 0.5f)),
                                                  Level.TEX_SIZE * startingLevel.Y +
                                                  (Level.TILE_SIZE * (fullIntroLevelFragment.heroTiles[i][1] + 0.5f)));
         }
     }
     foreach(Hero hero in heroes)
     {
         hero.updateCurrentLevelAndTile();
     }
     SetCameraMode(CameraMode.Arena);
 }
Exemple #24
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            EXECUTABLE_ROOT_DIRECTORY = Path.GetDirectoryName(Application.ExecutablePath);

            //create graphics ojects
            graphicsDevice = GraphicsDevice;
            spriteBatchHUD = new SpriteBatch(GraphicsDevice);

            //load sprites automatically so you don't need to put in a new line every time you add a new sprite
            TextureManager.LoadSprites(Content);

            //load screens
            EscapeScreen = new EscapeScreen();
            AddScreen(EscapeScreen, true);
            EscapeScreen.textureRandom = Content.Load<Texture2D>("Textures\\random");
            Powerups.LoadContent(Content);
            AddScreen(new StartScreen(getHeroes()[0].bindings), true);

            HUD.LoadContent(Content);

            FONT_DEBUG = Content.Load<SpriteFont>("Fonts\\debug");
            FONT_PIXEL_SMALL = Content.Load<SpriteFont>("Fonts\\pixel23"); //http://www.dafont.com/victors-pixel-font.font
            FONT_PIXEL_LARGE = Content.Load<SpriteFont>("Fonts\\pixel48");
            FONT_PIXEL_HUGE = Content.Load<SpriteFont>("Fonts\\pixel98");
            FONT_HUD_KEYS = Content.Load<SpriteFont>("Fonts\\keys36"); /* http://www.fontspace.com/flop-design/keymode-alphabet */
            FONT_HUD_XBOX = Content.Load<SpriteFont>("Fonts\\xbox32"); /* http://sinnix.net/downloads/?did=2 XNA Button Pack 3 - Jeff Jenkins (@Sinnix) */

            //load audio
            SoundManager.LoadContent(Content);
            SoundManager.SetMusicVolume(0);

            //misc loads/inits
            Highscores.Initialize();
            RiotGuardWall.Initialize();
            LevelManager.Load(GraphicsDevice);

            //load effects
            Effects.LoadContent(Content);

            //load levels
            Level.Load(Content);
            FileInfo[] filePaths = new DirectoryInfo(Content.RootDirectory + "\\Levels").GetFiles("*.*");
            foreach (FileInfo file in filePaths)
            {
                /*IF YOU ARE GETTING A CONTENTLOADEXCEPTION HERE, MAKE SURE TO SET THE CONTENT PROCESS OF YOUR LEVEL TO "Level Processor"*/
                LevelContent content = Content.Load<LevelContent>("Levels\\" + file.Name.Split('.')[0]);
                Dictionary<string, LevelFragment> levelFragmentsForCurrentTypeOfLevel = null;
                List<LevelFragment> testFragments = new List<LevelFragment>();
                switch (content.type)
                {
                    case LevelContent.Type.Full:
                        levelFragmentsForCurrentTypeOfLevel = levelFragmentsFull;
                        testFragments = testFragmentsFull;
                        break;
                    case LevelContent.Type.HalfHorizontal:
                        levelFragmentsForCurrentTypeOfLevel = levelFragmentsHalfHorizontal;
                        testFragments = testFragmentsHalfHorizontal;
                        break;
                    case LevelContent.Type.HalfVertical:
                        levelFragmentsForCurrentTypeOfLevel = levelFragmentsHalfVertical;
                        testFragments = testFragmentsHalfVertical;
                        break;
                    case LevelContent.Type.Corner:
                        levelFragmentsForCurrentTypeOfLevel = levelFragmentsCorner;
                        testFragments = testFragmentsCorner;
                        break;
                }
                LEVEL_COLORS[content.name] = content.color;
                if (content.color == Color.White)
                    Console.Out.WriteLine(content.name + " = white");
                if (!(content.name.Contains("intro") || content.name.Contains("store")))
                {
                    levelFragmentsForCurrentTypeOfLevel[content.name] = new LevelFragment(content, GraphicsDevice);
                }
                else if (content.name.Contains("introSingle"))
                    introSingleLevelFragment = new LevelFragment(content, GraphicsDevice);
                else if (content.name.Contains("introCoop"))
                    introCoopLevelFragment = new LevelFragment(content, GraphicsDevice);
                else if (content.name.Contains("store"))
                    StoreLevelFragment = new LevelFragment(content, GraphicsDevice);

                if (LEVELS_TO_TEST.Contains(content.name))
                    testFragments.Add(levelFragmentsForCurrentTypeOfLevel[content.name]);
            }

            //configuration file
            LoadConfig();
            if (IsFirstTimePlaying)
                ((StartScreen)TopScreen).enableDrawWASDInstructions = true;
            SaveConfig();

            Reset();
        }