diff --git a/rogueviz/ads/control.cpp b/rogueviz/ads/control.cpp index c4849596..9274af9d 100644 --- a/rogueviz/ads/control.cpp +++ b/rogueviz/ads/control.cpp @@ -24,6 +24,7 @@ void fire() { r->shape = &shape_missile; r->life_start = 0; r->life_end = M_PI; + r->shot_at = ship_pt; ads_matrix Scell(Id, 0); cell *lcell = hybrid::get_at(vctr, 0); diff --git a/rogueviz/ads/globals.cpp b/rogueviz/ads/globals.cpp index 31d6880c..4ce13de8 100644 --- a/rogueviz/ads/globals.cpp +++ b/rogueviz/ads/globals.cpp @@ -192,6 +192,7 @@ struct ads_object { expiry_data expire; vector* shape; ld last_shot; + ld shot_at; int hlast; map turret_states; diff --git a/rogueviz/ads/views.cpp b/rogueviz/ads/views.cpp index 8e3c14a5..1440216a 100644 --- a/rogueviz/ads/views.cpp +++ b/rogueviz/ads/views.cpp @@ -104,6 +104,10 @@ bool ads_draw_cell(cell *c, const shiftmatrix& V) { return false; } +bool missile_replay = false; + +purehookset hook_alter_replay; + void replay_animation() { nomap = main_rock ? (!hyperbolic || among(pmodel, mdRelPerspective, mdRelOrthogonal)) : !sl2; @@ -133,6 +137,19 @@ void replay_animation() { }); break; } + if(missile_replay == true) { + for(auto& [c, ci]: ci_at) for(auto& r: ci.rocks) { + if(r->type != oMissile) continue; + if(view_pt < r->shot_at + r->life_start) continue; + if(view_pt > r->shot_at + r->life_end) continue; + PIA({ + // vctr = new_vctr = c; + current = ads_matrix(cspin(3, 2, view_pt - r->shot_at)) * ads_inverse(r->at); + // vctrV = new_vctrV = current.T; + }); + } + } + callhooks(hook_alter_replay); } if(main_rock && hyperbolic) {