static bool test_replay() { Directory::Create(Path(_T("output/results"))); std::ofstream f("output/results/res-sample.txt"); GlidePolar glide_polar(4.0); Waypoints waypoints; AircraftState state_last; TaskBehaviour task_behaviour; task_behaviour.SetDefaults(); task_behaviour.auto_mc = true; TaskManager task_manager(task_behaviour, waypoints); TaskEventsPrint default_events(verbose); task_manager.SetTaskEvents(default_events); glide_polar.SetBallast(1.0); task_manager.SetGlidePolar(glide_polar); OrderedTask* t = task_load(task_behaviour); if (t) { task_manager.Commit(*t); delete t; task_manager.Resume(); } else { return false; } // task_manager.get_task_advance().get_advance_state() = TaskAdvance::AUTO; Error error; FileLineReaderA *reader = new FileLineReaderA(replay_file, error); if (reader->error()) { delete reader; fprintf(stderr, "%s\n", error.GetMessage()); return false; } ReplayLoggerSim sim(reader); sim.state.netto_vario = 0; bool do_print = verbose; unsigned print_counter=0; NMEAInfo basic; basic.Reset(); while (sim.Update(basic) && !sim.started) { } state_last = sim.state; sim.state.wind.norm = 7; sim.state.wind.bearing = Angle::Degrees(330); auto time_last = sim.state.time; // uncomment this to manually go to first tp // task_manager.incrementActiveTaskPoint(1); FlyingComputer flying_computer; flying_computer.Reset(); FlyingState flying_state; flying_state.Reset(); while (sim.Update(basic)) { if (sim.state.time>time_last) { n_samples++; flying_computer.Compute(glide_polar.GetVTakeoff(), sim.state, sim.state.time - time_last, flying_state); sim.state.flying = flying_state.flying; task_manager.Update(sim.state, state_last); task_manager.UpdateIdle(sim.state); task_manager.UpdateAutoMC(sim.state, 0); task_manager.SetTaskAdvance().SetArmed(true); state_last = sim.state; if (verbose>1) { sim.print(f); f.flush(); } if (do_print) { PrintHelper::taskmanager_print(task_manager, sim.state); } do_print = (++print_counter % output_skip ==0) && verbose; } time_last = sim.state.time; }; if (verbose) { PrintDistanceCounts(); printf("# task elapsed %d (s)\n", (int)task_manager.GetStats().total.time_elapsed); printf("# task speed %3.1f (kph)\n", (int)task_manager.GetStats().total.travelled.GetSpeed()*3.6); printf("# travelled distance %4.1f (km)\n", (double)task_manager.GetStats().total.travelled.GetDistance()/1000.0); printf("# scored distance %4.1f (km)\n", (double)task_manager.GetStats().distance_scored/1000.0); if (task_manager.GetStats().total.time_elapsed > 0) { printf("# scored speed %3.1f (kph)\n", (double)task_manager.GetStats().distance_scored/(double)task_manager.GetStats().total.time_elapsed*3.6); } } return true; }
static bool test_replay() { std::ofstream f("results/res-sample.txt"); GlidePolar glide_polar(fixed(4.0)); Waypoints waypoints; AIRCRAFT_STATE state_last; TaskBehaviour task_behaviour; TaskEventsPrint default_events(verbose); TaskManager task_manager(default_events, waypoints); glide_polar.set_ballast(fixed(1.0)); task_manager.set_glide_polar(glide_polar); task_manager.get_task_behaviour().auto_mc = true; task_manager.get_task_behaviour().enable_trace = false; OrderedTask* blank = new OrderedTask(default_events, task_behaviour, glide_polar); OrderedTask* t = task_load(blank); if (t) { task_manager.commit(*t); task_manager.resume(); } else { return false; } // task_manager.get_task_advance().get_advance_state() = TaskAdvance::AUTO; ReplayLoggerSim sim; sim.state.NettoVario = fixed_zero; TCHAR szFilename[MAX_PATH]; ConvertCToT(szFilename, replay_file.c_str()); sim.SetFilename(szFilename); sim.Start(); bool do_print = verbose; unsigned print_counter=0; while (sim.Update() && !sim.started) { } state_last = sim.state; sim.state.wind.norm = fixed(7); sim.state.wind.bearing = Angle::degrees(fixed(330)); fixed time_last = sim.state.Time; // uncomment this to manually go to first tp // task_manager.incrementActiveTaskPoint(1); while (sim.Update()) { if (sim.state.Time>time_last) { n_samples++; if (sim.state.Speed> glide_polar.get_Vtakeoff()) { sim.state.flying_state_moving(sim.state.Time); } else { sim.state.flying_state_stationary(sim.state.Time); } task_manager.update(sim.state, state_last); task_manager.update_idle(sim.state); task_manager.update_auto_mc(sim.state, fixed_zero); task_manager.get_task_advance().set_armed(true); state_last = sim.state; if (verbose>1) { sim.print(f); f.flush(); } if (do_print) { PrintHelper::taskmanager_print(task_manager, sim.state); } do_print = (++print_counter % output_skip ==0) && verbose; } time_last = sim.state.Time; }; sim.Stop(); if (verbose) { distance_counts(); printf("# task elapsed %d (s)\n", (int)task_manager.get_stats().total.TimeElapsed); printf("# task speed %3.1f (kph)\n", (int)task_manager.get_stats().total.travelled.get_speed()*3.6); printf("# travelled distance %4.1f (km)\n", (double)task_manager.get_stats().total.travelled.get_distance()/1000.0); printf("# scored distance %4.1f (km)\n", (double)task_manager.get_stats().distance_scored/1000.0); if (task_manager.get_stats().total.TimeElapsed) { printf("# scored speed %3.1f (kph)\n", (double)task_manager.get_stats().distance_scored/(double)task_manager.get_stats().total.TimeElapsed*3.6); } } return true; }