Files
Cubed/include/Cubed/render/player_renderer.hpp
zhenyan121 15d5af34b9 refactor(gameplay): replace entt components with SparseVector for player data
Refactor client world to use a custom SparseVector for player data instead of entt registry. Consolidate Transform, ViewAngles, and related structs into Position, Orientation, WalkPose. Introduce PlayerData and PlayerRenderData. Remove the unused move_system.cpp. Unify player render and shadow render into a single function.
2026-07-27 20:21:44 +08:00

33 lines
821 B
C++

#pragma once
#include "Cubed/shader.hpp"
#include <array>
#include <glad/glad.h>
namespace Cubed {
class ClientWorld;
class Renderer;
class PlayerRenderer {
public:
static constexpr int BODY_PART_NUM = 6;
PlayerRenderer(Renderer& renderer);
~PlayerRenderer();
void init();
void render(const Shader& shader, ClientWorld& world, bool shadow_render);
private:
struct PlayerVertex {
float x = 0.0f, y = 0.0f, z = 0.0f;
float s = 0.0f, t = 0.0f;
float nx = 0.0f, ny = 0.0f, nz = 0.0f;
float tx = 0.0f, ty = 0.0f, tz = 0.0f;
};
Renderer& m_renderer;
std::array<GLuint, BODY_PART_NUM> m_vao;
std::array<GLuint, BODY_PART_NUM> m_vbo;
bool m_inited{false};
std::array<std::vector<PlayerVertex>, BODY_PART_NUM> m_vertices;
};
} // namespace Cubed