package senscript; import device.SensorNode; import map.MapLayer; public class Command_MOVE extends Command { protected String arg1 = "" ; protected String arg2 = "" ; protected String arg3 = "" ; protected String arg4 = "" ; public Command_MOVE(SensorNode sensor, String arg1, String arg2, String arg3, String arg4) { this.sensor = sensor ; this.arg1 = arg1 ; this.arg2 = arg2 ; this.arg3 = arg3 ; this.arg4 = arg4 ; } @Override public double execute() { String vArg1 = sensor.getScript().getVariableValue(arg1); String vArg2 = sensor.getScript().getVariableValue(arg2); String vArg3 = sensor.getScript().getVariableValue(arg3); String vArg4 = sensor.getScript().getVariableValue(arg4); double currentLongitude = sensor.getLongitude(); double currentLatitude = sensor.getLatitude(); double currentElevation = sensor.getElevation(); double newLongitude = Double.valueOf(vArg1); double newLatitude = Double.valueOf(vArg2); double newElevation = Double.valueOf(vArg3); double speed = Double.valueOf(vArg4); double v = MapLayer.distance(currentLongitude, currentLatitude, newLongitude, newLatitude)/speed; int n = (int) v; double d = v - n; double stepX = (newLongitude-currentLongitude)/n; double stepY = (newLatitude-currentLatitude)/n; double stepZ = (newElevation-currentElevation)/n; double x = currentLongitude; double y = currentLatitude; double z = currentElevation; sensor.initLocEvents(); for(int i=1; i<n; i++) { x += stepX; y += stepY; z += stepZ; sensor.addLocEvent(1, x, y, z); } if(d>0) sensor.addLocEvent(d, newLongitude, newLatitude, newElevation); return 0 ; } @Override public String toString() { return "MOVE"; } }