void GameLevel::update(bool noclip) { for (size_t i = 0; i < mActors.size(); i++) { Actor* actor = mActors[i]; actorMapRemove(actor); actor->update(noclip); actorMapInsert(actor); } actorMapRefresh(); for (auto& p : mItemMap->mItems) p.second.update(); }
GameLevel::GameLevel(World& world, FASaveGame::GameLoader& loader) : mWorld(world), mLevel(Level::Level(loader)), mLevelIndex(loader.load<int32_t>()), mItemMap(new ItemMap(loader, this)) { release_assert(loader.currentlyLoadingLevel == nullptr); loader.currentlyLoadingLevel = this; uint32_t actorsSize = loader.load<uint32_t>(); mActors.reserve(actorsSize); for (uint32_t i = 0; i < actorsSize; i++) { std::string actorTypeId = loader.load<std::string>(); Actor* actor = static_cast<Actor*>(mWorld.mObjectIdMapper.construct(actorTypeId, loader)); mActors.push_back(actor); } release_assert(loader.currentlyLoadingLevel == this); loader.currentlyLoadingLevel = nullptr; actorMapRefresh(); }