コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }