private void checkTimings(List<FootstepTiming> upcomingFootstepTimings) { if (upcomingFootstepTimings.isEmpty()) return; boolean timingsValid = upcomingFootstepTimings.get(0).hasAbsoluteTime(); boolean atLeastOneFootstepHadTiming = upcomingFootstepTimings.get(0).hasAbsoluteTime(); double lastTime = upcomingFootstepTimings.get(0).getSwingStartTime(); timingsValid = timingsValid && lastTime > 0.0; for (int footstepIdx = 1; footstepIdx < upcomingFootstepTimings.size(); footstepIdx++) { FootstepTiming footstep = upcomingFootstepTimings.get(footstepIdx); boolean timeIncreasing = footstep.getSwingStartTime() > lastTime; timingsValid = timingsValid && footstep.hasAbsoluteTime() && timeIncreasing; atLeastOneFootstepHadTiming = atLeastOneFootstepHadTiming || footstep.hasAbsoluteTime(); lastTime = footstep.getSwingStartTime(); if (!timingsValid) break; } if (atLeastOneFootstepHadTiming && !timingsValid) { PrintTools.warn("Recieved footstep data with invalid timings. Using swing and transfer times instead."); for (int footstepIdx = 1; footstepIdx < upcomingFootstepTimings.size(); footstepIdx++) upcomingFootstepTimings.get(footstepIdx).removeAbsoluteTime(); } } }