package de.otto.roborace.controller;
import jline.ArgumentCompletor.WhitespaceArgumentDelimiter;
import de.otto.roborace.controller.EventLoop.EventLoopListener;
import de.otto.roborace.model.DataModel;
import de.otto.roborace.model.RacingState;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.hardware.sensor.SensorMode;
/**
* Created by luca on 27.03.15.
*/
public class CourseController implements EventLoopListener{
private EV3ColorSensor sensor = new EV3ColorSensor(SensorPort.S1);
private DataModel dataModel;
private RacerController controller;
private final SensorMode brightnessSensorMode;
private final float[] lastSample;
public CourseController(DataModel dataModel, RacerController controller) {
this.dataModel = dataModel;
this.controller = controller;
brightnessSensorMode = sensor.getRGBMode();
lastSample = new float[brightnessSensorMode.sampleSize()];
}
private boolean isCourseBoundary(float[] sample) {
return CourseColor.LIGHTYELLOW.matches(sample);
}
private boolean isFinishingLine(float[] sample) {
return CourseColor.RED.matches(sample);
}
@Override
public void process() {
brightnessSensorMode.fetchSample(lastSample, 0);
if(dataModel.getRacingState().equals(RacingState.RACE)) {
if (isCourseBoundary(lastSample) && !dataModel.wasBoundaryReachedRecently()) {
dataModel.courseBoundaryReached();
controller.courseBoundaryReached();
} else if (isFinishingLine(lastSample)) {
System.out.println("Finish line reached | r:" + lastSample[0] + " g:" + lastSample[1] + " b:" + lastSample[2]);
controller.finishLineReached();
}
}
}
}