diff --git a/Src/Server/Abstract.hpp b/Src/Server/Abstract.hpp index 5253a34..31d5048 100644 --- a/Src/Server/Abstract.hpp +++ b/Src/Server/Abstract.hpp @@ -26,6 +26,7 @@ using PortalId_t = uint16_t; // В одном регионе может быть максимум 2^16 сущностей. Клиенту адресуются сущности в формате <позиция региона>+ // И если сущность перешла из одного региона в другой адресация сохраняется using EntityId_t = uint16_t; +using WorldId_t = ResourceId_t; using TextureId_t = ResourceId_t; using ModelId_t = ResourceId_t; using SoundId_t = ResourceId_t; diff --git a/Src/Server/RemoteClient.hpp b/Src/Server/RemoteClient.hpp index 4ccdd66..c470295 100644 --- a/Src/Server/RemoteClient.hpp +++ b/Src/Server/RemoteClient.hpp @@ -165,42 +165,27 @@ class RemoteClient { bool IsConnected = true, IsGoingShutdown = false; struct { - std::bitset<(1 << sizeof(EntityId_c)*8) - 1> UsedEntityIdC; // 1 - идентификатор свободен, 0 - занят + // Счётчики использования базовых ресурсов высшими объектами std::map TextureUses; - std::map ModelUses; std::map SoundUses; + // Может использовать текстуры + std::map ModelUses; + + // Будут использовать в своих определениях текстуры, звуки, модели std::map VoxelDefUses; std::map NodeDefUses; std::map EntityDefUses; + std::map WorldDefUses; + + // Чанки используют воксели, ноды, миры + // Сущности используют текстуры, модели, звуки, миры - std::unordered_map STC_Textures; - std::unordered_map STC_Models; - //std::unordered_map STC_Sounds; - std::bitset<(1 << sizeof(VoxelId_c)*8) - 1> UsedVoxelIdC; // 1 - идентификатор свободен, 0 - занят - std::unordered_map STC_Voxels; - std::bitset<(1 << sizeof(NodeId_c)*8) - 1> UsedNodeIdC; // 1 - идентификатор свободен, 0 - занят - std::unordered_map STC_Nodes; - std::bitset<(1 << sizeof(VoxelId_c)*8) - 1> UsedWorldIdC; // 1 - идентификатор свободен, 0 - занят - std::unordered_map STC_Worlds; } Remap; struct { - //std::unordered_map EntityTextures; } BinaryResourceUsedIds; - // Вести учёт использования идентификаторов - struct { - // Использованные идентификаторы вокселей чанками - std::unordered_map>> Voxels; - // Количество зависимостей к ресурсу - std::unordered_map VoxelsUsedCount; - // Использованные идентификаторы нод чанками - std::unordered_map>> Nodes; - // Количество зависимостей к ресурсу - std::unordered_map NodesUsedCount; - } ChunkUsedIds; - struct { } WorldUsedIds; @@ -239,6 +224,10 @@ public: void prepareDefMediaStream(MediaStreamId_t modelId, void* mediaStream); // Отслеживаемое игроком использование контента + // Maybe? + // Текущий список вокселей, определения нод, которые больше не используются в чанке, и определения нод, которые теперь используются + //void prepareChunkUpdate_Voxels(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::vector &voxels, const std::vector &noLongerInUseDefs, const std::vector &nowUsed); + void prepareChunkUpdate_Voxels(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::vector &voxels); void prepareChunkUpdate_Nodes(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::unordered_map &nodes); void prepareChunkUpdate_LightPrism(WorldId_t worldId, Pos::GlobalChunk chunkPos, const LightPrism *lights); @@ -251,6 +240,10 @@ public: void prepareEntityUpdate(WorldId_t worldId, Pos::GlobalRegion regionPos, EntityId_t entityId, const Entity *entity); void prepareEntityRemove(WorldId_t worldId, Pos::GlobalRegion regionPos, EntityId_t entityId); + void prepareWorldNew(DefWorldId_t Id, void* world); + void prepareWorldUpdate(DefWorldId_t defWorldId, void* world); + void prepareWorldRemove(DefWorldId_t defWorldId); + void preparePortalNew(PortalId_t portalId, void* portal); void preparePortalUpdate(PortalId_t portalId, void* portal); void preparePortalRemove(PortalId_t portalId);