X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosFlightStats.java;h=c2e4e2a36bb8a72fc9b023bdebfffc7eb2c47b3a;hb=558a143315f0345b79cc4f22aa4b643fedcded9c;hp=7159cc35e8d6ef7effb6bfe7b685d1158ba3cb24;hpb=46ff12a88136d3c274610255a918870aff9328cd;p=fw%2Faltos diff --git a/altoslib/AltosFlightStats.java b/altoslib/AltosFlightStats.java index 7159cc35..c2e4e2a3 100644 --- a/altoslib/AltosFlightStats.java +++ b/altoslib/AltosFlightStats.java @@ -26,6 +26,7 @@ public class AltosFlightStats { public double max_speed; public double max_acceleration; public double[] state_speed = new double[AltosLib.ao_flight_invalid + 1]; + public double[] state_enter_speed = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_accel = new double[AltosLib.ao_flight_invalid + 1]; public double[] state_time = new double[AltosLib.ao_flight_invalid + 1]; public String product; @@ -53,11 +54,14 @@ public class AltosFlightStats { double landed_time(AltosFlightSeries series) { double landed_state_time = AltosLib.MISSING; + double prev_state_time = AltosLib.MISSING; if (series.state_series != null) { for (AltosTimeValue state : series.state_series) { if (state.value == AltosLib.ao_flight_landed) { landed_state_time = state.time; break; + } else { + prev_state_time = state.time; } } } @@ -95,7 +99,7 @@ public class AltosFlightStats { } } - if (landed_time == AltosLib.MISSING) + if (landed_time == AltosLib.MISSING || (prev_state_time != AltosLib.MISSING && landed_time < prev_state_time)) landed_time = landed_state_time; return landed_time; } @@ -128,6 +132,8 @@ public class AltosFlightStats { private void add_times(AltosFlightSeries series, int state, double start_time, double end_time) { double delta_time = end_time - start_time; if (0 <= state && state <= AltosLib.ao_flight_invalid && delta_time > 0) { + if (state_enter_speed[state] == AltosLib.MISSING) + state_enter_speed[state] = series.speed_series.value(start_time); speeds[state].value += series.speed_series.average(start_time, end_time) * delta_time; speeds[state].time += delta_time; accels[state].value += series.accel_series.average(start_time, end_time) * delta_time; @@ -189,6 +195,7 @@ public class AltosFlightStats { for (int s = 0; s < AltosLib.ao_flight_invalid + 1; s++) { state_speed[s] = AltosLib.MISSING; + state_enter_speed[s] = AltosLib.MISSING; state_accel[s] = AltosLib.MISSING; state_time[s] = 0; speeds[s] = new AltosTimeValue(0, 0);