Sails command now listens to race to check if goal velocity is met
#story[1196]
This commit is contained in:
@@ -362,11 +362,7 @@ public class MockRace extends RaceState {
|
|||||||
setBoatSpeed(boat);
|
setBoatSpeed(boat);
|
||||||
|
|
||||||
//Calculates the distance travelled, in meters, in the current timeslice.
|
//Calculates the distance travelled, in meters, in the current timeslice.
|
||||||
double distanceTravelledMeters = boat.calculateMetersTravelled(updatePeriodMilliseconds);
|
double distanceTravelledMeters = boat.calculateMetersTravelled(updatePeriodMilliseconds) * this.scaleFactor;
|
||||||
|
|
||||||
//Scale it.
|
|
||||||
distanceTravelledMeters = distanceTravelledMeters * this.scaleFactor;
|
|
||||||
|
|
||||||
|
|
||||||
//Move the boat forwards that many meters, and advances its time counters by enough milliseconds.
|
//Move the boat forwards that many meters, and advances its time counters by enough milliseconds.
|
||||||
boat.moveForwards(distanceTravelledMeters);
|
boat.moveForwards(distanceTravelledMeters);
|
||||||
@@ -388,32 +384,12 @@ public class MockRace extends RaceState {
|
|||||||
private void newOptimalVMG(MockBoat boat) {
|
private void newOptimalVMG(MockBoat boat) {
|
||||||
long tackPeriod = 1000;
|
long tackPeriod = 1000;
|
||||||
if (boat.getTimeSinceTackChange() > tackPeriod) {
|
if (boat.getTimeSinceTackChange() > tackPeriod) {
|
||||||
//System.out.println("optim called");
|
|
||||||
//Calculate the new VMG.
|
|
||||||
// VMG newVMG = boat.getPolars().calculateVMG(
|
|
||||||
// this.getWindDirection(),
|
|
||||||
// this.getWindSpeed(),
|
|
||||||
// boat.calculateBearingToNextMarker(),
|
|
||||||
// Bearing.fromDegrees(0d),
|
|
||||||
// Bearing.fromDegrees(359.99999d));
|
|
||||||
|
|
||||||
VMG newVMG = NewPolars.setBestVMG(this.getWindDirection(), this.getWindSpeed(), boat.getBearing());
|
VMG newVMG = NewPolars.setBestVMG(this.getWindDirection(), this.getWindSpeed(), boat.getBearing());
|
||||||
//System.out.println(newVMG);
|
|
||||||
//If the new vmg improves velocity, use it.
|
|
||||||
/*if (improvesVelocity(boat, newVMG)) {
|
|
||||||
}*/
|
|
||||||
boat.setVMG(newVMG);
|
boat.setVMG(newVMG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setBoatSpeed(MockBoat boat) {
|
private void setBoatSpeed(MockBoat boat) {
|
||||||
// VMG vmg = boat.getPolars().calculateVMG(
|
|
||||||
// this.getWindDirection(),
|
|
||||||
// this.getWindSpeed(),
|
|
||||||
// boat.getBearing(),
|
|
||||||
// Bearing.fromDegrees(boat.getBearing().degrees() - 1),
|
|
||||||
// Bearing.fromDegrees(boat.getBearing().degrees() + 1));
|
|
||||||
//VMG vmg = boat.getPolars().setBestVMG(this.getWindDirection(), this.getWindSpeed(), boat.getBearing());
|
|
||||||
VMG vmg = new VMG(NewPolars.calculateSpeed(
|
VMG vmg = new VMG(NewPolars.calculateSpeed(
|
||||||
this.getWindDirection(),
|
this.getWindDirection(),
|
||||||
this.getWindSpeed(),
|
this.getWindSpeed(),
|
||||||
|
|||||||
@@ -2,12 +2,15 @@ package mock.model.commandFactory;
|
|||||||
|
|
||||||
import mock.model.MockBoat;
|
import mock.model.MockBoat;
|
||||||
import mock.model.MockRace;
|
import mock.model.MockRace;
|
||||||
|
import mock.model.NewPolars;
|
||||||
|
import mock.model.VMG;
|
||||||
|
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
|
|
||||||
public class SailsCommand extends ObserverCommand {
|
public class SailsCommand extends ObserverCommand {
|
||||||
private boolean sailsOut;
|
private boolean sailsOut;
|
||||||
private double goalVelocity;
|
private double goalVelocity;
|
||||||
|
private double acceleration = 1;
|
||||||
|
|
||||||
public SailsCommand(MockRace race, MockBoat boat, boolean sailsOut) {
|
public SailsCommand(MockRace race, MockBoat boat, boolean sailsOut) {
|
||||||
super(race, boat);
|
super(race, boat);
|
||||||
@@ -17,11 +20,26 @@ public class SailsCommand extends ObserverCommand {
|
|||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
this.boat.setSailsOut(this.sailsOut);
|
this.boat.setSailsOut(this.sailsOut);
|
||||||
|
if(sailsOut) {
|
||||||
|
// Accelerate to VMG speed
|
||||||
|
double polarSpeed = NewPolars.calculateSpeed(race.getWindDirection(), race.getWindSpeed(), boat.getBearing());
|
||||||
|
VMG vmg = new VMG(polarSpeed, boat.getBearing());
|
||||||
|
goalVelocity = vmg.getSpeed();
|
||||||
|
} else {
|
||||||
|
// Decelerate to 0
|
||||||
|
goalVelocity = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Observable o, Object arg) {
|
public void update(Observable o, Object arg) {
|
||||||
|
if(sailsOut && boat.getCurrentSpeed() < goalVelocity) {
|
||||||
|
// Apply acceleration
|
||||||
|
} else if (!sailsOut && boat.getCurrentSpeed() > goalVelocity) {
|
||||||
|
// Apply deceleration
|
||||||
|
} else {
|
||||||
|
System.out.println(goalVelocity + " " + boat.getCurrentSpeed());
|
||||||
|
race.deleteObserver(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user