mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	vctr is now the hyperbolic cell (similar for some variables); also invincibility on start
This commit is contained in:
		| @@ -33,10 +33,10 @@ void restart() { | |||||||
|  |  | ||||||
|   ci_at.clear(); |   ci_at.clear(); | ||||||
|  |  | ||||||
|   gen_terrain(c, ci_at[c], -2); |   gen_terrain(vctr, ci_at[c], -2); | ||||||
|   forCellEx(c1, c) ci_at[c1].type = wtNone; |   forCellEx(c1, vctr) ci_at[c1].type = wtNone; | ||||||
|   ci_at[c].type = wtNone; |   ci_at[vctr].type = wtNone; | ||||||
|   ci_at[c].rocks.clear(); |   invincibility_pt = how_much_invincibility; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| void run_ads_game() { | void run_ads_game() { | ||||||
| @@ -62,7 +62,7 @@ void run_ads_game() { | |||||||
|     } |     } | ||||||
|   start_game(); |   start_game(); | ||||||
|  |  | ||||||
|   starting_point = cwt.at; |   starting_point = hybrid::get_where(cwt.at).first; | ||||||
|    |    | ||||||
|   rogueviz::rv_hook(hooks_frame, 100, view_ads_game); |   rogueviz::rv_hook(hooks_frame, 100, view_ads_game); | ||||||
|   rogueviz::rv_hook(hooks_prestats, 100, display_rsrc); |   rogueviz::rv_hook(hooks_prestats, 100, display_rsrc); | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ vector<string> move_names = { "acc down", "acc left", "acc up", "acc right", "fi | |||||||
| void fire() { | void fire() { | ||||||
|   if(!pdata.ammo) return; |   if(!pdata.ammo) return; | ||||||
|   pdata.ammo--; |   pdata.ammo--; | ||||||
|   auto g = hybrid::get_where(vctr); |   auto c = vctr; | ||||||
|   auto c = g.first; |  | ||||||
|   if(g.second != 0) println(hlog, "WARNING: vctr not zeroed"); |  | ||||||
|  |  | ||||||
|   ads_matrix S0 = ads_inverse(current * vctrV) * spin(ang*degree); |   ads_matrix S0 = ads_inverse(current * vctrV) * spin(ang*degree); | ||||||
|  |  | ||||||
| @@ -21,12 +19,12 @@ void fire() { | |||||||
|   r->life_start = 0; |   r->life_start = 0; | ||||||
|  |  | ||||||
|   ads_matrix Scell(Id, 0);     |   ads_matrix Scell(Id, 0);     | ||||||
|   cell *lcell = vctr; |   cell *lcell = hybrid::get_at(vctr, 0); | ||||||
|   auto wcell = hybrid::get_where(lcell); |   auto wcell = make_pair(vctr, 0); | ||||||
|    |    | ||||||
|   int steps = 0; |   int steps = 0; | ||||||
|  |  | ||||||
|   compute_life(vctr, unshift(r->at), [&] (cell *c1, ld t) { |   compute_life(lcell, unshift(r->at), [&] (cell *c1, ld t) { | ||||||
|     if(true) for(int i=0; i<lcell->type; i++) { |     if(true) for(int i=0; i<lcell->type; i++) { | ||||||
|       auto lcell1 = lcell->cmove(i); |       auto lcell1 = lcell->cmove(i); | ||||||
|       auto wcell1 = hybrid::get_where(lcell1); |       auto wcell1 = hybrid::get_where(lcell1); | ||||||
| @@ -118,7 +116,6 @@ bool ads_turn(int idelta) { | |||||||
|       current_ship = current; |       current_ship = current; | ||||||
|       vctr_ship = vctr; |       vctr_ship = vctr; | ||||||
|       vctrV_ship = vctrV; |       vctrV_ship = vctrV; | ||||||
|       vctr_ship_base = hybrid::get_where(vctr_ship).first; |  | ||||||
|       view_pt = 0; |       view_pt = 0; | ||||||
|       } |       } | ||||||
|     else { |     else { | ||||||
| @@ -172,8 +169,7 @@ bool ads_turn(int idelta) { | |||||||
|      |      | ||||||
|     if(!paused) { |     if(!paused) { | ||||||
|       pdata.fuel -= delta*accel*mul; |       pdata.fuel -= delta*accel*mul; | ||||||
|       cell *c = hybrid::get_where(vctr).first; |       gen_particles(rpoisson(delta*accel*mul*fuel_particle_qty), vctr, ads_inverse(current * vctrV) * spin(ang*degree+M_PI) * rots::uxpush(0.06 * scale), rsrc_color[rtFuel], fuel_particle_rapidity, fuel_particle_life, 0.02); | ||||||
|       gen_particles(rpoisson(delta*accel*mul*fuel_particle_qty), c, ads_inverse(current * vctrV) * spin(ang*degree+M_PI) * rots::uxpush(0.06 * scale), rsrc_color[rtFuel], fuel_particle_rapidity, fuel_particle_life, 0.02); |  | ||||||
|       } |       } | ||||||
|  |  | ||||||
|     ld tc = 0; |     ld tc = 0; | ||||||
| @@ -182,7 +178,7 @@ bool ads_turn(int idelta) { | |||||||
|     else if(a[16+10]) tc = -pt; |     else if(a[16+10]) tc = -pt; | ||||||
|  |  | ||||||
|     if(!paused && !game_over) { |     if(!paused && !game_over) { | ||||||
|       auto& v = ci_at[hybrid::get_where(vctr).first].shipstates; |       auto& v = ci_at[vctr].shipstates; | ||||||
|       v.emplace_back(); |       v.emplace_back(); | ||||||
|       v.back().at = ads_inverse(current * vctrV) * spin((ang+90)*degree); |       v.back().at = ads_inverse(current * vctrV) * spin((ang+90)*degree); | ||||||
|       v.back().start = ship_pt; |       v.back().start = ship_pt; | ||||||
|   | |||||||
| @@ -8,10 +8,7 @@ cross_result findflat(shiftpoint h) { | |||||||
|   return cross0(current * rgpushxto0(h)); |   return cross0(current * rgpushxto0(h)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| void draw_game_cell(cell *cs, ads_matrix V, ld plev) {   | void draw_game_cell(cell *c, ads_matrix V, ld plev) { | ||||||
|   auto g = PIA( hybrid::get_where(cs) ); |  | ||||||
|   adjust_to_zero(V, g, plev); |  | ||||||
|   auto c = g.first; |  | ||||||
|    |    | ||||||
|   cross_result center; |   cross_result center; | ||||||
|   vector<cross_result> hlist; |   vector<cross_result> hlist; | ||||||
| @@ -26,7 +23,7 @@ void draw_game_cell(cell *cs, ads_matrix V, ld plev) { | |||||||
|    |    | ||||||
|   if(1) { |   if(1) { | ||||||
|     ld d = hdist0(center.h); |     ld d = hdist0(center.h); | ||||||
|     if(d < vctr_dist) vctr_dist = d, new_vctr = PIA( hybrid::get_at(c, 0) ), new_vctrV = V; |     if(d < vctr_dist) vctr_dist = d, new_vctr = c, new_vctrV = V; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   auto& ci = ci_at[c]; |   auto& ci = ci_at[c]; | ||||||
| @@ -152,7 +149,7 @@ void draw_game_cell(cell *cs, ads_matrix V, ld plev) { | |||||||
|     queuecurve(shiftless(Id), 0xFF, shipcolor, PPR::LINE); |     queuecurve(shiftless(Id), 0xFF, shipcolor, PPR::LINE); | ||||||
|     } |     } | ||||||
|    |    | ||||||
|   if(paused && c == vctr_ship_base && !game_over) { |   if(paused && c == vctr_ship && !game_over) { | ||||||
|     vector<hyperpoint> pts; |     vector<hyperpoint> pts; | ||||||
|     vector<ld> times; |     vector<ld> times; | ||||||
|     int ok = 0, bad = 0; |     int ok = 0, bad = 0; | ||||||
| @@ -210,8 +207,6 @@ void view_ads_game() { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     ); |     ); | ||||||
|   // current = current * gpushxto0(p); |  | ||||||
|   // vctrV = rgpushxto0(p) * vctrV; |  | ||||||
|  |  | ||||||
|   if(1) { |   if(1) { | ||||||
|     make_shape(); |     make_shape(); | ||||||
| @@ -221,9 +216,8 @@ void view_ads_game() { | |||||||
|     auto cmp = [] (const key& a1, const key& a2) { return get<0>(a1) < get<0>(a2); }; |     auto cmp = [] (const key& a1, const key& a2) { return get<0>(a1) < get<0>(a2); }; | ||||||
|     std::priority_queue<key, vector<key>, decltype(cmp)> dq(cmp); |     std::priority_queue<key, vector<key>, decltype(cmp)> dq(cmp); | ||||||
|     auto visit = [&] (ld t, cell *c, const ads_matrix& V) { |     auto visit = [&] (ld t, cell *c, const ads_matrix& V) { | ||||||
|       auto w = hybrid::get_where(c); |       if(visited.count(c)) return; | ||||||
|       if(visited.count(w.first)) return; |       visited.insert(c); | ||||||
|       visited.insert(w.first); |  | ||||||
|       dq.emplace(t, c, V); |       dq.emplace(t, c, V); | ||||||
|       }; |       }; | ||||||
|      |      | ||||||
| @@ -245,17 +239,17 @@ void view_ads_game() { | |||||||
|       draw_game_cell(c, V, plev); |       draw_game_cell(c, V, plev); | ||||||
|        |        | ||||||
|       hybrid::in_actual([&] { |       hybrid::in_actual([&] { | ||||||
|         for(int i=0; i<c->type-2; i++) { |         auto csl = hybrid::get_at(c, 0); | ||||||
|           cell *c2 = c->cmove(i); |         for(int i=0; i<c->type; i++) { | ||||||
|           auto V1 = V * currentmap->adj(c, i); |           cell *csl2 = csl->cmove(i); | ||||||
|  |           auto V1 = V * currentmap->adj(csl, i); | ||||||
|           optimize_shift(V1); |           optimize_shift(V1); | ||||||
|  |  | ||||||
|           auto g = hybrid::get_where(c2); |           auto g = hybrid::get_where(csl2); | ||||||
|           adjust_to_zero(V1, g, plev); |           adjust_to_zero(V1, g, plev); | ||||||
|           c2 = hybrid::get_at(g.first, 0); |  | ||||||
|           auto center = findflat(V1 * C0); |           auto center = findflat(V1 * C0); | ||||||
|  |  | ||||||
|           visit(-hdist0(center.h), c2, V1); |           visit(-hdist0(center.h), g.first, V1); | ||||||
|           } |           } | ||||||
|         }); |         }); | ||||||
|       } |       } | ||||||
|   | |||||||
| @@ -20,11 +20,8 @@ ads_matrix current; | |||||||
| /** transform world coordinates to ship coordinates (used when paused) */ | /** transform world coordinates to ship coordinates (used when paused) */ | ||||||
| ads_matrix current_ship; | ads_matrix current_ship; | ||||||
|  |  | ||||||
| /** SL cell closest to the current view/ship */ |  | ||||||
| cell *vctr, *new_vctr, *vctr_ship; |  | ||||||
|  |  | ||||||
| /** hyperbolic cell closest to the current view/ship */ | /** hyperbolic cell closest to the current view/ship */ | ||||||
| cell *vctr_ship_base; | cell *vctr, *new_vctr, *vctr_ship; | ||||||
|  |  | ||||||
| /** world coordinates of vctr -- technically, this is a shiftmatrix */ | /** world coordinates of vctr -- technically, this is a shiftmatrix */ | ||||||
| ads_matrix vctrV, new_vctrV, vctrV_ship; | ads_matrix vctrV, new_vctrV, vctrV_ship; | ||||||
|   | |||||||
| @@ -221,8 +221,7 @@ void crash_ship() { | |||||||
|   pdata.hitpoints--; |   pdata.hitpoints--; | ||||||
|   if(pdata.hitpoints <= 0) game_over = true; |   if(pdata.hitpoints <= 0) game_over = true; | ||||||
|   hybrid::in_actual([&] { |   hybrid::in_actual([&] { | ||||||
|     cell *c = hybrid::get_where(vctr).first; |     gen_particles(rpoisson(crash_particle_qty * 2), vctr, ads_inverse(current * vctrV) * spin(ang*degree), rsrc_color[rtHull], crash_particle_rapidity, crash_particle_life); | ||||||
|     gen_particles(rpoisson(crash_particle_qty * 2), c, ads_inverse(current * vctrV) * spin(ang*degree), rsrc_color[rtHull], crash_particle_rapidity, crash_particle_life); |  | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -271,7 +270,7 @@ void handle_crashes() { | |||||||
|       hybrid::in_actual([&] { |       hybrid::in_actual([&] { | ||||||
|         swap(h1[2], h1[3]); |         swap(h1[2], h1[3]); | ||||||
|         ads_point rel = ads_inverse(current * vctrV) * ads_point(h1, 0); |         ads_point rel = ads_inverse(current * vctrV) * ads_point(h1, 0); | ||||||
|         cell *c = vctr; |         cell *c = hybrid::get_at(vctr, 0); | ||||||
|         virtualRebase(c, rel.h); |         virtualRebase(c, rel.h); | ||||||
|         optimize_shift(rel); |         optimize_shift(rel); | ||||||
|         auto w = hybrid::get_where(c); |         auto w = hybrid::get_where(c); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue