add BlockModel struct

This commit is contained in:
MihailRis
2025-04-27 18:21:56 +03:00
parent 718f5d1089
commit 20e3a961f9
12 changed files with 46 additions and 39 deletions
+1 -1
View File
@@ -44,7 +44,7 @@ void BlockWrapsRenderer::draw(const BlockWrapper& wrapper) {
}
if (vox->id != BLOCK_VOID) {
const auto& def = level.content.getIndices()->blocks.require(vox->id);
switch (def.model) {
switch (def.model.type) {
case BlockModelType::BLOCK:
batch->cube(
glm::vec3(wrapper.position) + glm::vec3(0.5f),
+1 -1
View File
@@ -32,7 +32,7 @@ std::unique_ptr<ImageData> BlocksPreview::draw(
cache.getRegion(id, 4), cache.getRegion(id, 5)};
glm::vec3 offset(0.1f, 0.5f, 0.1f);
switch (def.model) {
switch (def.model.type) {
case BlockModelType::NONE:
// something went wrong...
break;
+2 -2
View File
@@ -453,7 +453,7 @@ void BlocksRenderer::render(
int x = i % CHUNK_W;
int y = i / (CHUNK_D * CHUNK_W);
int z = (i / CHUNK_D) % CHUNK_W;
switch (def.model) {
switch (def.model.type) {
case BlockModelType::BLOCK:
blockCube({x, y, z}, texfaces, def, vox.state, !def.shadeless,
def.ambientOcclusion);
@@ -516,7 +516,7 @@ SortingMeshData BlocksRenderer::renderTranslucent(
int x = i % CHUNK_W;
int y = i / (CHUNK_D * CHUNK_W);
int z = (i / CHUNK_D) % CHUNK_W;
switch (def.model) {
switch (def.model.type) {
case BlockModelType::BLOCK:
blockCube({x, y, z}, texfaces, def, vox.state, !def.shadeless,
def.ambientOcclusion);
+7 -7
View File
@@ -50,16 +50,16 @@ static inline UVRegion get_region_for(
void ModelsGenerator::prepare(Content& content, Assets& assets) {
for (auto& [name, def] : content.blocks.getDefs()) {
if (def->model == BlockModelType::CUSTOM && def->modelName.empty()) {
if (def->model.type == BlockModelType::CUSTOM && def->model.name.empty()) {
assets.store(
std::make_unique<model::Model>(
loadCustomBlockModel(
def->customModelRaw, assets, !def->shadeless
def->model.customRaw, assets, !def->shadeless
)
),
name + ".model"
);
def->modelName = def->name + ".model";
def->model.name = def->name + ".model";
}
}
for (auto& [name, def] : content.items.getDefs()) {
@@ -131,12 +131,12 @@ model::Model ModelsGenerator::generate(
if (def.iconType == ItemIconType::BLOCK) {
auto model = assets.require<model::Model>("block");
const auto& blockDef = content.blocks.require(def.icon);
if (blockDef.model == BlockModelType::XSPRITE) {
if (blockDef.model.type == BlockModelType::XSPRITE) {
return create_flat_model(
"blocks:" + blockDef.textureFaces.at(0), assets
);
} else if (blockDef.model == BlockModelType::CUSTOM) {
model = assets.require<model::Model>(blockDef.modelName);
} else if (blockDef.model.type == BlockModelType::CUSTOM) {
model = assets.require<model::Model>(blockDef.model.name);
for (auto& mesh : model.meshes) {
mesh.scale(glm::vec3(0.2f));
}
@@ -144,7 +144,7 @@ model::Model ModelsGenerator::generate(
}
for (auto& mesh : model.meshes) {
mesh.lighting = !blockDef.shadeless;
switch (blockDef.model) {
switch (blockDef.model.type) {
case BlockModelType::AABB: {
glm::vec3 size = blockDef.hitboxes.at(0).size();
float m = glm::max(size.x, glm::max(size.y, size.z));