예제 #1
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        public void drawTiles(Camera cam, SpriteBatch sb)
        {
            int z = 1;

            for (int y = cam.getCameraY(0); y < cam.getCameraY(screenHeight + 16); y++)
            {
                for (int x = cam.getCameraX(-16); x < cam.getCameraX(screenWidth + 16); x++)
                {
                    if (x < 0 || y < 0 ||  x >= levelTileWidth || y >= levelTileHeight) {
                        continue;
                    }

                    if (tileLayers[z, y, x] != null && tileLayers[z, y, x].render)
                    {
                        switch (tileLayers[1, y, x].tileType)
                        {
                            case TileType.Dirt:
                                sb.Draw(tileDirt, tileLayers[z, y, x].position - cam.position, new Rectangle(16 * (int)tileLayers[z, y, x].tileOrientation, 16 * (int)tileLayers[z, y, x].damage, 16, 16), Color.White);
                                break;
                            case TileType.Decoration:
                                sb.Draw(tileGrassTop, tileLayers[z, y, x].position - cam.position, new Rectangle(16 * tileLayers[z, y, x].decorationValue, 0, 16, 16), Color.White);
                                break;
                            case TileType.Sand:
                                sb.Draw(sandTex, tileLayers[z, y, x].position - cam.position, new Rectangle(16 * (int)tileLayers[z, y, x].tileOrientation, 0, 16, 16), Color.White);
                                break;
                            case TileType.Metal:
                                sb.Draw(tileMetal, tileLayers[z, y, x].position - cam.position, new Rectangle(16 * (int)tileLayers[z, y, x].tileOrientation, 16 * (int)tileLayers[z, y, x].damage, 16, 16), Color.White);
                                break;
                        }

                        sb.Draw(darkTex, tileLayers[z, y, x].position - cam.position, new Color(0, 0, 0, (1.0f - tileLayers[z, y, x].lightValue)));
                    }
                }
            }
        }
예제 #2
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        public void calculateTiles(Camera cam, Player player, bool initialLoad = false)
        {
            for (int y = 0; y < currentLevel.Height; y++)
            {
                for (int x = 0; x < currentLevel.Width; x++)
                {
                    tileLayers[1, y, x].calculateOrientation(ref tileLayers);

                }
            }
            tileLayers[1, 0, 0].updateLight(ref tileLayers, player, initialLoad);
        }
예제 #3
0
파일: Game.cs 프로젝트: JohnAkerman/Graven
        public Game()
        {
            graphics = new GraphicsDeviceManager(this);
            graphics.PreferredBackBufferHeight = screenHeight;
            graphics.PreferredBackBufferWidth = screenWidth;
            graphics.IsFullScreen = false;
            graphics.ApplyChanges();

            Content.RootDirectory = "Content";
            Window.Title = "Graven v0.01";

            screenRectangle = new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight);

            level = new Level(screenHeight, screenWidth);
            layers = new Layer[1];
            camera = new Camera(new Vector2(0, 0));
            fpsCount = new FrameRateCounter();
        }
예제 #4
0
 public void drawDroplets(Camera cam, SpriteBatch sb)
 {
     for (int y = cam.getCameraY(0); y < cam.getCameraY(screenHeight); y++)
     {
         for (int x = cam.getCameraX(0); x < cam.getCameraX(screenWidth); x++)
         {
             if (x < levelWidth - 1 && x > 0 && y <= levelHeight - 1 && y > 0)
             {
                 if (droplets[y, x].topMost && droplets[y, x].waterSand)
                     droplets[y, x].Draw(cam.position, sb, ref waterSandTop);
                 else if (droplets[y, x].topMost && droplets[y, x].waterSand == false)
                     droplets[y, x].Draw(cam.position, sb, ref topMost);
                 else if (droplets[y, x].waterSand && droplets[y, x].topMost == false)
                     droplets[y, x].Draw(cam.position, sb, ref waterSand);
                 else
                     droplets[y, x].Draw(cam.position, sb, ref WaterDropTex);
             }
         }
     }
 }
