feat(entity): add ECS-based entity rendering

This commit is contained in:
2026-07-25 11:19:27 +08:00
parent 849386a3bc
commit 5951a5e81c
6 changed files with 45 additions and 2 deletions

View File

@@ -14,6 +14,7 @@
#include <absl/container/flat_hash_set.h>
#include <deque>
#include <entt/entt.hpp>
#include <tbb/concurrent_hash_map.h>
#include <tbb/concurrent_queue.h>
#include <tbb/concurrent_unordered_map.h>
@@ -46,6 +47,10 @@ struct PlayerRenderData {
class WorldScene;
class ClientWorld {
public:
ClientWorld(const ClientWorld&) = delete;
ClientWorld(ClientWorld&&) = delete;
ClientWorld& operator=(const ClientWorld&) = delete;
ClientWorld& operator=(ClientWorld&&) = delete;
ClientWorld(AudioEngine& auido, Config& config, WorldScene& scene);
~ClientWorld();
void init(std::string_view player_name,
@@ -110,7 +115,7 @@ public:
void send_chat_message(ChatMessage& message);
void receive_voice_message(VoiceMsg& msg);
bool enable_voice_chat() const;
const entt::registry& get_registry();
template <typename Fn>
void register_ticktimer(std::string_view id, TickType threshold, Fn&& f) {
m_ticktimers.emplace(
@@ -147,6 +152,9 @@ private:
static constexpr int WORLD_EXIT_TIMEOUT = 200;
static constexpr int MAX_UPLOAD_CHUNK_SUM = 16;
entt::registry m_registry;
ClientPlayer m_player;
OtherPlayerHashMap m_player_info;
ChunkHashMap m_chunks;

View File

@@ -0,0 +1,18 @@
#pragma once
#include <glm/glm.hpp>
#include <string>
namespace Cubed {
struct Transform {
glm::vec3 pos;
};
struct Model {
std::string name;
};
struct Health {
float hp = 0;
float max_hp = 20;
};
} // namespace Cubed

View File

@@ -132,6 +132,7 @@ private:
void render_underwater(ClientWorld& world);
void render_outline(ClientWorld& world);
void render_entity(ClientWorld& world);
void render_player(ClientWorld& world);
void render_normal_block(const glm::mat4& model_mat,