Zepha/src/game/atlas/LocalDefinitionAtlas.cpp

51 lines
1.5 KiB
C++
Raw Normal View History

//
// Created by aurailus on 02/12/18.
//
#include "LocalDefinitionAtlas.h"
2020-08-13 00:55:18 -07:00
#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->maxStackSize = 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->identifier = "air";
air->index = 1;
air->name = "Air";
air->maxStackSize = 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++) {
2019-10-02 00:16:49 -07:00
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;
}