예제 #5
0
 public void updateWater(Camera cam, ref Tile[,,] tiles, float totalElapsed)
 {
     if (pauseWater) return;
     for (int y = cam.getCameraY(0); y < cam.getCameraY(screenHeight); y++)
     {
         for (int x = cam.getCameraX(0); x < cam.getCameraX(screenWidth); x++)
         {
             if (x < levelWidth - 1 && x > 0 && y <= levelHeight - 1 && y > 0)
             {
                 droplets[y, x].Update(ref tiles, ref droplets, totalElapsed);
             }
         }
     }
 }
예제 #6
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        public void updateTiles(float elapsed, Camera cam)
        {
            for (int y = cam.getTileCoords("y"); y < screenTilesHeight - 1; y++)
            {
                for (int x = cam.getTileCoords("x"); x < screenTilesHeight - 1; x++)
                {
                    if (y > screenHeight || x > screenWidth) { continue; }

                    tileLayers[1, y, x].updateTile(ref tileLayers, elapsed, cam.position);
                }
            }
        }
예제 #7
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        /*    public void createLighting(Camera cam)
        {
            for (int y = 0; y < currentLevel.Height; y++)
            {
                for (int x = 0; x < currentLevel.Width; x++)
                {
                    if (x < 0 || y < 0 ||  x >= levelTileWidth || y >= levelTileHeight)
                        continue;

                    if (tileLayers[1, y, x] != null && tileLayers[1, y, x].render)
                    {
                        tileLayers[1, y, x].calculateOrientation(ref tileLayers);
                    }
                }
            }
        }*/
        /*    public void resetLightingCount(Camera cam)
        {
            for (int y = 0; y < currentLevel.Height; y++)
            {
                for (int x = 0; x < currentLevel.Width; x++)
                {
                    if (x < 0 || y < 0 || x >= levelTileWidth || y >= levelTileHeight)
                        continue;

                    if (tileLayers[1, y, x] != null && tileLayers[1, y, x].render)
                    {
                        tileLayers[1, y, x].lightingHits = 0;
                        tileLayers[1, y, x].lightValue = 0;
                    }
                }
            }
        }
        */
        public void setUpTile(string path, Player player, Camera cam)
        {
            Color[] levelData = new Color[currentLevel.Height * currentLevel.Width];

            levelWidth = currentLevel.Width * tileSize;
            levelHeight = currentLevel.Height * tileSize;
            levelTileWidth = currentLevel.Width;
            levelTileHeight = currentLevel.Height;

            player.totalWidth = levelTileWidth;
            player.totalHeight = levelTileHeight;

            tileLayers = new Tile[2, currentLevel.Height, currentLevel.Width];

            currentLevel.GetData<Color>(levelData);

            rand = new Random();

            int runningTotal = 0;

            for (int y = 0; y < currentLevel.Height; y++)
            {
                for (int x = 0; x < currentLevel.Width; x++)
                {
                    if (runningTotal >= levelData.Length)
                        break;

                    if (levelData[runningTotal] == Color.Lime)
                        tileLayers[1, y, x] = new Tile(TileType.Decoration, x, y, levelTileWidth, levelTileHeight, rand, 0);
                    else if (levelData[runningTotal] == Color.Blue)
                        tileLayers[1, y, x] = new Tile(TileType.Dirt, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Impassable);
                    else if (levelData[runningTotal] == Color.White)
                        tileLayers[1, y, x] = new Tile(TileType.Empty, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable);
                    else if (levelData[runningTotal] == Color.Yellow)
                        tileLayers[1, y, x] = new Tile(TileType.Sand, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Impassable);
                    else if (levelData[runningTotal] == new Color(204,204,204))
                        tileLayers[1, y, x] = new Tile(TileType.Decoration, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable, 1);
                    else if (levelData[runningTotal] == new Color(53, 34, 18)) // Tree Foot
                        tileLayers[1, y, x] = new Tile(TileType.Tree, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable, 0);
                    else if (levelData[runningTotal] == new Color(109, 69, 35)) // Tree Truck
                        tileLayers[1, y, x] = new Tile(TileType.Tree, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable, 1);
                    else if (levelData[runningTotal] == new Color(24, 100, 12)) // Tree Top
                        tileLayers[1, y, x] = new Tile(TileType.Tree, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable, 2);
                    else if (levelData[runningTotal] == new Color(119, 119, 119)) // Metal
                        tileLayers[1, y, x] = new Tile(TileType.Metal, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Impassable);
                    else if (levelData[runningTotal] == Color.Black) // Indestructable
                        tileLayers[1, y, x] = new Tile(TileType.Indestructable, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Impassable);
                    else if (levelData[runningTotal] == new Color(255, 0, 0)) // Player start
                    {
                        tileLayers[1, y, x] = new Tile(TileType.Empty, x, y, levelTileWidth, levelTileHeight, rand, TileCollision.Passable);
                        player.setPosition(x * tileSize, y * tileSize);
                    }

                    runningTotal++;
                }
            }

            calculateTiles(cam, player, true);
        }
