载入中...
搜索中...
未找到
CubeTypeRegistry.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5// 方块类型注册表:定义有哪些 cube、各面材质、方向性与组合声明。
6// 注册表在创建 world 时传入;网格化阶段用 resolveFaceTex 把“类型 id”解析为
7// 各面“纹理 id”输出给渲染器。空注册表下行为退化为“类型 id == 纹理 id”,
8// 与旧的体素语义完全一致。
9
10#include "voxel/CubeType.h"
11#include "voxel/FaceDir.h"
12
13#include <cstdint>
14#include <string>
15#include <unordered_map>
16#include <vector>
17
18namespace eve::voxel {
19
22public:
24 CubeTypeRegistry() = default;
25
31 uint8_t add(const CubeType &type);
32
41 int loadFromJson(const std::string &json, std::string *error = nullptr);
42
44 const CubeType *find(const std::string &name) const;
46 const CubeType *find(uint8_t id) const;
47
49 uint8_t variantId(const std::string &name, int orientation) const;
50
52 int count() const { return int(byName_.size()); }
54 int variantCount() const { return int(types_.size()) - 1; }
55
57 void clear();
58
60 static const CubeTypeRegistry &empty();
61
62private:
63 std::unordered_map<std::string, uint8_t> byName_; // name -> 0 度变体 id
64 std::vector<CubeType> types_{CubeType{}}; // index 0 = 空气占位
65};
66
71inline uint8_t resolveFaceTex(const CubeTypeRegistry &types, uint8_t id, FaceDir dir) {
72 const CubeType *t = types.find(id);
73 if (!t) return id;
74 return t->faceTex[int(dir)];
75}
76
77} // namespace eve::voxel
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::string name
std::string error
Definition Package.cpp:60
std::string id
Definition PlayHost.cpp:108
float t
V3 dir
Definition TreeMesh.cpp:150
EVENGINE_API_DOMAINS public API.
int variantCount() const
类型总数(含方向变体,不含空气占位)。
CubeTypeRegistry()=default
Cube type registry.
int count() const
命名的方块类型数量(不含方向变体)。
const CubeType * find(const std::string &name) const
按名字返回 0 度变体;未找到返回 nullptr。
方块类型定义:名字、各面图集纹理、方向性、组合声明。 方向性方块在注册时按 orientation 绕 Y 轴展开成多个"具体类型"变体, 每个变体持有旋转后的各面纹理;渲染端只消费纹理 id,不接触 ...
Definition Chunk.h:12
uint8_t resolveFaceTex(const CubeTypeRegistry &types, uint8_t id, FaceDir dir)
求某个体素在某面方向上的实际图集纹理 id。 未注册的 id 退化为“所有面 = 原 id”(向后兼容:体素值即纹理 id)。
FaceDir
Six axis-aligned face directions. Each chunk keeps a separate instance buffer per direction so camera...
Definition FaceDir.h:17
CubeType public API.
Definition CubeType.h:15
uint8_t faceTex[6]
各面图集纹理索引,按 FaceDir 顺序 PosX..NegZ。
Definition CubeType.h:20