示例#1
0
 public void Update(float dTime, PlayerCharacter hero, List<Bullet> projectiles)
 {
     for (int i = projectiles.Count - 1; i >= 0; i--) {
         int xTile = (int)projectiles[i].Position.X / Game.TILE_W;
         int yTile = (int)projectiles[i].Position.Y / Game.TILE_H;
         if (xTile >= this[0].Length || xTile < 0) {
             projectiles.RemoveAt(i);
         }
         else if (yTile >= this.Length || yTile < 0) {
             projectiles.RemoveAt(i);
         }
         else if (!this[yTile][xTile].Walkable) {
             projectiles.RemoveAt(i);
         }
     }
     for (int i = enemies.Count - 1; i >= 0; i--) {
         enemies[i].Update(dTime);
         Rectangle intersection = Intersections.Rect(hero.Rect, enemies[i].Rect);
         if (intersection.Width * intersection.Height > 0) {
             Game.Instance.GameOver = true;
         }
         for (int j = projectiles.Count - 1; j >= 0; j--) {
             intersection = Intersections.Rect(enemies[i].Rect, projectiles[j].Rect);
             if (intersection.Width * intersection.Height > 0) {
                 enemies[i].Destroy();
                 enemies.RemoveAt(i);
                 projectiles.RemoveAt(j);
                 break;
             }
         }
     }
     for (int i = items.Count - 1; i >= 0; i--) {
         Rectangle intersection = Intersections.Rect(items[i].Rect, hero.Rect);
         if (intersection.Height * intersection.Width > 0) {
             Game.Instance.Score += items[i].Value;
             items[i].Destroy();
             items.RemoveAt(i);
         }
     }
 }
示例#2
0
        public void Initialize(OpenTK.GameWindow window)
        {
            Window = window;
            //window.ClientSize = new Size(room1Layout[0].Length * tileSize, room1Layout.Length * tileSize);
            //Window.ClientSize = new Size(8 * tileSize, 6 * tileSize);
            Window.ClientSize = new Size(990, 550);
            projectiles = new List<Bullet>();
            Sprite = TextureManager.Instance.LoadTexture(spriteSheets);
            TextureManager.Instance.UseNearestFiltering = true;

            GraphicsManager.Instance.SetDepthRange(0, 21 * 21);

            hero = new PlayerCharacter(heroSheet, new Point(spawnTile.X * TILE_W, spawnTile.Y * TILE_H), 20);
            room1 = new Map(room1Layout, spriteSheets, spriteSources, 2, 0);
            room2 = new Map(room2Layout, spriteSheets, spriteSources, 0, 2);
            room1[4][7].MakeDoor(room2, new Point(1, 1));
            room2[1][0].MakeDoor(room1, new Point(6, 4));
            currentMap = room1;

            room1.AddEnemy(npcSheet, new Point(6 * TILE_W, 1 * TILE_H), true);
            room2.AddEnemy(npcSheet, new Point(1 * TILE_W, 4 * TILE_H), false);
            room1.AddItem(spriteSheets, new Rectangle(20, 198, 44, 49), 10, new Point(3 * TILE_W, 2 * TILE_H + 7));
            room1.AddItem(spriteSheets, new Rectangle(20, 198, 44, 49), 20, new Point(5 * TILE_W, 4 * TILE_H + 7));
            room2.AddItem(spriteSheets, new Rectangle(20, 198, 44, 49), 30, new Point(4 * TILE_W, 2 * TILE_H + 7));
        }
示例#3
0
        public Map ResolveDoors(PlayerCharacter hero)
        {
            Map result = this;
            for (int row = 0; row < tileMap.Length; row++) {
                for (int col = 0; col < tileMap[row].Length; col++) {
                    if (tileMap[row][col].IsDoor) {
                        //get doors bouding rectangle
                        Rectangle doorRect = new Rectangle(col * Game.TILE_W, row * Game.TILE_W, Game.TILE_W, Game.TILE_H);
                        //get a small rectangle in center of the player
                        Rectangle playerCenter = new Rectangle((int)hero.Center.X - 2, (int)hero.Center.Y - 2, 4, 4);

                        //look for an intersection
                        Rectangle intersection = Intersections.Rect(doorRect, playerCenter);
                        if (intersection.Width * intersection.Height > 0) {
                            result = tileMap[row][col].DoorTarget;
                            hero.Position.X = tileMap[row][col].DoorLocation.X * Game.TILE_W;
                            hero.Position.Y = tileMap[row][col].DoorLocation.Y * Game.TILE_H;
                        }
                    }
                }
            }
            return result;
        }