Exemple #1
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 #2
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));
        }