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