public override void UndoEvent(GameWorldController gameWorldController) { RoomData currentRoom = gameWorldController.Model.CurrentGame.CurrentRoom; if (currentRoom.RoomKey.Equals(m_mobState.CurrentRoomKey)) { MobEntity mobEntity = gameWorldController.Model.GetMobEntity(m_mobState.mob_id); // Clean up the entity mobEntity.RemoveFromGameWorld(gameWorldController); // Remove the mob data from the current game state currentRoom.SetMobById(m_mobState.mob_id, null); } base.UndoEvent(gameWorldController); }
public void OnRoomLoaded(RoomKey roomKey) { RoomData currentRoom = m_gameWorldModel.GetRoomData(roomKey); // Get a list of all the characters that are in the same room as my character List <int> characterIDList = m_gameWorldModel.GetCharacterIDListInRoom(roomKey); // Remove any existing character List <int> allCharacterIds = new List <int>(m_gameWorldModel.GetCharacterEntityMap().Keys); foreach (int characterEntityId in allCharacterIds) { CharacterEntity characterEntity = m_gameWorldModel.GetCharacterEntity(characterEntityId); characterEntity.RemoveFromGameWorld(this); } // (Re)Create character entities for each character in the room foreach (int characterID in characterIDList) { CharacterEntity newCharacterEntity = new CharacterEntity(characterID); newCharacterEntity.AddToGameWorld(this); } // Remove any existing mobs List <int> allMobIds = new List <int>(m_gameWorldModel.GetMobEntityMap().Keys); foreach (int mobEntityId in allMobIds) { MobEntity mobEntity = m_gameWorldModel.GetMobEntity(mobEntityId); mobEntity.RemoveFromGameWorld(this); } // (Re)Create mob entities for each mob in the room foreach (MobData mobData in currentRoom.MobMap.Values) { MobEntity newMobEntity = new MobEntity(mobData.mob_id); newMobEntity.AddToGameWorld(this); } // Remove any existing energy tanks List <int> allEnergyTankIds = new List <int>(m_gameWorldModel.GetEnergyTankEntityMap().Keys); foreach (int energyTankId in allEnergyTankIds) { EnergyTankEntity energyTankEntity = m_gameWorldModel.GetEnergyTankEntity(energyTankId); energyTankEntity.RemoveFromGameWorld(this); } // (Re)Create energy tank entities for each energy tank in the room foreach (EnergyTankData energyTankData in currentRoom.EnergyTankMap.Values) { EnergyTankEntity newEnergyTankEntity = new EnergyTankEntity(energyTankData.energy_tank_id); newEnergyTankEntity.AddToGameWorld(this); } // generate all of the terrain tiles and static objects in the room gameWorldView.RebuildRoom(currentRoom); // Notify the overlay of a room reload m_contextOverlayController.OnRoomLoaded(currentRoom); }