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);
    }