From 0f1f4ce99b25d6e412ed817b9c032221a38519f5 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 9 May 2022 14:45:57 +0200 Subject: [PATCH] nilrider:: recording if CAP_VIDEO is available --- rogueviz/nilrider/nilrider.cpp | 26 ++++++++++++++++++++++++++ rogueviz/nilrider/planning.cpp | 8 ++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/rogueviz/nilrider/nilrider.cpp b/rogueviz/nilrider/nilrider.cpp index 74e44523..a80c8b1f 100644 --- a/rogueviz/nilrider/nilrider.cpp +++ b/rogueviz/nilrider/nilrider.cpp @@ -459,6 +459,32 @@ void main_menu() { dialog::addItem("change settings", 'o'); dialog::add_action_push(settings); + #if CAP_VIDEO + dialog::addItem("record video", 'v'); + dialog::add_action([] { + dialog::openFileDialog(anims::videofile, XLAT("record to video file"), + ".mp4", [] { + anims::period = isize(curlev->history); + anims::noframes = anims::period * 60 / 1000; + int a = addHook(anims::hooks_anim, 100, [] { + int ttick = ticks % isize(curlev->history); + curlev->current = curlev->history[ttick]; + curlev->current.centerview(curlev); + anims::moved(); + }); + int af = addHook(hooks_frame, 100, [] { + int ttick = ticks % isize(curlev->history); + curlev->current = curlev->history[ttick]; + if(planning_mode && !view_replay) curlev->draw_planning_screen(); + }); + bool b = anims::record_video_std(); + delHook(anims::hooks_anim, a); + delHook(hooks_frame, af); + return b; + }); + }); + #endif + dialog::addItem("quit", 'q'); dialog::add_action([] { on_quit(); diff --git a/rogueviz/nilrider/planning.cpp b/rogueviz/nilrider/planning.cpp index 3d09302c..70522d7f 100644 --- a/rogueviz/nilrider/planning.cpp +++ b/rogueviz/nilrider/planning.cpp @@ -95,6 +95,10 @@ void level::compute_plan_transform() { void level::draw_planning_screen() { if(just_refreshing) return; + + if(inHighQual) { + new_levellines_for = mousept = current.where; + } curlev->init_textures(); dynamicval g(geometry, gEuclid); dynamicval pm(pmodel, mdDisk); @@ -119,9 +123,9 @@ void level::draw_planning_screen() { return h; }; - mousept = scr_to_map(hpxy(mousex, mousey)); + if(!inHighQual) mousept = scr_to_map(hpxy(mousex, mousey)); - box = scr_to_map(hpxy(mousex + 5, mousey))[0] - mousept[0]; + box = inHighQual ? scr_to_map(hpxy(10, 0))[0] - scr_to_map(hpxy(0,0))[0] : scr_to_map(hpxy(mousex + 5, mousey))[0] - mousept[0]; /* draw the map */ auto& p = queuepolyat(T, shPlanFloor, 0xFFFFFFFF, PPR::FLOOR);