custom model format changes

This commit is contained in:
A-lex-Ra
2024-01-09 13:46:26 +06:00
parent b5739c678f
commit c4125058b4
7 changed files with 93 additions and 39 deletions
+52 -11
View File
@@ -107,10 +107,6 @@ void ContentLoader::loadBlock(Block* def, std::string name, fs::path file) {
for (uint i = 0; i < 6; i++) {
def->textureFaces[i] = texarr->str(i);
}
for (uint i = 6; i < texarr->values.size(); i++)
{
def->textureMoreFaces.push_back(texarr->str(i));
}
}
// block model
@@ -119,13 +115,13 @@ void ContentLoader::loadBlock(Block* def, std::string name, fs::path file) {
if (model == "block") def->model = BlockModel::block;
else if (model == "aabb") def->model = BlockModel::aabb;
else if (model == "custom") {
def->model = BlockModel::customfaces;
json::JArray* pointarr = root->arr("faces-points");
for (uint i = 0; i < pointarr->values.size(); i+=3)
{
def->customfacesPoints.push_back(glm::vec3(pointarr->num(i),
pointarr->num(i+1),
pointarr->num(i + 2)));
def->model = BlockModel::custom;
if (root->has("model-primitives")) {
loadCustomBlockModel(def, root->obj("model-primitives"));
}
else {
std::cerr << "ERROR occured while block "
<< name << " parsed: no \"model-primitives\" found" << std::endl;
}
}
else if (model == "X") def->model = BlockModel::xsprite;
@@ -179,6 +175,51 @@ void ContentLoader::loadBlock(Block* def, std::string name, fs::path file) {
root->str("picking-item", def->pickingItem);
}
void ContentLoader::loadCustomBlockModel(Block* def, json::JObject* primitives) {
if (primitives->has("aabbs")) {
json::JArray* modelboxes = primitives->arr("aabbs");
for (uint i = 0; i < modelboxes->size(); i++ ) {
/* Parse aabb */
json::JArray* boxobj = modelboxes->arr(i);
AABB modelbox;
modelbox.a = glm::vec3(boxobj->num(0), boxobj->num(1), boxobj->num(2));
modelbox.b = glm::vec3(boxobj->num(3), boxobj->num(4), boxobj->num(5));
modelbox.b += modelbox.a;
def->modelBoxes.push_back(modelbox);
if (boxobj->size() == 7)
for (uint i = 6; i < 12; i++) {
def->modelTextures.push_back(boxobj->str(6));
}
else if (boxobj->size() == 12)
for (uint i = 6; i < 12; i++) {
def->modelTextures.push_back(boxobj->str(i));
}
else
for (uint i = 6; i < 12; i++) {
def->modelTextures.push_back("notfound");
}
}
}
if (primitives->has("tetragons")) {
json::JArray* modeltetragons = primitives->arr("tetragons");
for (uint i = 0; i < modeltetragons->size(); i++) {
/* Parse tetragon to points */
json::JArray* tgonobj = modeltetragons->arr(i);
glm::vec3 p1(tgonobj->num(0), tgonobj->num(1), tgonobj->num(2)),
p2(tgonobj->num(3), tgonobj->num(4), tgonobj->num(5)),
p3(tgonobj->num(6), tgonobj->num(7), tgonobj->num(8));
glm::vec3 p4 = p3 + (p1 - p2);
def->modelExtraPoints.push_back(p1);
def->modelExtraPoints.push_back(p2);
def->modelExtraPoints.push_back(p3);
def->modelExtraPoints.push_back(p4);
def->modelTextures.push_back(tgonobj->str(9));
}
}
}
void ContentLoader::loadItem(ItemDef* def, std::string name, std::filesystem::path file) {
std::unique_ptr<json::JObject> root(files::read_json(file));
}