Create belts with mouse

This commit is contained in:
Nikita Lisitsa 2024-08-19 01:09:36 +03:00
parent 11f220d8ea
commit e812ea3e3a

View file

@ -674,10 +674,23 @@ namespace gmtk
{
if (event.down && event.button == app::mouse_button::left)
{
if (selected_ && !view_transition_)
{
bool transitioned = false;
bool destroyed_item = false;
bool transitioned = false;
if (selected_item_)
{
auto const & i = map_.world.get(*selected_item_).get<item const>();
if (i.target)
map_.world.detach<occupied>(i.target);
else
map_.world.detach<occupied>(map_.world.index<path_index>().get(i.start));
map_.world.destroy(*selected_item_);
selected_item_ = std::nullopt;
destroyed_item = true;
}
if (!destroyed_item && selected_ && !view_transition_)
{
if (auto entity = map_.world.index<index>().find(*selected_))
if (map_.world.get(*entity).contains<zoomer>())
{
@ -696,40 +709,13 @@ namespace gmtk
}
}
if (selected_item_)
{
auto const & i = map_.world.get(*selected_item_).get<item const>();
if (i.target)
map_.world.detach<occupied>(i.target);
else
map_.world.detach<occupied>(map_.world.index<path_index>().get(i.start));
map_.world.destroy(*selected_item_);
selected_item_ = std::nullopt;
}
}
if (event.down && event.button == app::mouse_button::right)
{
if (!view_transition_ && view_stack_.size() > 1)
{
view_transition_ = {view_stack_.back()};
view_stack_.pop_back();
selected_ = std::nullopt;
}
}
}
void on_event(app::key_event const & event) override
{
if (event.down && event.key == app::keycode::B)
{
if (selected_ && !belt_start_)
if (!destroyed_item && !transitioned && selected_ && !belt_start_)
{
belt_start_ = *selected_;
}
}
if (!event.down && event.key == app::keycode::B)
if (!event.down && event.button == app::mouse_button::left)
{
if (selected_ && belt_start_ && selected_->level == belt_start_->level)
{
@ -768,6 +754,19 @@ namespace gmtk
belt_start_ = std::nullopt;
}
if (event.down && event.button == app::mouse_button::right)
{
if (!view_transition_ && view_stack_.size() > 1)
{
view_transition_ = {view_stack_.back()};
view_stack_.pop_back();
selected_ = std::nullopt;
}
}
}
void on_event(app::key_event const & event) override
{
if (event.down && event.key == app::keycode::F)
{
if (selected_ && !map_.world.index<index>().find(*selected_))