Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package land.neutrino.rachel.rocket.adhara;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonPrimitive;
- import krpc.client.Connection;
- import krpc.client.RPCException;
- import krpc.client.Stream;
- import krpc.client.services.MechJeb;
- import krpc.client.services.SpaceCenter;
- import land.neutrino.rachel.Rachel;
- import land.neutrino.rachel.rocket.FirstStage;
- import land.neutrino.rachel.rocket.RocketBody;
- import land.neutrino.rachel.rocket.neutrino.FirstStageDatas;
- import land.neutrino.rachel.tracking.RequestType;
- import land.neutrino.rachel.tracking.StageEnum;
- import land.neutrino.rachel.utils.*;
- import org.javatuples.Pair;
- import org.javatuples.Triplet;
- import javax.swing.*;
- import java.text.DecimalFormat;
- import java.util.*;
- public class Booster extends FirstStage {
- protected boolean Shoulditland;
- protected SpaceCenter spaceCenter;
- protected SpaceCenter.Vessel vessel;
- protected LandingComplexEnum landingComplexTarget;
- public Booster(SpaceCenter.Vessel vessel, SpaceCenter spaceCenter, String stageName, Connection connection, RocketBody rocketBody,LandingComplexEnum landingComplexEnum, boolean Shoulditland) {
- super(rocketBody, stageName, connection);
- this.Shoulditland = Shoulditland;
- firstStageDatas = new FirstStageDatas();
- this.stageName = stageName;
- this.Shoulditland = Shoulditland;
- this.spaceCenter = spaceCenter;
- this.landingComplexTarget = landingComplexEnum;
- downrange = distance(landingComplexTarget.getLat(), 28.5289202545645, landingComplexTarget.getLong(), -80.52526259414269, 0.0, 0.0);
- }
- double downrange = 0;
- @Override
- public void startup() {}
- @Override
- public void meco() {
- try {
- for (SpaceCenter.Engine engine : vessel.getParts().getEngines()) {
- engine.setActive(false);
- }
- for (SpaceCenter.Engine engine : vessel.getParts().getEngines()) {
- engine.setThrustLimit(1f);
- }
- Rachel.getInstance().sendAlert("First Stage MECO", StageEnum.STAGE_1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @Override
- public void boostbackburn() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- vessel.getControl().setThrottle(0f);
- vessel.getControl().toggleActionGroup(4);
- //vessel.getControl().activateNextStage();
- vessel.getAutoPilot().engage();
- //-10
- // if(!landingComplexTarget.equals(LandingComplexEnum.Droneship)) {
- int pitch = 0;
- if ((rocketBody.equals(RocketBody.SIDE_BOOSTER))) {
- pitch = 25;
- } else if (rocketBody.equals(RocketBody.CENTER_CORE)) {
- pitch = 10;
- } else if (landingComplexTarget.equals(LandingComplexEnum.Droneship)) {
- pitch = 10;
- } else {
- pitch = 12;
- }
- vessel.getAutoPilot().targetPitchAndHeading(pitch, 273);
- System.out.println(stageName + " : " + stageName + " : " + "Flip");
- for (SpaceCenter.RCS rcs : vessel.getParts().getRCS()) {
- rcs.setEnabled(true);
- }
- vessel.getControl().setRCS(true);
- Thread.sleep(5000);
- vessel.getParts().withTag("centerEngine").get(0).getEngine().setActive(true);
- vessel.getControl().setThrottle(1f);
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- vessel.getParts().withTag("centerEngine").get(0).getEngine().setActive(true);
- while (Math.abs(flight.getHeading() - 273) > 5) {
- System.out.println(stageName + " : Pitch " + flight.getPitch() + " Heading " + flight.getHeading());
- }
- vessel.getParts().withTag("centerEngine").get(0).getEngine().setActive(true);
- for (SpaceCenter.Part engine : vessel.getParts().withTag("sideEngine")) {
- engine.getEngine().setActive(true);
- }
- System.out.println(stageName + " : " + "Engine startup");
- Rachel.getInstance().getAnnaConnection().addEvent("Boostback Burn");
- vessel.getControl().setThrottle(1f);
- vessel.getControl().setRCS(false);
- //double maxLatDiff = (rocketBody.equals(RocketBody.SIDE_BOOSTER) ? 0.1 : 0.05);
- Pair<Double, Double> impact = impactPoint();
- while ((impact.getValue1() - 0.1) > landingComplexTarget.getLong()) {
- impact = impactPoint();
- /*int correction = 0;
- if (impact.getValue0() - landingComplexTarget.getLat() > 0.01) {
- if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 20000) {
- correction = 225;
- } else if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 10000) {
- correction = 245;
- } else {
- correction = 265;
- }
- vessel.getAutoPilot().setTargetHeading(correction);
- } else if (impact.getValue0() - landingComplexTarget.getLat() < 0.01) {
- if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 20000) {
- correction = 305;
- } else if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 10000) {
- correction = 285;
- } else {
- correction = 275;
- }
- vessel.getAutoPilot().setTargetHeading(correction);
- }*/
- /*if(vessel.getOrbit().getApoapsisAltitude() > 205000) pitch = 0;
- if(vessel.getOrbit().getApoapsisAltitude() < 200000) pitch = 5;
- else pitch = 0;
- vessel.getAutoPilot().setTargetPitch(pitch);*/
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impact.getValue0();
- double lng2 = impact.getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2 - lng1);
- double delta2 = toRadians(lng2 - lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1) * Math.sin(teta2) - Math.sin(teta1) * Math.cos(teta2) * Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = (((int) brng + 360) % 360);
- System.out.println("Heading: " + (brng - 180) + " - " + flight.getHeading());
- vessel.getAutoPilot().setTargetHeading((float) (brng - 180));
- }
- for (SpaceCenter.Part engine : vessel.getParts().withTag("sideEngine")) {
- engine.getEngine().setActive(false);
- }
- while ((impact.getValue1()) > landingComplexTarget.getLong()) {
- impact = impactPoint();
- /*int correction = 0;
- if (impact.getValue0() - landingComplexTarget.getLat() > 0.01) {
- if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 20000) {
- correction = 225;
- } else if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 10000) {
- correction = 245;
- } else {
- correction = 265;
- }
- vessel.getAutoPilot().setTargetHeading(correction);
- } else if (impact.getValue0() - landingComplexTarget.getLat() < 0.01) {
- if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 20000) {
- correction = 305;
- } else if(metersBtwPoints(impact.getValue0(),0,landingComplexTarget.getLat(),0) > 10000) {
- correction = 285;
- } else {
- correction = 275;
- }
- vessel.getAutoPilot().setTargetHeading(correction);
- }*/
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impact.getValue0();
- double lng2 = impact.getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2 - lng1);
- double delta2 = toRadians(lng2 - lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1) * Math.sin(teta2) - Math.sin(teta1) * Math.cos(teta2) * Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = (((int) brng + 360) % 360);
- System.out.println("Heading: " + (brng - 180) + " - " + flight.getHeading());
- vessel.getAutoPilot().setTargetHeading((float) (brng - 180));
- }
- // }
- System.out.println(stageName + " : " + "Engine shutdown");
- vessel.getControl().setThrottle(0f);
- // }
- vessel.getAutoPilot().engage();
- vessel.getControl().setRCS(true);
- vessel.getAutoPilot().targetPitchAndHeading(90,0);
- for (SpaceCenter.ControlSurface controlSurface : vessel.getParts().getControlSurfaces()) {
- controlSurface.setPitchEnabled(false);
- controlSurface.setYawEnabled(false);
- }
- vessel.getControl().setBrakes(true);
- Thread.sleep(1500);
- entryburn();
- //gridFinsGuidance(vessel);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- public double calcHeading() {
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impactPoint().getValue0();
- double lng2 = impactPoint().getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2 - lng1);
- double delta2 = toRadians(lng2 - lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1) * Math.sin(teta2) - Math.sin(teta1) * Math.cos(teta2) * Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = (((int) brng + 360) % 360);
- return brng;
- }
- /*@Override
- public void entryburn() {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- vessel.getControl().setBrakes(false);
- vessel.getAutoPilot().engage();
- vessel.getControl().setRCS(true);
- SpaceCenter.Resources stageResources = vessel.getResources();
- Stream<Float> hydrogenResource = connection.addStream(stageResources, "amount", "LqdMethane");
- System.out.println(stageName + " : " + "Fuel: " + (hydrogenResource.get() / 1030214 * 100));
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- for (SpaceCenter.RCS rc : vessel.getParts().getRCS()) {
- rc.setEnabled(true);
- }
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- while(verticalSpeed.get() > -0.01) { Thread.sleep(1000); }
- Stream<Double> horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- float retrograde = (float)((Math.atan(Math.abs(verticalSpeed.get()) / horizontalSpeed.get()) * 180) / Math.PI) + 8;
- System.out.println("Retrograde: " +retrograde);
- double offset = 0.025 * (int)(downrange/100000);
- if(offset < 0.025) offset = 0.025;
- float heading = (landingComplexTarget == LandingComplexEnum.Droneship ? 235 : 90);
- System.out.println((landingComplexTarget.getLat() + ", " + (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0))));
- double lat1 = impactPoint().getValue0();
- double lng1 = impactPoint().getValue1();
- double lat2 = flight.getLatitude();
- double lng2 = flight.getLongitude();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2-lng1);
- double delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- System.out.println("Test Heading: "+ brng + " - " + (brng-180));
- vessel.getAutoPilot().targetPitchAndHeading(retrograde, (float)brng);
- while (flight.getSurfaceAltitude() > (rocketBody.equals(RocketBody.SIDE_BOOSTER) ? 92000 : (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? (downrange > 800000 ? 90000:70000) : 70000))) { //65 000
- Thread.sleep(1000);
- }
- spaceCenter.setPhysicsWarpFactor(0);
- vessel.getControl().setSAS(false);
- vessel.getAutoPilot().engage();
- Rachel.getInstance().sendAlert("Entry burn start", StageEnum.STAGE_1);
- vessel.getControl().setRCS(true);
- vessel.getParts().withTag("centerEngine").get(0).getEngine().setActive(true);
- Rachel.getInstance().getAnnaConnection().addEvent("Entry Burn");
- vessel.getControl().setThrottle(1f);
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine")) {
- sideEngine.getEngine().setActive(true);
- sideEngine.getEngine().setThrustLimit(0.75f);
- //sideEngine.getEngine().setThrustLimit(0.885f);
- }
- Stream<Double> speed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getSpeed");
- long time = System.currentTimeMillis();
- double Distance = distance(impactPoint().getValue0(), landingComplexTarget.getLat(),impactPoint().getValue1(), landingComplexTarget.getLong(),0.0,0.0);
- boolean end = false;
- System.out.println(downrange + "km");
- float maxAngle = (rocketBody.equals(RocketBody.CENTER_CORE) ? 10 : (downrange > 600000 ? 50:70));
- double lastDist;
- horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- while (verticalSpeed.get() < -700 || horizontalSpeed.get() > 1800) {
- lat1 = impactPoint().getValue0();
- lng1 = impactPoint().getValue1();
- lat2 = flight.getLatitude();
- lng2 = flight.getLongitude();
- teta1 = toRadians(lat1);
- teta2 = toRadians(lat2);
- delta1 = toRadians(lat2-lng1);
- delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- y = Math.sin(delta2) * Math.cos(teta2);
- x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- if(landingComplexTarget.equals(LandingComplexEnum.Droneship))
- Distance = distance(0, 0, impactPoint().getValue1(), landingComplexTarget.getLong() + (flight.getSurfaceAltitude() > 15000 ? offset : 0), 0.0, 0.0);
- else
- Distance = distance(0, 0, impactPoint().getValue1(), landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0), 0.0, 0.0);
- lastDist = Distance;
- if(!landingComplexTarget.equals(LandingComplexEnum.Droneship)) {
- retrograde = (float) ((Math.atan(Math.abs(verticalSpeed.get()) / horizontalSpeed.get()) * 180) / Math.PI);
- if (Distance > 2000) {
- maxAngle = (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? 5 : 15);
- } else if (Distance < 2000 && Distance > 500) {
- maxAngle = (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? 5 : 10);
- } else if (Distance < 500) {
- maxAngle = 5;
- }
- System.out.println("Max Angle: " + maxAngle);
- if (impactPoint().getValue1() - (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0)) > 0.001) {
- System.out.println("Vandenberg");
- vessel.getAutoPilot().targetPitchAndHeading(retrograde + maxAngle, (float)brng);
- } else if (impactPoint().getValue1() - (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0)) < 0.001) {
- vessel.getAutoPilot().targetPitchAndHeading(retrograde - maxAngle, (float)brng);
- System.out.println("France");
- }
- } else {
- if(Distance > lastDist) retrograde = retrograde - 0.1f;
- if(Distance < lastDist) retrograde = retrograde + 0.1f;
- vessel.getAutoPilot().targetPitchAndHeading(retrograde, (float)brng);
- }
- }
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine")) {
- sideEngine.getEngine().setActive(true);
- sideEngine.getEngine().setThrustLimit(100f);
- }
- //vessel.getControl().setSAS(true);
- //vessel.getControl().setSASMode(SpaceCenter.SASMode.RETROGRADE);
- vessel.getControl().setThrottle(0f);
- System.out.println(stageName + " : " + "End of entry burn engine guidance");
- System.out.println(stageName + " : " + "vSpeed: " + verticalSpeed.get());
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine"))
- sideEngine.getEngine().setThrustLimit(0.30f);
- System.out.println(stageName + " : " + "Entry burn shutdown, Time: " + ((System.currentTimeMillis() - time) / 1000) + " seconds");
- //gridFinsGuidance(vessel);
- System.out.println(stageName + " : " + "Fuel: " + (hydrogenResource.get() / 1030214 * 100));
- gridFinsGuidance(vessel);
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.setPriority(10);
- thread.start();
- thread.setPriority(10);
- }*/
- @Override
- public void entryburn() {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- vessel.getAutoPilot().engage();
- SpaceCenter.Resources stageResources = vessel.getResources();
- Stream<Float> hydrogenResource = connection.addStream(stageResources, "amount", "LqdMethane");
- System.out.println(stageName + " : " + "Fuel: " + (hydrogenResource.get() / 1030214 * 100));
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- for (SpaceCenter.RCS rc : vessel.getParts().getRCS()) {
- rc.setEnabled(true);
- }
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- vessel.getAutoPilot().setTargetPitch(90f);
- while(verticalSpeed.get() > -0.01) {
- Thread.sleep(1000);
- }
- double lat1 = impactPoint().getValue0();
- double lng1 = impactPoint().getValue1();
- double lat2 = flight.getLatitude();
- double lng2 = flight.getLongitude();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2-lng1);
- double delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- System.out.println("Test Heading: "+ brng + " - " + (brng-180));
- vessel.getAutoPilot().targetPitchAndHeading(70,(float)brng);
- while (flight.getSurfaceAltitude() > (rocketBody.equals(RocketBody.SIDE_BOOSTER) ? 70000 : (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? (downrange > 800000 ? 90000:70000) : 70000))) { //65 000
- Thread.sleep(1000);
- }
- vessel.getControl().setRCS(true);
- spaceCenter.setPhysicsWarpFactor(0);
- vessel.getControl().setSAS(false);
- vessel.getAutoPilot().engage();
- Rachel.getInstance().sendAlert("Entry burn start", StageEnum.STAGE_1);
- vessel.getControl().setRCS(true);
- vessel.getParts().withTag("centerEngine").get(0).getEngine().setActive(true);
- Rachel.getInstance().getAnnaConnection().addEvent("Entry Burn");
- vessel.getControl().setThrottle(1f);
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine")) {
- sideEngine.getEngine().setActive(true);
- // sideEngine.getEngine().setThrustLimit(0.75f);
- //sideEngine.getEngine().setThrustLimit(0.885f);
- }
- Stream<Double> horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- Stream<Double> speed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getSpeed");
- long time = System.currentTimeMillis();
- double Distance = distance(impactPoint().getValue0(), landingComplexTarget.getLat(),impactPoint().getValue1(), landingComplexTarget.getLong(),0.0,0.0);
- boolean end = false;
- /*vessel.getAutoPilot().disengage();
- vessel.getControl().setSASMode(SpaceCenter.SASMode.RETROGRADE);
- vessel.getControl().setSAS(true);
- vessel.getControl().setSASMode(SpaceCenter.SASMode.RETROGRADE);*/
- System.out.println(downrange + "km");
- float maxAngle = (rocketBody.equals(RocketBody.CENTER_CORE) ? 10 : (downrange > 600000 ? 50:70));
- double lastDist;
- horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- float retrograde = (float)((Math.atan(Math.abs(verticalSpeed.get()) / horizontalSpeed.get()) * 180) / Math.PI) + 8;
- System.out.println("Retrograde: " +retrograde);
- double offset = 0.025 * (int)(downrange/100000);
- if(offset < 0.025) offset = 0.025;
- float heading = (landingComplexTarget == LandingComplexEnum.Droneship ? 235 : 90);
- System.out.println((landingComplexTarget.getLat() + ", " + (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0))));
- while (verticalSpeed.get() < -700 /*|| horizontalSpeed.get() > 1800*/ && (vessel.getResources().amount("LqdOxygen") / 108041 * 100) > 1.5f) {
- lat1 = impactPoint().getValue0();
- lng1 = impactPoint().getValue1();
- lat2 = flight.getLatitude();
- lng2 = flight.getLongitude();
- teta1 = toRadians(lat1);
- teta2 = toRadians(lat2);
- delta1 = toRadians(lat2-lng1);
- delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- y = Math.sin(delta2) * Math.cos(teta2);
- x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- if(landingComplexTarget.equals(LandingComplexEnum.Droneship))
- Distance = distance(0, 0, impactPoint().getValue1(), landingComplexTarget.getLong() + (flight.getSurfaceAltitude() > 15000 ? offset : 0), 0.0, 0.0);
- else
- Distance = distance(0, 0, impactPoint().getValue1(), landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0), 0.0, 0.0);
- lastDist = Distance;
- if(!landingComplexTarget.equals(LandingComplexEnum.Droneship)) {
- /*retrograde = (float) ((Math.atan(Math.abs(verticalSpeed.get()) / horizontalSpeed.get()) * 180) / Math.PI);
- if (Distance > 2000) {
- maxAngle = (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? 5 : 15);
- } else if (Distance < 2000 && Distance > 500) {
- maxAngle = (landingComplexTarget.equals(LandingComplexEnum.Droneship) ? 5 : 10);
- } else if (Distance < 500) {
- maxAngle = 5;
- }
- System.out.println("Max Angle: " + maxAngle);
- if (impactPoint().getValue1() - (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0)) > 0.001) {
- System.out.println("Vandenberg");
- vessel.getAutoPilot().targetPitchAndHeading(retrograde + maxAngle, (float)brng);
- } else if (impactPoint().getValue1() - (landingComplexTarget.getLong() - (flight.getSurfaceAltitude() > 15000 ? offset : 0)) < 0.001) {
- vessel.getAutoPilot().targetPitchAndHeading(retrograde - maxAngle, (float)brng);
- System.out.println("France");
- }*/
- System.out.println("Calc retrograde");
- refFrame = vessel.getSurfaceVelocityReferenceFrame();
- flight = vessel.flight(refFrame);
- vessel.getAutoPilot().setReferenceFrame(refFrame);
- vessel.getAutoPilot().setTargetDirection(new Triplet<>(0.0,-1.0,0.0));
- } else {
- System.out.println("Calc retrograde");
- refFrame = vessel.getSurfaceVelocityReferenceFrame();
- flight = vessel.flight(refFrame);
- vessel.getAutoPilot().setReferenceFrame(refFrame);
- vessel.getAutoPilot().setTargetDirection(new Triplet<>(0.0,-1.0,0.0));
- }
- }
- vessel.getAutoPilot().setReferenceFrame(vessel.getSurfaceReferenceFrame());
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine")) {
- sideEngine.getEngine().setActive(true);
- sideEngine.getEngine().setThrustLimit(100f);
- }
- //vessel.getControl().setSAS(true);
- //vessel.getControl().setSASMode(SpaceCenter.SASMode.RETROGRADE);
- vessel.getControl().setThrottle(0f);
- System.out.println(stageName + " : " + "End of entry burn engine guidance");
- if((vessel.getResources().amount("LqdOxygen") / 108041 * 100) < 1.5f)
- System.out.println(stageName + " : " + "Less than a 1.5%, Abort Entry burn");
- System.out.println(stageName + " : " + "vSpeed: " + verticalSpeed.get());
- for (SpaceCenter.Part sideEngine : vessel.getParts().withTag("sideEngine"))
- sideEngine.getEngine().setThrustLimit(0.30f);
- System.out.println(stageName + " : " + "Entry burn shutdown, Time: " + ((System.currentTimeMillis() - time) / 1000) + " seconds");
- //gridFinsGuidance(vessel);
- System.out.println(stageName + " : " + "Fuel: " + (hydrogenResource.get() / 1030214 * 100));
- gridFinsGuidance(vessel);
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.setPriority(10);
- thread.start();
- thread.setPriority(10);
- }
- @Override
- public void landingburn() {
- Thread landingBurn = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- // vessel = spaceCenter.getActiveVessel();
- restoreConnectionWithFirstStage(spaceCenter);
- System.out.println(impactPoint().getValue0() + " -- " + impactPoint().getValue1());
- //vessel.getParts().setControlling(vessel.getParts().withTag("First Stage").get(0));
- spaceCenter.setActiveVessel(vessel);
- spaceCenter.setPhysicsWarpFactor(0);
- vessel.getControl().setRCS(true);
- boostbackburn();
- //entryburn();
- //gridFinsGuidance(vessel);
- System.out.println(stageName + " : " + "Landing Burn is on");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- landingBurn.setPriority(10);
- landingBurn.start();
- }
- boolean hover = true;
- public void hover() {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- hover = landingComplexTarget.equals(LandingComplexEnum.Droneship);
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- verticalSpeed.setRate(0f);
- while (hover) {
- long time = System.currentTimeMillis();
- double g = vessel.getOrbit().getBody().getSurfaceGravity();
- double maxAccel = vessel.getAvailableThrust() / vessel.getMass();
- double throttle = (g - verticalSpeed.get()) / maxAccel;
- vessel.getControl().setThrottle((float)throttle);
- System.out.println("Time Hover Throttle:" + (System.currentTimeMillis() - time));
- }
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.setPriority(10);
- thread.start();
- }
- private void engineGuidance(SpaceCenter.Vessel vessel) {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- Rachel.getInstance().getAnnaConnection().addEvent("Engine Guidance");
- verticalSpeed.setRate(0f);
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- System.out.println(stageName + " : " + "Engine guidance");
- double Distance =0;
- double maxAngle = 90;
- double lastDist = 0;
- double lastHeading = flight.getHeading();
- System.out.println("Engine time: " + (System.currentTimeMillis() - time));
- moyenne.clear();
- vessel.getParts().withTag("sideEngine").get(0).getEngine().setActive(false);
- vessel.getParts().withTag("sideEngine").get(1).getEngine().setActive(false);
- hover();
- long time = System.currentTimeMillis();
- while (true) {
- if(!landingComplexTarget.equals(LandingComplexEnum.Droneship)) break;
- Distance = distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- if(Distance > 10) maxAngle = 85;
- if(Distance < 10) maxAngle = 87;
- if(Distance < 1) maxAngle = 90;
- if(Distance > 100) maxAngle = 70;
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impactPoint().getValue0();
- double lng2 = impactPoint().getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2-lng1);
- double delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- vessel.getAutoPilot().targetPitchAndHeading((float)maxAngle, (float)(brng-180));
- System.out.println("Hovering Distance " + Distance);
- DistanceBySec = Math.abs(distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0) - Distance);
- moyenne.add(DistanceBySec);
- if(Distance < 10 && ((System.currentTimeMillis() - time) / 1000) > 10) {
- Thread.sleep(1200);
- if(Distance < 10) {
- System.out.println("Stop hovering ! " + ((System.currentTimeMillis() - time) / 1000));
- System.out.println("Stop hovering Distance " + Distance);
- hover = false;
- break;
- }
- System.out.println("False positive");
- }
- System.out.println("Time Hover Guidance:" + (System.currentTimeMillis() - time));
- }
- Stream<Double> horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- while(flight.getMeanAltitude() > 80 || verticalSpeed.get() < -0.01) {
- if(Distance > 10) maxAngle = 80;
- if(Distance < 10) maxAngle = 85;
- if(Distance < 1) maxAngle = 90;
- if(verticalSpeed.get() < 100 && vessel.getParts().withTag("sideEngine").get(0).getEngine().getActive()) {
- vessel.getParts().withTag("sideEngine").get(0).getEngine().setActive(false);
- vessel.getParts().withTag("sideEngine").get(1).getEngine().setActive(false);
- }
- double max_decel = vessel.getAvailableThrust() / vessel.getMass() - vessel.getOrbit().getBody().getSurfaceGravity();
- double stop_dist = (Math.pow(verticalSpeed.get() + (horizontalSpeed.get() * -1), 2) / (2 * max_decel));
- vessel.getControl().setThrottle((float) (stop_dist / (flight.getSurfaceAltitude() - 27)));
- if(!isLiftSuperiorToEngine(flight)) {
- if (flight.getMeanAltitude() > 100) {
- Distance = distance(0, 0, impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- System.out.println("Distance: " + Distance);
- // if(Distance > 100) maxAngle = 80;
- if (Distance > 10) maxAngle = 85;
- if (Distance < 10) maxAngle = 87;
- if (Distance < 1) maxAngle = 90;
- if (Distance > 50) maxAngle = 80;
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impactPoint().getValue0();
- double lng2 = impactPoint().getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2 - lng1);
- double delta2 = toRadians(lng2 - lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1) * Math.sin(teta2) - Math.sin(teta1) * Math.cos(teta2) * Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = (((int) brng + 360) % 360);
- vessel.getAutoPilot().targetPitchAndHeading((float) maxAngle, (float) (brng - 180));
- } else {
- refFrame = vessel.getSurfaceVelocityReferenceFrame();
- flight = vessel.flight(refFrame);
- vessel.getAutoPilot().setReferenceFrame(refFrame);
- vessel.getAutoPilot().setTargetDirection(new Triplet<>(0.0, -1.0, 0.0));
- }
- }
- if(flight.getMeanAltitude() < 700 && !vessel.getControl().getLegs()) vessel.getControl().setLegs(true);
- }
- vessel.getControl().setThrottle(0f);
- vessel.getControl().setBrakes(false);
- for (SpaceCenter.Engine engine : vessel.getParts().getEngines()) { engine.setActive(false); }
- Rachel.getInstance().getAnnaConnection().addEvent("Landed");
- vessel.getAutoPilot().setReferenceFrame(vessel.getSurfaceReferenceFrame());
- Rachel.getInstance().sendAlert("Adhara has landed", StageEnum.STAGE_1);
- Rachel.getInstance().sendAlert("Precision:" + distance(flight.getLatitude(),landingComplexTarget.getLat(), flight.getLongitude(), landingComplexTarget.getLong(), 0.0, 0.0), StageEnum.STAGE_1);
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.setPriority(1);
- thread.start();
- }
- long time = System.currentTimeMillis();
- double DistanceBySec = 0;
- ArrayList<Double> moyenne = new ArrayList<>();
- double DistanceCanLift = 0;
- double lastDist =0;
- public void headingHandler() {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- double Distance =0;
- float maxAngle = 80;
- double lastPitch = DistanceBySec;
- DistanceCanLift = distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- SpaceCenter.AutoPilot autoPilot = vessel.getAutoPilot();
- Rachel.getInstance().sendAlert("Gridfins guidance", StageEnum.STAGE_1);
- // vessel.getAutoPilot().setStoppingTime(new Triplet<>(0.2,0.2,0.2));
- //updateValues();
- while (isLiftSuperiorToEngine(flight) || flight.getSurfaceAltitude() > 4000) {
- double lat1 = landingComplexTarget.getLat();
- double lng1 = landingComplexTarget.getLong();
- double lat2 = impactPoint().getValue0();
- double lng2 = impactPoint().getValue1();
- double teta1 = toRadians(lat1);
- double teta2 = toRadians(lat2);
- double delta1 = toRadians(lat2-lng1);
- double delta2 = toRadians(lng2-lng1);
- //==================Heading Formula Calculation================//
- double y = Math.sin(delta2) * Math.cos(teta2);
- double x = Math.cos(teta1)*Math.sin(teta2) - Math.sin(teta1)*Math.cos(teta2)*Math.cos(delta2);
- double brng = Math.atan2(y, x);
- brng = toDegrees(brng);// radians to degrees
- brng = ( ((int)brng + 360) % 360 );
- vessel.getAutoPilot().setTargetHeading((float)brng);
- System.out.println("Plot new Heading: " +(float)brng);
- }
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.start();
- thread.setPriority(10);
- }
- public boolean isLiftSuperiorToEngine(SpaceCenter.Flight flight) throws Exception {
- if(hover) return false;
- return magnitude(flight.getLift()) > vessel.getThrust();
- }
- public void pitchHandler() {
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- vessel.getAutoPilot().engage();
- vessel.getAutoPilot().setStoppingTime(new Triplet<>(0.2,0.2,0.2));
- double Distance =0;
- float maxAngle = 80;
- double lastPitch = DistanceBySec;
- DistanceCanLift = distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- SpaceCenter.AutoPilot autoPilot = vessel.getAutoPilot();
- Rachel.getInstance().sendAlert("Gridfins guidance", StageEnum.STAGE_1);
- // vessel.getAutoPilot().setStoppingTime(new Triplet<>(0.2,0.2,0.2));
- //updateValues();
- Stream<Double> horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- while (isLiftSuperiorToEngine(flight) || flight.getSurfaceAltitude() > 4000) {
- Distance = distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- lastDist = Distance;
- // System.out.println("--------------------------------------");
- if(flight.getMeanAltitude() < 10000 && !vessel.getControl().getBrakes()) {
- vessel.getControl().setBrakes(true);
- moyenne.clear();
- }
- DistanceBySec = Math.abs(Distance - distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0));
- moyenne.add(DistanceBySec);
- double timeBeforeTouchdown = Math.abs((flight.getMeanAltitude() - 4000)/ verticalSpeed.get());
- int precision = 60;
- if(Distance > 5000) precision = 60;
- if(Distance < 2500) precision = 50;
- if(Distance < 700) precision = 30;
- if(Distance < 500) precision = 25;
- if(Distance < 100) precision = 15;
- if(Distance < 50) precision = 10;
- if(Distance < 10) precision = 0;
- /*if(flight.getMeanAltitude() < 8000 && Distance > 40) precision += 5;
- if(landingComplexTarget.equals(LandingComplexEnum.Droneship)) precision = precision +15;
- if(Distance > DistanceCanLift) precision = precision - 10;*/
- float pitch = (float) plotPitch(flight, timeBeforeTouchdown, precision, false);
- System.out.println("Plot new Pitch: " +(float)pitch);
- //if(vessel.getThrust() > 0) pitch -=5;
- //if(Distance > lastDist) pitch -= 5;
- vessel.getAutoPilot().setTargetPitch(pitch-1.5f);
- }
- } catch (Exception e) { e.printStackTrace();}
- }
- });
- thread.start();
- thread.setPriority(10);
- }
- public void gridFinsGuidance(SpaceCenter.Vessel vessel) throws Exception {
- pitchHandler();
- headingHandler();
- SpaceCenter.ReferenceFrame refFrame = vessel.getSurfaceReferenceFrame();
- SpaceCenter.Flight flight = vessel.flight(refFrame);
- while (flight.getMeanAltitude() > 4000) {
- System.out.print("");
- }
- engineGuidance(vessel);
- }
- public double average() {
- int i = 0;
- for (Double aDouble : moyenne) {
- i += aDouble;
- }
- return i / moyenne.size();
- }
- double lastPitch = 10;
- double precisionViolation = 0;
- public double plotPitch(SpaceCenter.Flight flight, double timeBeforeTouchdown, int limit, boolean toward) throws Exception{
- try {
- long time = System.currentTimeMillis();
- double Distance = distance(impactPoint().getValue0(), landingComplexTarget.getLat(), impactPoint().getValue1(), landingComplexTarget.getLong(), 0.0, 0.0);
- Map<Double, Double> numbers = new LinkedHashMap<>();
- double distancePerPitch = average() / vessel.getAutoPilot().getTargetPitch();
- double min = Double.MAX_VALUE;
- double closest = Distance;
- Stream<Double> horizontalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getHorizontalSpeed");
- Stream<Double> verticalSpeed = connection.addStream(vessel.flight(vessel.getOrbit().getBody().getReferenceFrame()), "getVerticalSpeed");
- float retrograde = (float) ((Math.atan(Math.abs(verticalSpeed.get()) / horizontalSpeed.get()) * 180) / Math.PI);
- if(Distance < 5) return retrograde + 1.5f;
- if(limit < 1) return retrograde + 1.5f;
- /*if(Distance < 50) {
- System.out.println(flight.getMeanAltitude());
- vessel.getAutoPilot().setTargetPitch(retrograde);
- }*/
- for (double i = 0.0; i < (limit * 100) + precisionViolation; i += 0.01) {
- double i2 = (distancePerPitch * i) * timeBeforeTouchdown;
- numbers.put(i2, i / 10);
- final double diff = Math.abs(i2 - Distance);
- if (diff < min) {
- min = diff;
- closest = i2;
- }
- }
- // System.out.println("Required: " + Distance);
- // System.out.println("Found: " + closest(Distance, (new ArrayList<Double>(numbers.keySet()))) + " --- " + numbers.get(closest(Distance, (new ArrayList<Double>(numbers.keySet())))));
- // System.out.println("Difference: " + Math.abs(closest(Distance, (new ArrayList<Double>(numbers.keySet()))) / Distance));
- /* System.out.println("Plot time: " + (System.currentTimeMillis() - time) + "ms");
- System.out.println("Precision: " + limit);
- System.out.println("PrecisionV: " + precisionViolation);*/
- if(Math.abs(closest - Distance) > 3 || Distance > lastPitch || DistanceBySec < 2) {
- precisionViolation +=1;
- if(precisionViolation > 50) precisionViolation = 30;
- } else {
- precisionViolation -=1;;
- if(precisionViolation < 0) precisionViolation = 0;
- }
- DistanceCanLift = closest;
- lastPitch = (toward ? 90 + (numbers.get(closest)) : 90 - (numbers.get(closest)));
- return (toward ? 90 + (numbers.get(closest)) : 90 - (numbers.get(closest)));
- } catch (Exception e) {
- e.printStackTrace();
- return lastPitch;
- }
- }
- public double magnitude(Triplet<Double, Double, Double> values) {
- return Math.sqrt(Math.pow(values.getValue0(),2.0) + Math.pow(values.getValue1(),2.0) + Math.pow(values.getValue1(),2.0));
- }
- public double closest(double of, ArrayList<Double> in) {
- double min = Double.MAX_VALUE;
- double closest = of;
- for (double v : in) {
- final double diff = Math.abs(v - of);
- if (diff < min) {
- min = diff;
- closest = v;
- }
- }
- return closest;
- }
- public double value(double Distance) {
- /* if(Distance < 2000 && Distance > 1000) return 10;
- if(Distance < 1000 && Distance > 500) return 5;
- else if(Distance < 500 && Distance > 100) return 2;
- else if(Distance < 100 && Distance > 50) return 1;
- else return 0.5;*/
- if(Distance > 100) return 1;
- else return 0.5;
- }
- public double toRadians(double value1) {
- return value1 * Math.PI / 180;
- }
- public double toDegrees(double value) {
- return value * 180/Math.PI;
- }
- public double distance(double lat1, double lat2, double lon1,
- double lon2, double el1, double el2) {
- final int R = 6371; // Radius of the earth
- double latDistance = Math.toRadians(lat2 - lat1);
- double lonDistance = Math.toRadians(lon2 - lon1);
- double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
- + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
- * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
- double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
- double distance = R * c * 1000; // convert to meters
- double height = el1 - el2;
- distance = Math.pow(distance, 2) + Math.pow(height, 2);
- return Math.sqrt(distance);
- }
- /**
- * Get first stage impact point
- * @return Latitude / Longitude values.
- */
- public Pair<Double, Double> impactPoint() {
- try {
- //System.out.println(Trajectories.newInstance(connection).impactPos().getValue0() + Trajectories.newInstance(connection).impactPos().getValue1());
- return PR.newInstance(connection).getImpactPos(vessel);
- //return Trajectories.newInstance(connection).impactPos();
- } catch (Exception e) {
- }
- return new Pair<>(0D,0D);
- }
- public double metersBtwPoints(double lat1, double lon1, double lat2, double lon2) {
- double R = 6371; // Radius of earth in KM
- double dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;
- double dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180;
- double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
- Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
- Math.sin(dLon/2) * Math.sin(dLon/2);
- double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
- double d = R * c;
- return d * 1000; // meters
- }
- public void restoreConnectionWithFirstStage(SpaceCenter spaceCenter) {
- try {
- System.out.println(stageName + " : " + "Recover network...");
- for (SpaceCenter.Vessel spaceCenterVessel : spaceCenter.getVessels()) {
- if (!(spaceCenterVessel.getMET() > 500)) {
- if(spaceCenterVessel.getParts().withName("proceduralAvionics").size() > 0) {
- System.out.println(stageName + " : " + spaceCenterVessel.getParts().withName("proceduralAvionics").get(0).getTag().equals(stageName));
- System.out.println(stageName + " : " + spaceCenterVessel.getParts().withName("proceduralAvionics").get(0).getTag().contains(stageName));
- System.out.println(stageName + " : " + spaceCenterVessel.getParts().withName("proceduralAvionics").get(0).getTag() + " " + stageName);
- if (spaceCenterVessel.getParts().withName("proceduralAvionics").get(0).getTag().equals(stageName)) {
- vessel = spaceCenterVessel;
- System.out.println(stageName + " : " + "New Vessel : " + this.vessel.getName());
- spaceCenterVessel.setName(stageName);
- break;
- }
- }
- }
- }
- if(vessel == null) restoreConnectionWithFirstStage(spaceCenter);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public LandingComplexEnum getLandingComplexTarget() {
- return landingComplexTarget;
- }
- //Should it land? Or should it splashdown ?
- public boolean isShoulditland() {
- return Shoulditland;
- }
- @Override
- public void tick() {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement