More notes on the next things to do.
This commit is contained in:
parent
011fee4872
commit
0e79288afc
8 changed files with 31 additions and 6 deletions
|
@ -27,6 +27,11 @@ namespace components {
|
|||
DEFINE_SERIALIZABLE(Loot, amount);
|
||||
};
|
||||
|
||||
struct Inventory {
|
||||
int gold;
|
||||
DEFINE_SERIALIZABLE(Inventory, gold);
|
||||
};
|
||||
|
||||
struct Tile {
|
||||
std::string chr;
|
||||
DEFINE_SERIALIZABLE(Tile, chr);
|
||||
|
|
|
@ -124,6 +124,4 @@ namespace DinkyECS {
|
|||
return !queue.empty();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
9
gui.cpp
9
gui.cpp
|
@ -73,18 +73,21 @@ void GUI::create_renderer() {
|
|||
|
||||
$document = Renderer([&, player]{
|
||||
const auto& player_combat = $world.get<Combat>(player.entity);
|
||||
const auto& inventory = $world.get<Inventory>(player.entity);
|
||||
$status_text = player_combat.hp > 0 ? "NOT DEAD" : "DEAD!!!!!!";
|
||||
|
||||
std::vector<Element> log_list;
|
||||
for(auto msg : $log.messages) {
|
||||
log_list.push_back(text(msg));
|
||||
}
|
||||
|
||||
auto log_box = vbox(log_list) | yflex_grow | border;
|
||||
|
||||
return hbox({
|
||||
hflow(
|
||||
vbox(
|
||||
text(format("HP: {: >3}", player_combat.hp)) | border,
|
||||
text(format("HP: {: >3} GOLD: {: >3}",
|
||||
player_combat.hp, inventory.gold)) | border,
|
||||
text($status_text) | border,
|
||||
separator(),
|
||||
log_box
|
||||
|
@ -126,7 +129,9 @@ void GUI::handle_world_events() {
|
|||
break;
|
||||
case eGUI::LOOT: {
|
||||
auto loot = $world.get<Loot>(entity);
|
||||
$log.log(format("You found {} gold.", loot.amount));
|
||||
auto inventory = $world.get<Inventory>(player.entity);
|
||||
$log.log(format("You found {} gold. You have {} now.",
|
||||
loot.amount, inventory.gold));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
1
main.cpp
1
main.cpp
|
@ -27,6 +27,7 @@ void configure_world(DinkyECS::World &world, Map &game_map) {
|
|||
world.set<Motion>(player.entity, {0, 0});
|
||||
world.set<Combat>(player.entity, {100, 10});
|
||||
world.set<Tile>(player.entity, {config.PLAYER_TILE});
|
||||
world.set<Inventory>(player.entity, {5});
|
||||
|
||||
auto enemy = world.entity();
|
||||
world.set<Position>(enemy, {game_map.place_entity(1)});
|
||||
|
|
2
save.cpp
2
save.cpp
|
@ -27,6 +27,7 @@ void save::to_file(fs::path path, DinkyECS::World &world, Map &map) {
|
|||
extract<Combat>(world, save_data.combat);
|
||||
extract<Motion>(world, save_data.motion);
|
||||
extract<Tile>(world, save_data.tile);
|
||||
extract<Inventory>(world, save_data.inventory);
|
||||
|
||||
archive.save(save_data);
|
||||
std::string_view archive_view = archive.get_buffer();
|
||||
|
@ -68,6 +69,7 @@ void save::from_file(fs::path path, DinkyECS::World &world_out, Map &map_out) {
|
|||
inject<Combat>(world_out, save_data.combat);
|
||||
inject<Motion>(world_out, save_data.motion);
|
||||
inject<Tile>(world_out, save_data.tile);
|
||||
inject<Inventory>(world_out, save_data.inventory);
|
||||
|
||||
map_out = Map(save_data.map.input_map,
|
||||
save_data.map.walls, save_data.map.limit);
|
||||
|
|
3
save.hpp
3
save.hpp
|
@ -33,8 +33,9 @@ namespace save {
|
|||
std::map<DinkyECS::Entity, components::Motion> motion;
|
||||
std::map<DinkyECS::Entity, components::Combat> combat;
|
||||
std::map<DinkyECS::Entity, components::Tile> tile;
|
||||
std::map<DinkyECS::Entity, components::Inventory> inventory;
|
||||
|
||||
DEFINE_SERIALIZABLE(SaveData, facts, map, position, motion, combat, tile);
|
||||
DEFINE_SERIALIZABLE(SaveData, facts, map, position, motion, combat, tile, inventory);
|
||||
};
|
||||
|
||||
void to_file(fs::path path, DinkyECS::World &world, Map &map);
|
||||
|
|
10
status.txt
10
status.txt
|
@ -3,10 +3,18 @@ NOTES:
|
|||
|
||||
TODO:
|
||||
|
||||
* Event system could take additional data so that the events can be more coarse and simpler.
|
||||
* Simplify the combat/collision system so that it's not a bunch of if-cases.
|
||||
* Inventory needs to be better, but need some kinds of "weapons" or other loot to get and not just gold.
|
||||
* Run the ansi_parser on the whole UI so I can use colors and other glyphs.
|
||||
* Create a few more enemy types to fight.
|
||||
* Devise a more complete map/world generator that can use the loot and enemies better.
|
||||
* Maybe an LOS system, but the hearing version works pretty well so far.
|
||||
* Probably a system for mapping collision types to sound effects, rather than having the GUI do it.
|
||||
|
||||
* Write a test that generates a ton of maps then confirms there's a path from one room to every other room?
|
||||
* Lua integration?
|
||||
|
||||
* BUG: If map is < 90 zome out crashes.
|
||||
|
||||
* Simple loot system.
|
||||
* Bring back sounds, check out SoLoud.
|
||||
|
|
|
@ -127,6 +127,11 @@ void System::combat(DinkyECS::World &world, Player &player) {
|
|||
}
|
||||
} else if(world.has<Loot>(entity)) {
|
||||
world.send<eGUI>(eGUI::LOOT, entity);
|
||||
auto &loot = world.get<Loot>(entity);
|
||||
auto &loot_pos = world.get<Position>(entity);
|
||||
auto &inventory = world.get<Inventory>(player.entity);
|
||||
inventory.gold += loot.amount;
|
||||
collider.remove(loot_pos.location);
|
||||
} else {
|
||||
println("UNKNOWN COLLISION TYPE {}", entity);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue