private void UpdateObjects() { requestedTransitionDirection = -1; // Update entities. entityCount = entities.Count; for (int i = 0; i < entities.Count; i++) { if (entities[i].IsAlive && entities[i].IsInRoom && i < entityCount) { if (GameControl.UpdateRoom) { entities[i].Update(); } if (GameControl.AnimateRoom) { entities[i].UpdateGraphics(); } if (requestedTransitionDirection >= 0) { break; } } } // Remove destroyed entities. for (int i = 0; i < entities.Count; i++) { if (!entities[i].IsAlive || !entities[i].IsInRoom) { entities.RemoveAt(i--); } } //if (requestedTransitionDirection >= 0) // return; // Update tiles. tileManager.UpdateTiles(); // Update the event tiles. for (int i = 0; i < eventTiles.Count; i++) { eventTiles[i].Update(); } // Process Physics. if (GameControl.UpdateRoom) { roomPhysics.ProcessPhysics(); Player.CheckRoomTransitions(); } bool nextAllMonstersDead = AllMonstersDead(); if (nextAllMonstersDead && !allMonstersDead) { GameControl.FireEvent(room, "event_all_monsters_dead"); } allMonstersDead = nextAllMonstersDead; }
public void BeginRoom(Room room) { this.room = room; this.roomLocation = room.Location; this.dungeon = room.Dungeon; this.isSideScrolling = room.Zone.IsSideScrolling; // Discover the room. room.IsDiscovered = true; room.Level.IsDiscovered = true; // Clear event tiles. eventTiles.Clear(); // Clear all entities from the old room (except for the player). entities.Clear(); if (Player != null) { Player.Initialize(this); Player.EntityIndex = 0; entities.Add(Player); } // Create the tile grid. tileManager.Initialize(room); for (int x = 0; x < room.Width; x++) { for (int y = 0; y < room.Height; y++) { for (int i = 0; i < room.LayerCount; i++) { TileDataInstance data = room.TileData[x, y, i]; if (data != null && data.IsAtLocation(x, y) && data.ModifiedProperties.GetBoolean("enabled", true)) { // Place the tile. Tile tile = Tile.CreateTile(data); PlaceTile(tile, x, y, i, false); } } } } // Create the event tiles. eventTiles.Capacity = room.EventData.Count; for (int i = 0; i < room.EventData.Count; i++) { EventTileDataInstance data = room.EventData[i]; if (data.Properties.GetBoolean("enabled", true)) { EventTile eventTile = EventTile.CreateEvent(data); eventTiles.Add(eventTile); } } // Initialize the tiles. tileManager.InitializeTiles(); // Initialize the event tiles. for (int i = 0; i < eventTiles.Count; i++) { eventTiles[i].Initialize(this); } tileManager.PostInitializeTiles(); entityCount = entities.Count; viewControl.Bounds = RoomBounds; viewControl.ViewSize = GameSettings.VIEW_SIZE; // Fire the RoomStart event. GameControl.FireEvent(room, "event_room_start"); allMonstersDead = false; }