Fixed up the idea for having dynamic callbacks on devices. Might become the new way to do stuff but not sure.
parent
d2162910f6
commit
e30c18fbdf
@ -0,0 +1,50 @@ |
||||
#include "components.hpp" |
||||
|
||||
namespace components { |
||||
void StairsDown(json &, DinkyECS::World &) { |
||||
fmt::println("GOING DOWN!"); |
||||
} |
||||
|
||||
void StairsUp(json &, DinkyECS::World &) { |
||||
fmt::println("GOING UP!"); |
||||
} |
||||
|
||||
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"]))); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue