bool PossibleRooms::IsReplaceable(int32_t roomId ) const { auto foundSelf = std::find_if( mUniqueRoomIds.begin(), mUniqueRoomIds.end(), [&]( PossibleRoom const& room ) { return room.mRoomId == roomId; } ); if (foundSelf != mUniqueRoomIds.end() && foundSelf->mIsBase) { return true; } static auto& mRoomRepo = RoomRepo::Get(); auto const& roomDesc = mRoomRepo( roomId ).GetRoomDesc(); auto found = std::find_if( mUniqueRoomIds.begin(), mUniqueRoomIds.end(), [&]( PossibleRoom const& room ) { return roomDesc.FitsInto( mRoomRepo( room.mRoomId ).GetRoomDesc(), RoomDesc::Layout ) && room.mIsBase; } ); return found != mUniqueRoomIds.end(); }
PossibleRooms::PossibleRoomIds_t PossibleRooms::GetRoomIdsFiltered( RoomDesc const& roomDesc, int32_t flags, bool shuffled /*= true*/ ) const { PossibleRoomIds_t r; PossibleRoomIds_t roomIds; if (shuffled) { roomIds = mRoomIds; std::shuffle( roomIds.begin(), roomIds.end(), mRand ); roomIds = MakeRoomeIdsUnique( roomIds ); } else { roomIds = mUniqueRoomIds; } static auto& mRoomRepo = RoomRepo::Get(); for (auto&& roomId : roomIds) { if (roomDesc.FitsInto(mRoomRepo( roomId.mRoomId ).GetRoomDesc(), flags)) { r.push_back( roomId ); } } return r; }
PossibleRooms::PossibleRoomIds_t PossibleRooms::GetRoomIdsByProperty( RoomProperty::Type prop, bool shuffled /*= true */ ) const { PossibleRoomIds_t r; PossibleRoomIds_t roomIds; if (shuffled) { roomIds = mRoomIds; std::shuffle( roomIds.begin(), roomIds.end(), mRand ); roomIds = MakeRoomeIdsUnique( roomIds ); } else { roomIds = mUniqueRoomIds; } static auto& mRoomRepo = RoomRepo::Get(); for (auto&& roomId : roomIds) { if (mRoomRepo( roomId.mRoomId ).GetRoomDesc().HasProperty( prop )) { r.push_back( roomId ); } } return r; }
void GeneratorData::ReplaceRoom( int32_t roomIndex, int32_t roomId ) { //auto& gRoomDesc = mGRoomDescs[roomIndex]; static auto& mRoomRepo = RoomRepo::Get(); GetRoomDesc(roomIndex).SetRoom(&mRoomRepo( roomId ) ); }