diff --git a/intra.cpp b/intra.cpp index 3d7b68f0..148397c2 100644 --- a/intra.cpp +++ b/intra.cpp @@ -293,6 +293,66 @@ EX void check_portal_movement() { } } +vector unconnected; + +void erase_unconnected(cellwalker cw) { + for(int i=0; i= 0 && point_direction < centerover->type; + + dialog::addItem(XLAT("move to the next space"), 'm'); + dialog::add_action([] { + int ic = (current + 1) % isize(data); + switch_to(ic); + }); + + bool in_list = false; for(cellwalker x: unconnected) if(x == cw) in_list = true; + + if(!valid) ; + else if(connections.count(cw)) { + dialog::addItem(XLAT("disconnect this portal"), 'd'); + dialog::add_action([cw] { + auto tcw = connections[cw].tcw; + unconnected.push_back(tcw); + connections.erase(cw); + connections.erase(tcw); + }); + } + else if(in_list) { + dialog::addItem(XLAT("remove %1 from the list", lalign(0, cw)), 'r'); + dialog::add_action([cw] { + erase_unconnected(cw); + }); + } + else { + dialog::addItem(XLAT("add to list"), 'a'); + dialog::add_action([cw] { unconnected.push_back(cw); }); + for(auto p: unconnected) { + dialog::addItem(XLAT("connect " + lalign(0, p)), '1'); + dialog::add_action([p, cw] { + connect_portal(cw, p); + erase_unconnected(p); + }); + } + } + + dialog::display(); + } + +auto hooks1 = + addHook(hooks_o_key, 90, [] (o_funcs& v) { + if(intra::in) v.push_back(named_dialog(XLAT("manage portals"), show_portals)); + }); + EX } } \ No newline at end of file