예제 #8
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        public void setTileHealth(Camera camera, Player player)
        {
            int mouse_x = Mouse.GetState().X - 4;
            int mouse_y = Mouse.GetState().Y - 4;

            TileType tmpBlock;
            Vector2 delta;

            if (mouse_x > 0 && mouse_x < screenWidth && mouse_y > 0 && mouse_y < screenHeight)
            {
                int mouseX = (mouse_x + (int)camera.position.X) / 16;
                int mouseY = (mouse_y + (int)camera.position.Y) / 16;

                if (mouseY > levelHeight)
                    return;

                if (tileLayers[1, grabY(mouseY, -1), mouseX].tileType == TileType.Tree) { return; }

                tmpBlock = tileLayers[1, mouseY, mouseX].tileType;
                if (tileLayers[1,mouseY, mouseX].doDamage() == true)
                {
                    calculateTiles(camera, player);

                    delta = player.getMiddle() - tileLayers[1, mouseY, mouseX].getMiddle();

                    if (Math.Abs(delta.X) <= 32 && Math.Abs(delta.Y) <= 32) // Player in range collect block
                    {
                        if (tmpBlock == TileType.Dirt)
                            player.addInventory(1, Player.InventoryType.DirtTile);
                        else if (tmpBlock == TileType.Metal)
                            player.addInventory(1, Player.InventoryType.MetalTile);
                    }
                }
            }
        }
예제 #9
0
파일: Level.cs 프로젝트: JohnAkerman/Graven
        public bool setTile(TileType tileIn, Camera camera, Player player, int decoration = -1)
        {
            int mouse_x = Mouse.GetState().X - 4 + (int)camera.position.X;
            int mouse_y = Mouse.GetState().Y - 4 + (int)camera.position.Y;

            if (mouse_x > 0 && mouse_x < levelWidth && mouse_y > 0 && mouse_y < levelHeight)
            {
                if (tileLayers[1, mouse_y / 16, mouse_x / 16].tileType == TileType.Empty)
                {
                    tileLayers[1, mouse_y / 16, mouse_x / 16].tileType = tileIn;
                    tileLayers[1, mouse_y / 16, mouse_x / 16].decorationValue = decoration;
                    if (tileIn == TileType.Decoration || tileIn == TileType.Empty || tileIn == TileType.Tree)
                        tileLayers[1, mouse_y / 16, mouse_x / 16].tileCollision = TileCollision.Passable;
                    else
                        tileLayers[1, mouse_y / 16, mouse_x / 16].tileCollision = TileCollision.Impassable;

                   calculateTiles(camera, player);

                    return true;
                }
                else
                    return false;
            }
            else
                return false;
        }