diff --git a/source/application.cpp b/source/application.cpp index eda75c4..0d3318f 100644 --- a/source/application.cpp +++ b/source/application.cpp @@ -561,25 +561,34 @@ namespace gmtk sink(world, c, m); } - void destroy_tile_entity(map & map, ecs::handle entity) + std::optional destroy_tile_entity(map & map, ecs::handle entity) { auto acc = map.world->get(entity); if (acc.contains() || acc.contains()) - return; + return std::nullopt; + + std::optional result; if (acc.contains()) - map.put_card(card_type::crossing); + { + result = card_type::crossing; + } else if (acc.contains()) { - map.put_card(card_type::zoomer); + result = card_type::zoomer; } else if (auto t = acc.get_if()) { - map.put_card(transformer_to_card(t->type)); + result = transformer_to_card(t->type); } + if (result) + map.put_card(*result); + map.world->destroy(entity); + + return result; } void clear_tile(map & map, location const & l) @@ -1490,10 +1499,16 @@ namespace gmtk { built_sound(); - destroy_tile_entity(map_, *entity); + auto dcard = destroy_tile_entity(map_, *entity); place_card(map_, *active_card_, *selected_); + if (*active_card_ == card_type::zoomer && dcard) + { + map_.take_card(*dcard); + place_card(map_, *dcard, selected_->down()); + } + active_card_ = std::nullopt; auto e = map_.world->index().get(selected_->down());