mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-07-05 19:22:48 +00:00
more drawing tool improvements; no crash drawing tool; restart editors will ask for confirmation
This commit is contained in:
parent
62c6651392
commit
c24658bf38
@ -1263,6 +1263,10 @@ EX namespace dialog {
|
|||||||
else act();
|
else act();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void push_confirm_dialog(const reaction_t& act, const string& s) {
|
||||||
|
pushScreen([act, s] () { confirm_dialog(s, act); });
|
||||||
|
}
|
||||||
|
|
||||||
inline reaction_t add_confirmation(const reaction_t& act) {
|
inline reaction_t add_confirmation(const reaction_t& act) {
|
||||||
return [act] { do_if_confirmed(act); };
|
return [act] { do_if_confirmed(act); };
|
||||||
}
|
}
|
||||||
|
@ -3363,7 +3363,7 @@ bool openorsafe(cell *c) {
|
|||||||
EX color_t stdgridcolor = 0x202020FF;
|
EX color_t stdgridcolor = 0x202020FF;
|
||||||
|
|
||||||
EX int gridcolor(cell *c1, cell *c2) {
|
EX int gridcolor(cell *c1, cell *c2) {
|
||||||
if(cmode & sm::DRAW) return Dark(forecolor);
|
if(cmode & sm::DRAW && !mapeditor::drawing_tool) return Dark(forecolor);
|
||||||
if(!c2)
|
if(!c2)
|
||||||
return 0x202020 >> darken;
|
return 0x202020 >> darken;
|
||||||
int rd1 = rosedist(c1), rd2 = rosedist(c2);
|
int rd1 = rosedist(c1), rd2 = rosedist(c2);
|
||||||
|
@ -128,6 +128,19 @@ EX namespace mapeditor {
|
|||||||
sh.draw(V);
|
sh.draw(V);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(drawing_tool && (cmode & sm::DRAW)) {
|
||||||
|
dynamicval<ld> lw(vid.linewidth, vid.linewidth * texture::penwidth * 100);
|
||||||
|
if(holdmouse && mousekey == 'c')
|
||||||
|
queue_hcircle(rgpushxto0(lstart), hdist(lstart, mouseh));
|
||||||
|
else if(holdmouse && mousekey == 'l')
|
||||||
|
queueline(lstart, mouseh, texture::config.paint_color, 4 + vid.linequality, PPR::LINE);
|
||||||
|
else if(!holdmouse) {
|
||||||
|
transmatrix T = rgpushxto0(mouseh);
|
||||||
|
queueline(T * xpush0(-.1), T * xpush0(.1), texture::config.paint_color);
|
||||||
|
queueline(T * ypush0(-.1), T * ypush0(.1), texture::config.paint_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** dtshapes takes ownership of sh */
|
/** dtshapes takes ownership of sh */
|
||||||
@ -228,7 +241,7 @@ EX namespace mapeditor {
|
|||||||
dtshapes.erase(dtshapes.begin() + nearest_id);
|
dtshapes.erase(dtshapes.begin() + nearest_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
hyperpoint lstart;
|
EX hyperpoint lstart;
|
||||||
cell *lstartcell;
|
cell *lstartcell;
|
||||||
ld front_edit = 0.5;
|
ld front_edit = 0.5;
|
||||||
enum class eFront { sphere_camera, sphere_center, equidistants, const_x, const_y };
|
enum class eFront { sphere_camera, sphere_center, equidistants, const_x, const_y };
|
||||||
@ -1359,7 +1372,7 @@ namespace mapeditor {
|
|||||||
else if(uni == 'G')
|
else if(uni == 'G')
|
||||||
push_debug_screen();
|
push_debug_screen();
|
||||||
else if(sym == SDLK_F5) {
|
else if(sym == SDLK_F5) {
|
||||||
restart_game();
|
dialog::push_confirm_dialog([] { restart_game(); }, XLAT("Are you sure you want to clear the map?"));
|
||||||
}
|
}
|
||||||
else if(sym == SDLK_F2) save_level();
|
else if(sym == SDLK_F2) save_level();
|
||||||
else if(sym == SDLK_F3) load_level();
|
else if(sym == SDLK_F3) load_level();
|
||||||
@ -1487,6 +1500,7 @@ namespace mapeditor {
|
|||||||
ld equi_range = 1;
|
ld equi_range = 1;
|
||||||
|
|
||||||
EX void drawGrid() {
|
EX void drawGrid() {
|
||||||
|
if(!drawcell) drawcell = cwt.at;
|
||||||
color_t lightgrid = gridcolor;
|
color_t lightgrid = gridcolor;
|
||||||
lightgrid -= (lightgrid & 0xFF) / 2;
|
lightgrid -= (lightgrid & 0xFF) / 2;
|
||||||
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(gpushxto0(ccenter) * coldcenter);
|
transmatrix d2 = drawtrans * rgpushxto0(ccenter) * rspintox(gpushxto0(ccenter) * coldcenter);
|
||||||
@ -1634,21 +1648,6 @@ namespace mapeditor {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(drawing_tool && !mouseout()) {
|
|
||||||
initquickqueue();
|
|
||||||
dynamicval<ld> lw(vid.linewidth, vid.linewidth * texture::penwidth * 100);
|
|
||||||
if(holdmouse && mousekey == 'c')
|
|
||||||
queue_hcircle(rgpushxto0(lstart), hdist(lstart, mouseh));
|
|
||||||
else if(holdmouse && mousekey == 'l')
|
|
||||||
queueline(lstart, mouseh, texture::config.paint_color, 4 + vid.linequality, PPR::LINE);
|
|
||||||
else if(!holdmouse) {
|
|
||||||
transmatrix T = rgpushxto0(mouseh);
|
|
||||||
queueline(T * xpush0(-.1), T * xpush0(.1), texture::config.paint_color);
|
|
||||||
queueline(T * ypush0(-.1), T * ypush0(.1), texture::config.paint_color);
|
|
||||||
}
|
|
||||||
quickqueue();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!freedraw) {
|
if(!freedraw) {
|
||||||
|
|
||||||
sg = drawcellShapeGroup();
|
sg = drawcellShapeGroup();
|
||||||
@ -2217,6 +2216,7 @@ namespace mapeditor {
|
|||||||
if(sym == SDLK_F2) save_level();
|
if(sym == SDLK_F2) save_level();
|
||||||
if(sym == SDLK_F3) load_level();
|
if(sym == SDLK_F3) load_level();
|
||||||
if(sym == SDLK_F5) {
|
if(sym == SDLK_F5) {
|
||||||
|
dialog::push_confirm_dialog([] {
|
||||||
stop_game();
|
stop_game();
|
||||||
firstland = specialland = laCanvas;
|
firstland = specialland = laCanvas;
|
||||||
canvas_default_wall = waInvisibleFloor;
|
canvas_default_wall = waInvisibleFloor;
|
||||||
@ -2226,6 +2226,9 @@ namespace mapeditor {
|
|||||||
drawplayer = false;
|
drawplayer = false;
|
||||||
vid.use_smart_range = 2;
|
vid.use_smart_range = 2;
|
||||||
start_game();
|
start_game();
|
||||||
|
},
|
||||||
|
XLAT("Are you sure you want to restart? This will let you draw on a blank screen.")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2469,6 +2472,7 @@ namespace mapeditor {
|
|||||||
mapeditor::dtshapes.clear();
|
mapeditor::dtshapes.clear();
|
||||||
mapeditor::cfree = nullptr;
|
mapeditor::cfree = nullptr;
|
||||||
mapeditor::cfree_at = nullptr;
|
mapeditor::cfree_at = nullptr;
|
||||||
|
drawcell = nullptr;
|
||||||
}) +
|
}) +
|
||||||
addHook(hooks_removecells, 0, [] () {
|
addHook(hooks_removecells, 0, [] () {
|
||||||
modelcell.clear();
|
modelcell.clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user