|
|
|
#include "components.hpp"
|
|
|
|
|
|
|
|
namespace components {
|
|
|
|
void configure(DinkyECS::World &world, DinkyECS::Entity entity, json& entity_data) {
|
|
|
|
for(auto &comp : entity_data["components"]) {
|
|
|
|
json& config = comp["config"];
|
|
|
|
|
|
|
|
if(comp["type"] == "Weapon") {
|
|
|
|
world.set<Weapon>(entity, {config["damage"]});
|
|
|
|
} else if(comp["type"] == "LightSource") {
|
|
|
|
world.set<LightSource>(entity, {config["strength"], config["radius"]});
|
|
|
|
} else if(comp["type"] == "Loot") {
|
|
|
|
world.set<Loot>(entity, {config["amount"]});
|
|
|
|
} else if(comp["type"] == "Tile") {
|
|
|
|
world.set<Tile>(entity, {config["chr"]});
|
|
|
|
} else if(comp["type"] == "EnemyConfig") {
|
|
|
|
world.set<EnemyConfig>(entity, {config["hearing_distance"]});
|
|
|
|
} else if(comp["type"] == "Combat") {
|
|
|
|
world.set<Combat>(entity, {config["hp"], config["damage"]});
|
|
|
|
} else if(comp["type"] == "Curative") {
|
|
|
|
world.set<Curative>(entity, {config["hp"]});
|
|
|
|
} else if(comp["type"] == "Motion") {
|
|
|
|
world.set<Motion>(entity, {config["dx"], config["dy"], config["random"]});
|
|
|
|
} else if(comp["type"] == "Device") {
|
|
|
|
Device device{.config=config, .actions={}};
|
|
|
|
|
|
|
|
for(auto name : comp["actions"]) {
|
|
|
|
if(name == "StairsUp") {
|
|
|
|
device.actions.push_back(StairsUp);
|
|
|
|
} else if(name == "StairsDown") {
|
|
|
|
device.actions.push_back(StairsUp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
world.set<Device>(entity, device);
|
|
|
|
} else {
|
|
|
|
dbc::sentinel(fmt::format("ITEM COMPONENT TYPE MISSING: {}",
|
|
|
|
std::string(comp["type"])));
|
|
|
|
}
|
|
|
|
|
|
|
|
// json config variable dies
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|