private void orbitingVessel(CelestialBody crashBody, Vessel observer, Vessel crashVessel) { Log("And it is orbiting"); Log("CelestialBody is at " + crashBody.position); Log("Crash vessel is at" + crashVessel.CoM); Log("Observer is at" + observer.CoM); Vector3d crash = crashVessel.CoM; crash = crashVessel.CoM - crashBody.position; Log("crashRelaticeTocentre =" + crash); Vector3d orbVec = observer.CoM - crashBody.position; Vector3d sightVec = (orbVec - crash); double angle = Vector3d.Angle(crash, sightVec); Log("Sight=" + sightVec); Log("sight angle = " + angle + " degrees"); Log("Distance between them =" + sightVec.magnitude); if (angle < 90) { Log("Vessel is visible"); if (observer.loaded) { List <Spectrometer> spectrometers = observer.FindPartModulesImplementing <Spectrometer>(); if (spectrometers.Count != 0) { Log("Found spectrometers"); ImpactScienceData data = createSpectralData(crashBody, crashVessel, spectrometers[0].part.flightID); ImpactCoordinator.getInstance().bangListeners.Fire(data); spectrometers[0].addExperiment(data); } } else { List <ProtoPartSnapshot> parts = observer.protoVessel.protoPartSnapshots; foreach (ProtoPartSnapshot snap in parts) { foreach (ProtoPartModuleSnapshot mod in snap.modules) { if (mod.moduleName == "Spectrometer") { Log("Found spectrometers"); ImpactScienceData data = createSpectralData(crashBody, crashVessel, snap.flightID); Log("about to call listeners"); ImpactCoordinator.getInstance().bangListeners.Fire(data); Log("About to call newresult"); Spectrometer.NewResult(mod.moduleValues, data); return; } } } } } }
private void nearAsteroidVessel(Vessel observer, Vessel crashVessel, Vessel asteroid, CelestialBody crashBody) { Log("observer is orbiting "); Log("observer is at " + observer.CoM); Log("Crash vessel is at" + crashVessel.CoM); Vector3d sightVec = observer.CoM - crashVessel.CoM; Log("Distance between them =" + sightVec.magnitude); if (sightVec.magnitude < 5e5) { //observer is in range (500km) Log("It is in range =" + (sightVec).magnitude); if (observer.loaded) { List <Spectrometer> spectrometers = observer.FindPartModulesImplementing <Spectrometer>(); if (spectrometers.Count != 0) { Log("Found loaded spectrometers"); ImpactScienceData data = createAsteroidSpectralData(crashBody, asteroid, crashVessel, spectrometers[0].part.flightID); ImpactCoordinator.getInstance().bangListeners.Fire(data); spectrometers[0].addExperiment(data); } } else { List <ProtoPartSnapshot> parts = observer.protoVessel.protoPartSnapshots; foreach (ProtoPartSnapshot snap in parts) { foreach (ProtoPartModuleSnapshot mod in snap.modules) { if (mod.moduleName == "Spectrometer") { Log("Found unloaded spectrometers"); ImpactScienceData data = createAsteroidSpectralData(crashBody, asteroid, crashVessel, snap.flightID); ImpactCoordinator.getInstance().bangListeners.Fire(data); Spectrometer.NewResult(mod.moduleValues, data); return; } } } } } }