void TaskRenderer::Draw(const OrderedTask &task) { tpv.SetBoundingBox(task.GetBoundingBox(screen_bounds)); tpv.SetActiveIndex(task.GetActiveIndex()); for (unsigned i = 0; i < 4; i++) { tpv.ResetIndex(); if (i != TaskPointRenderer::LAYER_SYMBOLS && i != TaskPointRenderer::LAYER_LEG) { tpv.SetModeOptional(true); for (const auto &tp : task.GetOptionalStartPoints()) tpv.Draw(tp, (TaskPointRenderer::Layer)i); } tpv.SetModeOptional(false); for (const auto &tp : task.GetPoints()) tpv.Draw(tp, (TaskPointRenderer::Layer)i); } if (task.GetFactoryType() == TaskFactoryType::MAT) { // now draw MAT circles tpv.ResetIndex(); tpv.SetModeOptional(false); for (const auto *i : task.GetMatPoints()) tpv.Draw(*i, (TaskPointRenderer::Layer)2); } }
void TaskRenderer::Draw(const OrderedTask &task) { tpv.SetBoundingBox(task.get_bounding_box(screen_bounds)); tpv.SetActiveIndex(task.GetActiveIndex()); for (unsigned i = 0; i < 4; i++) { tpv.ResetIndex(); if (i != RenderTaskPoint::LAYER_SYMBOLS && i != RenderTaskPoint::LAYER_LEG) { tpv.SetModeOptional(true); for (unsigned j = 0, end = task.optional_start_points_size(); j < end; ++j) tpv.Draw(*task.get_optional_start(j), (RenderTaskPoint::Layer)i); } tpv.SetModeOptional(false); for (unsigned j = 0, end = task.TaskSize(); j < end; ++j) tpv.Draw(task.GetTaskPoint(j), (RenderTaskPoint::Layer)i); } }
static int GetIndexInTask(const OrderedTask &task, const Waypoint &waypoint) { if (task.TaskSize() == 0) return -1; unsigned i = task.GetActiveIndex(); if (i >= task.TaskSize()) return -1; int TPindex = -1; for (unsigned i = task.TaskSize(); i--;) { const OrderedTaskPoint &tp = task.GetPoint(i); if (tp.GetWaypoint() == waypoint) { TPindex = i; break; } } return TPindex; }
void TaskRenderer::Draw(const OrderedTask &task) { tpv.SetBoundingBox(task.GetBoundingBox(screen_bounds)); tpv.SetActiveIndex(task.GetActiveIndex()); for (unsigned i = 0; i < 4; i++) { tpv.ResetIndex(); if (i != TaskPointRenderer::LAYER_SYMBOLS && i != TaskPointRenderer::LAYER_LEG) { tpv.SetModeOptional(true); for (const auto &tp : task.GetOptionalStartPoints()) tpv.Draw(tp, (TaskPointRenderer::Layer)i); } tpv.SetModeOptional(false); for (const auto &tp : task.GetPoints()) tpv.Draw(tp, (TaskPointRenderer::Layer)i); } }
static void Run(DebugReplay &replay, OrderedTask &task, const GlidePolar &glide_polar) { Validity last_location_available; last_location_available.Clear(); AircraftState last_as; bool last_as_valid = false; bool task_finished = false; unsigned active_taskpoint_index(-1); char time_buffer[32]; while (replay.Next()) { const MoreData &basic = replay.Basic(); const DerivedInfo &calculated = replay.Calculated(); if (!basic.location_available) { last_location_available.Clear(); continue; } const AircraftState current_as = ToAircraftState(basic, calculated); if (!last_location_available) { last_as = current_as; last_as_valid = true; last_location_available = basic.location_available; continue; } if (!basic.location_available.Modified(last_location_available)) continue; if (!last_as_valid) { last_as = current_as; last_as_valid = true; last_location_available = basic.location_available; continue; } task.Update(current_as, last_as, glide_polar); task.UpdateIdle(current_as, glide_polar); task.SetTaskAdvance().SetArmed(true); if (task.GetActiveIndex() != active_taskpoint_index) { active_taskpoint_index = task.GetActiveIndex(); FormatISO8601(time_buffer, basic.date_time_utc); printf("%s active_taskpoint_index=%u\n", time_buffer, active_taskpoint_index); } const TaskStats &task_stats = task.GetStats(); if (task_finished != task_stats.task_finished) { task_finished = true; FormatISO8601(time_buffer, basic.date_time_utc); printf("%s task finished\n", time_buffer); } last_as = current_as; last_as_valid = true; } const TaskStats &task_stats = task.GetStats(); printf("task_started=%d task_finished=%d\n", task_stats.start.task_started, task_stats.task_finished); printf("task elapsed %ds\n", (int)task_stats.total.time_elapsed); printf("task speed %1.2f kph\n", double(task_stats.total.travelled.GetSpeed() * 3.6)); printf("travelled distance %1.3f km\n", double(task_stats.total.travelled.GetDistance() / 1000)); printf("scored distance %1.3f km\n", double(task_stats.distance_scored / 1000)); if (task_stats.total.time_elapsed > 0) printf("scored speed %1.2f kph\n", double(task_stats.distance_scored / task_stats.total.time_elapsed * 3.6)); }