From 9799ff1ccfc71fe06ba37261fde5a7a87bc9cb9f Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 17 Sep 2022 17:34:54 +0200 Subject: [PATCH] ads-game:: view history while paused --- rogueviz/ads/control.cpp | 8 ++++++++ rogueviz/ads/display.cpp | 28 +++++++++++++++++++++++++++- rogueviz/ads/map.cpp | 7 +++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/rogueviz/ads/control.cpp b/rogueviz/ads/control.cpp index 191a10a9..952244fe 100644 --- a/rogueviz/ads/control.cpp +++ b/rogueviz/ads/control.cpp @@ -189,6 +189,14 @@ bool ads_turn(int idelta) { else if(a[16+9]) tc = pt; else if(a[16+10]) tc = -pt; + if(!paused) { + auto& v = ci_at[hybrid::get_where(vctr).first].shipstates; + v.emplace_back(); + v.back().at = ads_inverse(current * vctrV) * spin((ang+90)*degree); + v.back().start = ship_pt; + v.back().duration = pt; + } + current.T = cspin(3, 2, tc) * current.T; optimize_shift(current); diff --git a/rogueviz/ads/display.cpp b/rogueviz/ads/display.cpp index fd70da8e..d1c85432 100644 --- a/rogueviz/ads/display.cpp +++ b/rogueviz/ads/display.cpp @@ -2,6 +2,8 @@ namespace hr { namespace ads_game { +color_t shipcolor = 0x2020FFFF; + cross_result findflat(shiftpoint h) { return cross0(current * rgpushxto0(h)); } @@ -125,6 +127,31 @@ void draw_game_cell(cell *cs, ads_matrix V, ld plev) { } } + /* todo: binary search */ + if(paused) for(auto& rock: ci.shipstates) { + ld t; + hybrid::in_actual([&]{ + dynamicval b(geometry, gRotSpace); + auto h = V * rock.at; + t = cross0(current * h).shift; + }); + + if(t < -1e-6 || t > rock.duration + 1e-6) continue; + vector pts; + + auto& shape = shape_ship; + for(int i=0; i> rocks; + vector shipstates; eWalltype type; cellinfo() { mpd_terrain = 4;