This commit is contained in:
2025-02-07 11:02:14 +06:00
parent 43c669872b
commit ac9f30cd26
2 changed files with 18 additions and 24 deletions

View File

@@ -26,6 +26,7 @@ using PortalId_t = uint16_t;
// В одном регионе может быть максимум 2^16 сущностей. Клиенту адресуются сущности в формате <позиция региона>+<uint16_t> // В одном регионе может быть максимум 2^16 сущностей. Клиенту адресуются сущности в формате <позиция региона>+<uint16_t>
// И если сущность перешла из одного региона в другой адресация сохраняется // И если сущность перешла из одного региона в другой адресация сохраняется
using EntityId_t = uint16_t; using EntityId_t = uint16_t;
using WorldId_t = ResourceId_t;
using TextureId_t = ResourceId_t; using TextureId_t = ResourceId_t;
using ModelId_t = ResourceId_t; using ModelId_t = ResourceId_t;
using SoundId_t = ResourceId_t; using SoundId_t = ResourceId_t;

View File

@@ -165,42 +165,27 @@ class RemoteClient {
bool IsConnected = true, IsGoingShutdown = false; bool IsConnected = true, IsGoingShutdown = false;
struct { struct {
std::bitset<(1 << sizeof(EntityId_c)*8) - 1> UsedEntityIdC; // 1 - идентификатор свободен, 0 - занят // Счётчики использования базовых ресурсов высшими объектами
std::map<TextureId_t, uint32_t> TextureUses; std::map<TextureId_t, uint32_t> TextureUses;
std::map<ModelId_t, uint32_t> ModelUses;
std::map<SoundId_t, uint32_t> SoundUses; std::map<SoundId_t, uint32_t> SoundUses;
// Может использовать текстуры
std::map<ModelId_t, uint32_t> ModelUses;
// Будут использовать в своих определениях текстуры, звуки, модели
std::map<DefVoxelId_t, uint32_t> VoxelDefUses; std::map<DefVoxelId_t, uint32_t> VoxelDefUses;
std::map<DefNodeId_t, uint32_t> NodeDefUses; std::map<DefNodeId_t, uint32_t> NodeDefUses;
std::map<DefEntityId_t, uint32_t> EntityDefUses; std::map<DefEntityId_t, uint32_t> EntityDefUses;
std::map<DefWorldId_t, uint32_t> WorldDefUses;
// Чанки используют воксели, ноды, миры
// Сущности используют текстуры, модели, звуки, миры
std::unordered_map<TextureId_t, TextureId_c> STC_Textures;
std::unordered_map<ModelId_t, ModelId_c> STC_Models;
//std::unordered_map<SoundId_t, SoundId_c> STC_Sounds;
std::bitset<(1 << sizeof(VoxelId_c)*8) - 1> UsedVoxelIdC; // 1 - идентификатор свободен, 0 - занят
std::unordered_map<VoxelId_t, VoxelId_c> STC_Voxels;
std::bitset<(1 << sizeof(NodeId_c)*8) - 1> UsedNodeIdC; // 1 - идентификатор свободен, 0 - занят
std::unordered_map<NodeId_t, NodeId_c> STC_Nodes;
std::bitset<(1 << sizeof(VoxelId_c)*8) - 1> UsedWorldIdC; // 1 - идентификатор свободен, 0 - занят
std::unordered_map<WorldId_t, WorldId_c> STC_Worlds;
} Remap; } Remap;
struct { struct {
//std::unordered_map<EntityId_c, > EntityTextures;
} BinaryResourceUsedIds; } BinaryResourceUsedIds;
// Вести учёт использования идентификаторов
struct {
// Использованные идентификаторы вокселей чанками
std::unordered_map<WorldId_t, std::unordered_map<Pos::GlobalChunk, std::unordered_set<VoxelId_t>>> Voxels;
// Количество зависимостей к ресурсу
std::unordered_map<VoxelId_t, uint32_t> VoxelsUsedCount;
// Использованные идентификаторы нод чанками
std::unordered_map<WorldId_t, std::unordered_map<Pos::GlobalChunk, std::unordered_set<NodeId_c>>> Nodes;
// Количество зависимостей к ресурсу
std::unordered_map<NodeId_c, uint32_t> NodesUsedCount;
} ChunkUsedIds;
struct { struct {
} WorldUsedIds; } WorldUsedIds;
@@ -239,6 +224,10 @@ public:
void prepareDefMediaStream(MediaStreamId_t modelId, void* mediaStream); void prepareDefMediaStream(MediaStreamId_t modelId, void* mediaStream);
// Отслеживаемое игроком использование контента // Отслеживаемое игроком использование контента
// Maybe?
// Текущий список вокселей, определения нод, которые больше не используются в чанке, и определения нод, которые теперь используются
//void prepareChunkUpdate_Voxels(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::vector<VoxelCube> &voxels, const std::vector<DefVoxelId_t> &noLongerInUseDefs, const std::vector<DefVoxelId_t> &nowUsed);
void prepareChunkUpdate_Voxels(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::vector<VoxelCube> &voxels); void prepareChunkUpdate_Voxels(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::vector<VoxelCube> &voxels);
void prepareChunkUpdate_Nodes(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::unordered_map<Pos::Local16_u, Node> &nodes); void prepareChunkUpdate_Nodes(WorldId_t worldId, Pos::GlobalChunk chunkPos, const std::unordered_map<Pos::Local16_u, Node> &nodes);
void prepareChunkUpdate_LightPrism(WorldId_t worldId, Pos::GlobalChunk chunkPos, const LightPrism *lights); 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 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 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 preparePortalNew(PortalId_t portalId, void* portal);
void preparePortalUpdate(PortalId_t portalId, void* portal); void preparePortalUpdate(PortalId_t portalId, void* portal);
void preparePortalRemove(PortalId_t portalId); void preparePortalRemove(PortalId_t portalId);