Small error in how mouse events are processed. I need to do them _outside_ of the guecs::UI so that the event is checked once and then confirmed in all grids. Then created a tombstone device to be used as a dead enemy marker that will later allow looting.

master
Zed A. Shaw 3 weeks ago
parent 6447f86954
commit e04c03b381
  1. 1
      assets/config.json
  2. 16
      assets/devices.json
  3. 2
      assets/enemies.json
  4. BIN
      assets/grave_stone-256.png
  5. 21
      guecs.cpp
  6. 2
      guecs.hpp
  7. 8
      gui.cpp
  8. 4
      systems.cpp

@ -10,6 +10,7 @@
"torch_horizontal_floor": "assets/torch_horizontal_floor-256.png",
"evil_eye": "assets/evil_eye-sprites.png",
"peasant_girl": "assets/undead_peasant-256.png",
"grave_stone": "assets/grave_stone-256.png",
"floor": "assets/floor_tile_test-256.png",
"ceiling": "assets/ceiling_test-256.png",
"healing_potion_small": "assets/healing_potion_small-256.png",

@ -49,5 +49,21 @@
"events": ["Events::GUI::TRAP"]},
{"_type": "Sprite", "name": "tripwire_trap"}
]
},
"GRAVE_STONE": {
"id": "GRAVE_STONE",
"name": "Grave Stone",
"description": "Something died here. Was this your doing?",
"inventory_count": 0,
"components": [
{"_type": "Tile", "display": "\u21ef",
"foreground": [32, 123, 164],
"background": [24, 205, 189]
},
{"_type": "Device",
"config": {"test": true},
"events": []},
{"_type": "Sprite", "name": "grave_stone"}
]
}
}

@ -40,7 +40,7 @@
},
"RAT_GIANT": {
"components": [
{"_type": "Tile", "display": "\u08ea",
{"_type": "Tile", "display": "\u08ac",
"foreground": [205, 164, 246],
"background": [30, 20, 75]
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@ -91,18 +91,15 @@ namespace guecs {
});
}
void UI::mouse(sf::RenderWindow &window) {
if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) {
sf::Vector2f pos = window.mapPixelToCoords(sf::Mouse::getPosition(window));
$world.query<lel::Cell, Clickable>([&](auto ent, auto& cell, auto &clicked) {
if((pos.x >= cell.x && pos.x <= cell.x + cell.w) &&
(pos.y >= cell.y && pos.y <= cell.y + cell.h))
{
auto& cn = $world.get<CellName>(ent);
clicked.action(ent, cn.name);
}
});
}
void UI::mouse(float x, float y) {
$world.query<lel::Cell, Clickable>([&](auto ent, auto& cell, auto &clicked) {
if((x >= cell.x && x <= cell.x + cell.w) &&
(y >= cell.y && y <= cell.y + cell.h))
{
auto& cn = $world.get<CellName>(ent);
clicked.action(ent, cn.name);
}
});
}
Clickable make_action(DinkyECS::World& target, Events::GUI event) {

@ -131,7 +131,7 @@ namespace guecs {
void init(TexturePack& textures);
void render(sf::RenderWindow& window);
void mouse(sf::RenderWindow &window);
void mouse(float x, float y);
};
Clickable make_action(DinkyECS::World& target, Events::GUI event);

@ -352,9 +352,11 @@ namespace gui {
}
void FSM::mouse() {
// need to sort out how this will be easier with multiple UIs
$combat_view.$gui.mouse($window);
$status_view.$gui.mouse($window);
if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) {
sf::Vector2f pos = $window.mapPixelToCoords(sf::Mouse::getPosition($window));
$combat_view.$gui.mouse(pos.x, pos.y);
$status_view.$gui.mouse(pos.x, pos.y);
}
}
void FSM::generate_map() {

@ -125,6 +125,10 @@ void System::death(GameLevel &level) {
world.send<Events::GUI>(Events::GUI::DEATH, ent, {});
} else {
// remove their motion so they're dead
// CHANGE: this needs to remove the enemies that are
// dead and then replace them at that position with
// a gave_stone device. And then that makes it so you
// can loot their dead bodies.
world.remove<Motion>(ent);
}
}

Loading…
Cancel
Save