#pragma once #include "CNProtocol.hpp" #include "CNStructs.hpp" #include #include #include #include #include class Chunk { public: std::set players; std::set NPCs; }; enum { INSTANCE_OVERWORLD, // default instance every player starts in INSTANCE_IZ, // these aren't actually used INSTANCE_UNIQUE // these aren't actually used }; namespace ChunkManager { void init(); void cleanup(); extern std::map chunks; void newChunk(ChunkPos pos); void updatePlayerChunk(CNSocket* sock, ChunkPos from, ChunkPos to); void updateNPCChunk(int32_t id, ChunkPos from, ChunkPos to); void trackPlayer(ChunkPos chunkPos, CNSocket* sock); void trackNPC(ChunkPos chunkPos, int32_t id); void untrackPlayer(ChunkPos chunkPos, CNSocket* sock); void untrackNPC(ChunkPos chunkPos, int32_t id); void addPlayerToChunks(std::set chnks, CNSocket* sock); void addNPCToChunks(std::set chnks, int32_t id); void removePlayerFromChunks(std::set chnks, CNSocket* sock); void removeNPCFromChunks(std::set chnks, int32_t id); bool chunkExists(ChunkPos chunk); void emptyChunk(ChunkPos chunkPos); ChunkPos chunkPosAt(int posX, int posY, uint64_t instanceID); std::set getViewableChunks(ChunkPos chunkPos); std::vector getChunksInMap(uint64_t mapNum); bool inPopulatedChunks(int posX, int posY, uint64_t instanceID); void createInstance(uint64_t); void destroyInstance(uint64_t); void destroyInstanceIfEmpty(uint64_t); }