From 42f6869afd52c9509c48f966019a6f8f70f24b01 Mon Sep 17 00:00:00 2001 From: DrSocalkwe3n Date: Fri, 7 Feb 2025 11:16:04 +0600 Subject: [PATCH] 3 --- Src/Server/Abstract.hpp | 27 ++++++++++++++++++++------- Src/Server/RemoteClient.hpp | 31 ++++++++++++++++++------------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/Src/Server/Abstract.hpp b/Src/Server/Abstract.hpp index 31d5048..183e9c3 100644 --- a/Src/Server/Abstract.hpp +++ b/Src/Server/Abstract.hpp @@ -8,6 +8,7 @@ namespace LV::Server { +// Идентификаторы на стороне клиента using VoxelId_c = uint16_t; using NodeId_c = uint16_t; using WorldId_c = uint8_t; @@ -18,22 +19,34 @@ using ModelId_c = uint16_t; using ResourceId_t = uint32_t; +// Двоичные данные +using BinTextureId_t = ResourceId_t; +using BinModelId_t = ResourceId_t; +using BinSoundId_t = ResourceId_t; + +// Игровые определения using DefVoxelId_t = ResourceId_t; using DefNodeId_t = ResourceId_t; using DefWorldId_t = ResourceId_t; +using DefPortalId_t = ResourceId_t; using DefEntityId_t = ResourceId_t; -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; + +// В одном регионе может быть максимум 2^16 сущностей. Клиенту адресуются сущности в формате <мир>+<позиция региона>+ +// И если сущность перешла из одного региона в другой, идентификатор сущности на стороне клиента сохраняется +using LocalEntityId_t = uint16_t; +using GlobalEntityId_t = std::tuple; + + + +using PortalId_t = uint16_t; using MediaStreamId_t = uint16_t; using ContentBridgeId_t = uint16_t; using PlayerId_t = uint32_t; + /* Сервер загружает информацию о локальных текстурах Синхронизация часто используемых текстур? diff --git a/Src/Server/RemoteClient.hpp b/Src/Server/RemoteClient.hpp index c470295..8267c3d 100644 --- a/Src/Server/RemoteClient.hpp +++ b/Src/Server/RemoteClient.hpp @@ -216,38 +216,34 @@ public: } // Функции подготавливают пакеты к отправке - - // Необходимые определения шаблонов игрового контента - void prepareDefWorld(WorldId_t worldId, void* world); - void prepareDefVoxel(VoxelId_t voxelId, void* voxel); - void prepareDefNode(NodeId_t worldId, void* node); - 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); void prepareChunkRemove(WorldId_t worldId, Pos::GlobalChunk chunkPos); - void prepareWorldRemove(WorldId_t worldId); - void prepareEntitySwap(WorldId_t prevWorldId, Pos::GlobalRegion prevRegionPos, EntityId_t prevEntityId, WorldId_t newWorldId, Pos::GlobalRegion newRegionPos, EntityId_t newEntityId); 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 prepareWorldNew(WorldId_t worldId, void* world); + void prepareWorldUpdate(WorldId_t worldId, void* world); + void prepareWorldRemove(WorldId_t worldId); void preparePortalNew(PortalId_t portalId, void* portal); void preparePortalUpdate(PortalId_t portalId, void* portal); void preparePortalRemove(PortalId_t portalId); + + // Необходимые определения шаблонов игрового контента + void prepareDefPortal(DefNodeId_t defWorldId, void* node); + void prepareDefMediaStream(MediaStreamId_t modelId, void* mediaStream); + + // Прочие моменты void prepareCameraSetEntity(WorldId_t worldId, Pos::GlobalChunk chunkPos, EntityId_t entityId); @@ -257,10 +253,19 @@ public: // Сообщить о ресурсах // Сюда приходят все обновления ресурсов движка // Глобально их можно запросить в выдаче pushPreparedPackets() + + // Двоичные файлы void informateDefTexture(const std::unordered_map> &textures); void informateDefModel(const std::unordered_map> &models); void informateDefSound(const std::unordered_map> &sounds); + // Игровые определения + void informateDefWorld(const std::unordered_map &worlds); + void informateDefVoxel(const std::unordered_map &voxels); + void informateDefNode(const std::unordered_map &nodes); + void informateDefEntityes(const std::unordered_map &entityes); + void informateDefPortals(const std::unordered_map &portals); + private: WorldId_c rentWorldRemapId(WorldId_t wId); };