mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-30 21:42:59 +00:00 
			
		
		
		
	nilrider:: basic save functionality (no load though)
This commit is contained in:
		| @@ -5,6 +5,7 @@ | ||||
| #include "level.cpp" | ||||
| #include "planning.cpp" | ||||
| #include "solver.cpp" | ||||
| #include "save.cpp" | ||||
|  | ||||
| namespace nilrider { | ||||
|  | ||||
| @@ -254,13 +255,19 @@ void main_menu() { | ||||
|     dialog::addItem("view the replay", 'v'); | ||||
|     dialog::add_action(toggle_replay); | ||||
|    | ||||
|     dialog::addItem("save the replay", 'e'); | ||||
|     dialog::addItem("save the replay", 's'); | ||||
|     dialog::add_action([] { | ||||
|       vector<int> ang; | ||||
|       for(auto& h: curlev->history) ang.push_back(heading_to_int(h.heading_angle)); | ||||
|       curlev->manual_replays.emplace_back(manual_replay{new_replay_name(), std::move(ang)}); | ||||
|       save(); | ||||
|       }); | ||||
|     } | ||||
|   else { | ||||
|     dialog::addItem("save this plan", 's'); | ||||
|     dialog::add_action([] { | ||||
|       curlev->plan_replays.emplace_back(plan_replay{new_replay_name(), curlev->plan}); | ||||
|       save(); | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,8 @@ struct planpoint { | ||||
|   planpoint(hyperpoint a, hyperpoint v): at(a), vel(v) {}; | ||||
|   }; | ||||
|  | ||||
| using plan_t = vector<planpoint>; | ||||
|  | ||||
| constexpr flagtype nrlPolar = Flag(1); | ||||
|  | ||||
| struct statue { | ||||
| @@ -47,6 +49,16 @@ struct triangledata { | ||||
|   array<color_t, 7> colors; | ||||
|   }; | ||||
|  | ||||
| struct manual_replay { | ||||
|   string name; | ||||
|   vector<int> headings; | ||||
|   }; | ||||
|  | ||||
| struct plan_replay { | ||||
|   string name; | ||||
|   plan_t plan; | ||||
|   }; | ||||
|  | ||||
| struct level { | ||||
|   string name; | ||||
|   char hotkey; | ||||
| @@ -94,8 +106,11 @@ struct level { | ||||
|  | ||||
|   vector<timestamp> history; | ||||
|    | ||||
|   vector<manual_replay> manual_replays; | ||||
|   vector<plan_replay> plan_replays; | ||||
|  | ||||
|   /** plan for the planning mode */ | ||||
|   vector<planpoint> plan; | ||||
|   plan_t plan; | ||||
|   void init_plan(); | ||||
|   bool simulate(); | ||||
|   void draw_planning_screen(); | ||||
|   | ||||
							
								
								
									
										37
									
								
								rogueviz/nilrider/save.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								rogueviz/nilrider/save.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| namespace nilrider { | ||||
|  | ||||
| const string ver = "0.1"; | ||||
|  | ||||
| string new_replay_name() { | ||||
|   time_t timer; | ||||
|   timer = time(NULL); | ||||
|   char timebuf[128];  | ||||
|   strftime(timebuf, 128, "%y%m%d-%H%M%S", localtime(&timer)); | ||||
|   return timebuf; | ||||
|   } | ||||
|  | ||||
| void save() { | ||||
|   println(hlog, "save called"); | ||||
|   fhstream f("nilrider.save", "wt"); | ||||
|   println(f, "version ", ver); | ||||
|   for(auto l: all_levels) { | ||||
|     for(auto& p: l->manual_replays) { | ||||
|       println(f, "*MANUAL"); | ||||
|       println(f, l->name); | ||||
|       println(f, p.name); | ||||
|       println(f, isize(p.headings)); | ||||
|       for(auto t: p.headings) println(f, t); | ||||
|       println(f); | ||||
|       } | ||||
|     for(auto& p: l->plan_replays) { | ||||
|       println(f, "*PLANNING"); | ||||
|       println(f, l->name); | ||||
|       println(f, p.name); | ||||
|       println(f, isize(p.plan)); | ||||
|       for(auto t: p.plan) println(f, format("%.6f %.6f %.6f %.6f", t.at[0], t.at[1], t.vel[0], t.vel[1])); | ||||
|       println(f); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue