3
This commit is contained in:
@@ -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 сущностей. Клиенту адресуются сущности в формате <позиция региона>+<uint16_t>
|
||||
// И если сущность перешла из одного региона в другой адресация сохраняется
|
||||
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 сущностей. Клиенту адресуются сущности в формате <мир>+<позиция региона>+<uint16_t>
|
||||
// И если сущность перешла из одного региона в другой, идентификатор сущности на стороне клиента сохраняется
|
||||
using LocalEntityId_t = uint16_t;
|
||||
using GlobalEntityId_t = std::tuple<WorldId_t, Pos::GlobalRegion, LocalEntityId_t>;
|
||||
|
||||
|
||||
|
||||
using PortalId_t = uint16_t;
|
||||
using MediaStreamId_t = uint16_t;
|
||||
using ContentBridgeId_t = uint16_t;
|
||||
using PlayerId_t = uint32_t;
|
||||
|
||||
|
||||
/*
|
||||
Сервер загружает информацию о локальных текстурах
|
||||
Синхронизация часто используемых текстур?
|
||||
|
||||
@@ -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<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_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 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<TextureId_t, std::shared_ptr<ResourceFile>> &textures);
|
||||
void informateDefModel(const std::unordered_map<ModelId_t, std::shared_ptr<ResourceFile>> &models);
|
||||
void informateDefSound(const std::unordered_map<SoundId_t, std::shared_ptr<ResourceFile>> &sounds);
|
||||
|
||||
// Игровые определения
|
||||
void informateDefWorld(const std::unordered_map<DefWorldId_t, void*> &worlds);
|
||||
void informateDefVoxel(const std::unordered_map<DefVoxelId_t, void*> &voxels);
|
||||
void informateDefNode(const std::unordered_map<DefNodeId_t, void*> &nodes);
|
||||
void informateDefEntityes(const std::unordered_map<DefEntityId_t, void*> &entityes);
|
||||
void informateDefPortals(const std::unordered_map<DefPortalId_t, void*> &portals);
|
||||
|
||||
private:
|
||||
WorldId_c rentWorldRemapId(WorldId_t wId);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user