draft implementation of SWC start procedure - still waiting for OSCAR flag image

This commit is contained in:
fmittag committed 2016-11-10 15:21:08 +01:00
1 parent d8c9a6f3e2
commit 23a1787d9c
3 files changed
+22 -39

No files matched your search

@@ -11,7 +11,7 @@ import com.sap.sailing.domain.common.racelog.RacingProcedureType;
public class SWCStartModeFlagFinder extends RaceLogAnalyzer<Flags> {
private final static List<Flags> defaultStartModeFlags = Arrays.asList(Flags.PAPA, Flags.BLACK, Flags.UNIFORM);
private final static List<Flags> defaultStartModeFlags = Arrays.asList(Flags.BLACK, Flags.UNIFORM);
private final RacingProcedureTypeAnalyzer procedureAnalyzer;
private final List<Flags> startModeFlags;
@@ -9,10 +9,10 @@ public enum RaceStateEvents {
RRS26_STARTMODE_UP,
RRS26_STARTMODE_DOWN,
SWC_CLASS_UP,
SWC_CLASS_OVER_OSCAR_UP,
SWC_STARTMODE_UP,
SWC_STARTMODE_DOWN,
SWC_CLASS_DOWN,
SWC_CLASS_OVER_OSCAR_DOWN,
ESS_AP_DOWN,
ESS_THREE_UP,
@@ -30,10 +30,8 @@ import com.sap.sse.common.TimePoint;
public class SWCRacingProcedureImpl extends BaseRacingProcedure implements SWCRacingProcedure {
private final static long startPhaseClassUpInterval = 6 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseStartModeUpInterval = 6 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseStartModeDownInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseClassDownInterval = 1 * 60 * 1000; // minutes * seconds * milliseconds
private final static long CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL = 6 * 60 * 1000; // 6 minutes before start
private final static long CLASS_OVER_OSCAR_AND_STARTMODE_DOWN_INTERVAL = 1 * 60 * 1000; // 1 minute after start
private final SWCStartModeFlagFinder startModeFlagAnalyzer;
@@ -92,21 +90,17 @@ public class SWCRacingProcedureImpl extends BaseRacingProcedure implements SWCRa
@Override
public boolean isStartphaseActive(TimePoint startTime, TimePoint now) {
if (now.before(startTime)) {
long timeTillStart = startTime.minus(now.asMillis()).asMillis();
return timeTillStart < startPhaseClassUpInterval;
}
return false;
return now.before(startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL));
}
@Override
protected Collection<RaceStateEvent> createStartStateEvents(TimePoint startTime) {
return Arrays.<RaceStateEvent> asList(
new RaceStateEventImpl(startTime.minus(startPhaseClassUpInterval), RaceStateEvents.SWC_CLASS_UP),
new RaceStateEventImpl(startTime.minus(startPhaseStartModeUpInterval), RaceStateEvents.SWC_STARTMODE_UP),
new RaceStateEventImpl(startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL), RaceStateEvents.SWC_CLASS_OVER_OSCAR_UP),
new RaceStateEventImpl(startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL), RaceStateEvents.SWC_STARTMODE_UP),
new RaceStateEventImpl(startTime, RaceStateEvents.START),
new RaceStateEventImpl(startTime.plus(startPhaseStartModeDownInterval), RaceStateEvents.SWC_STARTMODE_DOWN),
new RaceStateEventImpl(startTime.plus(startPhaseClassDownInterval), RaceStateEvents.SWC_CLASS_DOWN));
new RaceStateEventImpl(startTime.plus(CLASS_OVER_OSCAR_AND_STARTMODE_DOWN_INTERVAL), RaceStateEvents.SWC_STARTMODE_DOWN),
new RaceStateEventImpl(startTime.plus(CLASS_OVER_OSCAR_AND_STARTMODE_DOWN_INTERVAL), RaceStateEvents.SWC_CLASS_OVER_OSCAR_DOWN));
}
@Override
@@ -116,9 +110,9 @@ public class SWCRacingProcedureImpl extends BaseRacingProcedure implements SWCRa
if (!startmodeFlagHasBeenSet) {
setStartModeFlag(event.getTimePoint(), cachedStartmodeFlag);
}
case SWC_CLASS_UP:
case SWC_CLASS_OVER_OSCAR_UP:
case SWC_STARTMODE_DOWN:
case SWC_CLASS_DOWN:
case SWC_CLASS_OVER_OSCAR_DOWN:
getChangedListeners().onActiveFlagsChanged(this);
return true;
default:
@@ -130,30 +124,19 @@ public class SWCRacingProcedureImpl extends BaseRacingProcedure implements SWCRa
public FlagPoleState getActiveFlags(TimePoint startTime, TimePoint now) {
Flags classFlag = getConfiguration().getClassFlag() != null ?
getConfiguration().getClassFlag() : Flags.CLASS;
if (now.before(startTime.minus(startPhaseClassUpInterval))) {
if (now.before(startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL))) {
return new FlagPoleState(
Arrays.asList(new FlagPole(classFlag, false), new FlagPole(cachedStartmodeFlag, false)),
Arrays.asList(new FlagPole(classFlag, Flags.OSCAR, false), new FlagPole(cachedStartmodeFlag, false)),
null,
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, false)),
startTime.minus(startPhaseClassUpInterval));
} else if (now.before(startTime.minus(startPhaseStartModeUpInterval))) {
Arrays.asList(new FlagPole(classFlag, Flags.OSCAR, true), new FlagPole(cachedStartmodeFlag, true)),
startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL));
} else if (now.before(startTime.plus(CLASS_OVER_OSCAR_AND_STARTMODE_DOWN_INTERVAL))) {
return new FlagPoleState(
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, false)),
startTime.minus(startPhaseClassUpInterval),
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, true)),
startTime.minus(startPhaseStartModeUpInterval));
} else if (now.before(startTime.minus(startPhaseStartModeDownInterval))) {
return new FlagPoleState(
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, true)),
startTime.minus(startPhaseStartModeUpInterval),
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, false)),
startTime.minus(startPhaseStartModeDownInterval));
} else if (now.before(startTime)) {
return new FlagPoleState(
Arrays.asList(new FlagPole(classFlag, true), new FlagPole(cachedStartmodeFlag, false)),
startTime.minus(startPhaseStartModeDownInterval),
Arrays.asList(new FlagPole(classFlag, false), new FlagPole(cachedStartmodeFlag, false)),
startTime);
Arrays.asList(new FlagPole(classFlag, Flags.OSCAR, true), new FlagPole(cachedStartmodeFlag, true)),
startTime.minus(CLASS_OVER_OSCAR_AND_STARTMODE_UP_INTERVAL),
Arrays.asList(new FlagPole(classFlag, Flags.OSCAR, false), new FlagPole(cachedStartmodeFlag, false)),
startTime.plus(CLASS_OVER_OSCAR_AND_STARTMODE_DOWN_INTERVAL));
} else {
if (isIndividualRecallDisplayed(now)) {
return new FlagPoleState(