Zepha/src/game/atlas/LocalDefinitionAtlas.cpp

53 lines
1.5 KiB
C++

//
// Created by aurailus on 02/12/18.
//
#include "LocalDefinitionAtlas.h"
#include "game/def/BlockDef.h"
#include "TextureAtlas.h"
LocalDefinitionAtlas::LocalDefinitionAtlas(TextureAtlas& atlas) {
//Invalid Node
BlockModel invalidModel = BlockModel::createCube({ atlas["_missing"] }, {}, {});
BlockDef* invalid = new BlockDef();
invalid->identifier = "invalid";
invalid->name = "INVALID";
invalid->maxStack = 64;
invalid->model = invalidModel;
invalid->farModel = invalidModel;
invalid->sBoxes = {{{ 0, 0, 0 }, { 1, 1, 1 }}};
invalid->cBoxes = {{{ 0, 0, 0 }, { 1, 1, 1 }}};
defs.push_back(invalid);
defTable.insert({ "invalid", 0 });
//Air Node
BlockModel nullModel{};
BlockDef* air = new BlockDef();
air->lightPropagates = true;
air->identifier = "air";
air->index = 1;
air->name = "Air";
air->maxStack = 64;
air->model = nullModel;
air->farModel = nullModel;
air->solid = false;
air->culls = false;
defs.push_back(air);
defTable.insert({ "air", 1 });
}
void LocalDefinitionAtlas::setIdentifiers(const std::vector<std::string>& identifiers) {
for (unsigned int i = 0; i < identifiers.size(); i++) {
if (i >= 2) defs.emplace_back(); //Don't emplace air or ignore
defTable.insert({ identifiers[i], i });
}
}
void LocalDefinitionAtlas::registerDef(ItemDef* def) {
if (!defTable.count(def->identifier))
throw std::runtime_error("Client/Server definition desync: " + def->identifier + ".");
def->index = defTable[def->identifier];
defs[def->index] = def;
}