internal void OnCrash(EventReport data) { LaunchEvent launch = null; foreach (var part in data.origin.attachNodes) { if (launch != null) { break; } launch = GetLaunchByRootPartId(data.origin.flightID.ToString()); } if (launch != null) { VesselDestroyedEvent destroyed = new VesselDestroyedEvent(); launch.AddEvent(destroyed); EndFlightEvent endFlight = new EndFlightEvent(); endFlight.finalMass = 0; endFlight.crewMembers = new List <string>(); launch.AddEvent(endFlight); } }
internal void OnVesselTerminated(ProtoVessel data) { LaunchEvent launch = GetLaunchByVesselId(data.vesselID.ToString()); if (launch != null) { VesselDestroyedEvent destroyed = new VesselDestroyedEvent(); launch.AddEvent(destroyed); EndFlightEvent endFlight = new EndFlightEvent(); float sumMass = 0; foreach (var part in data.protoPartSnapshots) { sumMass += part.mass; } endFlight.finalMass = sumMass; endFlight.crewMembers = new List <string>(); foreach (ProtoCrewMember kerbal in data.GetVesselCrew()) { endFlight.crewMembers.Add(kerbal.name); } launch.AddEvent(endFlight); } }
internal void OnBeforeSave() { if (FlightGlobals.ActiveVessel == null) { return; } var state = FlightGlobals.ActiveVessel.state; LaunchEvent launch = GetLaunchByVesselId(FlightGlobals.ActiveVessel.id.ToString()); if (launch != null) { RecordMaxSpeed(); RecordMaxGee(); } if (launch != null && state == Vessel.State.DEAD) { if (launch.GetLastEvent() is EndFlightEvent) { return; } VesselDestroyedEvent destroyed = new VesselDestroyedEvent(); launch.AddEvent(destroyed); EndFlightEvent endFlight = new EndFlightEvent(); endFlight.finalMass = 0; endFlight.crewMembers = new List <string>(); launch.AddEvent(endFlight); } }
public void OnFinishMission(LaunchEvent launch) { FinishMissionEvent endMission = new FinishMissionEvent(); Vessel[] vessels = GameObject.FindObjectsOfType <Vessel>(); Vessel vessel = null; foreach (var item in vessels) { if (item.id.ToString() == launch.shipID && item.vesselName == launch.shipName) { vessel = item; } } if (vessel == null) { return; } float sumMass = 0; foreach (var part in vessel.protoVessel.protoPartSnapshots) { sumMass += part.mass; } endMission.finalMass = sumMass; endMission.crewMembers = new List <string>(); foreach (ProtoCrewMember kerbal in vessel.protoVessel.GetVesselCrew()) { endMission.crewMembers.Add(kerbal.name); } launch.AddEvent(endMission); }
public void OnVesselRecoveryRequested(Vessel vessel) { long currentEndTime = GetTimeInTicks(); EndFlightEvent endFlight = new EndFlightEvent(); endFlight.time = currentEndTime; endFlight.finalMass = 0; foreach (var part in vessel.parts) { endFlight.finalMass += part.GetResourceMass() + part.mass; } endFlight.crewMembers = new List <string>(); foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew()) { endFlight.crewMembers.Add(kerbal.name); } LaunchEvent launch = GetLaunch(vessel); launch.shipID = vessel.id.ToString(); if (launch != null) { launch.AddEvent(endFlight); } foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew()) { EndFlightCrewEvent crewEndFlight = new EndFlightCrewEvent(); crewEndFlight.time = currentEndTime; GetKerbalLaunch(kerbal.name).AddEvent(crewEndFlight); } FlightGUI.SaveData(); }
public void RecordMaxGee() { if (FlightGlobals.ActiveVessel == null) { return; } LaunchEvent activeLaunch = GetLaunch(FlightGlobals.ActiveVessel); if (activeLaunch != null) { MaxGeeEvent maxGeeEv = new MaxGeeEvent(); maxGeeEv.gee = activeLaunch.maxGee; if (activeLaunch.maxGee > activeLaunch.GetEventMaxGee()) { activeLaunch.AddEvent(maxGeeEv); } foreach (ProtoCrewMember kerbal in FlightGlobals.ActiveVessel.GetVesselCrew()) { LaunchCrewEvent crewLaunch = GetKerbalLaunch(kerbal.name); if (crewLaunch.maxGee < activeLaunch.maxGee) { MaxGeeCrewEvent geeEv = new MaxGeeCrewEvent(); geeEv.gee = activeLaunch.maxGee; if (crewLaunch.GetEventMaxGee() < activeLaunch.maxGee) { crewLaunch.AddEvent(geeEv); } } } } }
internal void OnScienceReceived(float data0, ScienceSubject data1, ProtoVessel data2, bool data3) { LaunchEvent launch = GetLaunchByVesselId(data2.vesselID.ToString()); ScienceEvent scienceEvent = new ScienceEvent(); scienceEvent.title = data1.title; scienceEvent.sciencePoints = data0; launch.AddEvent(scienceEvent); }
internal void UpdateDynamic() { if (!HighLogic.LoadedSceneIsFlight) { return; } if (FlightGlobals.ActiveVessel == null) { return; } LaunchEvent activeLaunch = GetLaunch(FlightGlobals.ActiveVessel); if (activeLaunch != null) { ProtoVessel item = FlightGlobals.ActiveVessel.protoVessel; double currentVesselSpeed = item.vesselRef.obt_speed; if (item.situation == Vessel.Situations.FLYING || item.situation == Vessel.Situations.PRELAUNCH) { currentVesselSpeed = item.vesselRef.srfSpeed; } if (currentVesselSpeed > activeLaunch.maxSpeed) { activeLaunch.maxSpeed = currentVesselSpeed; } if (activeLaunch.maxGee < FlightGlobals.ActiveVessel.geeForce) { activeLaunch.maxGee = FlightGlobals.ActiveVessel.geeForce; } foreach (ProtoCrewMember kerbal in FlightGlobals.ActiveVessel.GetVesselCrew()) { LaunchCrewEvent crewLaunch = GetKerbalLaunch(kerbal.name); if (crewLaunch.maxGee < FlightGlobals.ActiveVessel.geeForce) { crewLaunch.maxGee = FlightGlobals.ActiveVessel.geeForce; } } if (activeLaunch.GetLastEvent() is LandingEvent) { double altitude = FlightGlobals.ActiveVessel.RevealAltitude(); if (altitude - FlightGlobals.ActiveVessel.terrainAltitude > 10) { activeLaunch.AddEvent(new FlyingEvent()); } } float currentMass = 0; foreach (var part in FlightGlobals.ActiveVessel.parts) { currentMass += part.GetResourceMass() + part.mass; } activeLaunch.currentMass = currentMass; } }
private void RecordLaunch(Vessel vessel) { LaunchEvent launch = new LaunchEvent(); launch.shipName = vessel.protoVessel.vesselName; if (launch.shipName == null) { launch.shipName = "Just decoupled"; } launch.shipID = vessel.id.ToString(); launch.rootPartID = vessel.rootPart.flightID.ToString(); launch.time = GetTimeInTicks(); launch.parts = new List <StatisticVehiclePart>(); float sumCost = 0; float launchMass = 0; foreach (var part in vessel.parts) { sumCost += part.partInfo.cost; launchMass += part.GetResourceMass() + part.mass; StatisticVehiclePart vehiclePart = new StatisticVehiclePart(); vehiclePart.partID = part.flightID.ToString(); var modules = part.Modules.GetModules <ModuleCommand>(); if (modules.Count > 0) { vehiclePart.partType = PartType.CommandPod; launch.parts.Add(vehiclePart); } else { vehiclePart.partType = PartType.Other; //launch.parts.Add(vehiclePart); } } launch.crewMembers = new List <string>(); foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew()) { launch.crewMembers.Add(kerbal.name); } launch.launchCost = sumCost; launch.launchMass = launchMass; SOIChangeEvent soiInitial = new SOIChangeEvent(); soiInitial.mass = launchMass; soiInitial.soiName = vessel.mainBody.name; launch.AddEvent(soiInitial); launches.Add(launch); }
public void RecordOrbitReaching(Vessel vessel) { OrbitReachingEvent orbitEvent = new OrbitReachingEvent(); orbitEvent.massOnOrbit = 0; foreach (var part in vessel.parts) { orbitEvent.massOnOrbit += part.GetResourceMass() + part.mass; } LaunchEvent launch = GetLaunch(vessel); if (launch != null) { launch.AddEvent(orbitEvent); } }
public void OnVesselSOIChanged(GameEvents.HostedFromToAction <Vessel, CelestialBody> data) { SOIChangeEvent soiChange = new SOIChangeEvent(); soiChange.mass = 0; foreach (var part in data.host.parts) { soiChange.mass += part.GetResourceMass() + part.mass; } soiChange.soiName = data.host.mainBody.name; LaunchEvent launch = GetLaunch(data.host); if (launch != null) { launch.AddEvent(soiChange); } }
public void RecordMaxSpeed() { if (FlightGlobals.ActiveVessel == null) { return; } LaunchEvent activeLaunch = GetLaunch(FlightGlobals.ActiveVessel); if (activeLaunch != null) { MaxSpeedEvent maxSpEv = new MaxSpeedEvent(); maxSpEv.speed = activeLaunch.maxSpeed; if (activeLaunch.GetEventMaxSpeed() < activeLaunch.maxSpeed) { activeLaunch.AddEvent(maxSpEv); } } }
private void RecordStableOrbit(Vessel vessel) { LaunchEvent launch = GetLaunch(vessel); if (launch != null) { StableOrbitEvent stableEvent = new StableOrbitEvent(); stableEvent.mass = 0; foreach (var part in vessel.parts) { stableEvent.mass += part.GetResourceMass() + part.mass; } launch.AddEvent(stableEvent); } /*if (FlightGlobals.ActiveVessel == null) return; * FlightGlobals.ActiveVessel.*/ }
internal void OnCrewOnEva(GameEvents.FromToAction <Part, Part> data) { if (VesselType.EVA != data.to.vessel.vesselType) { return; } LaunchCrewEvent crewLaunch = GetKerbalLaunch(data.to.vessel.vesselName); EvaCrewEvent evaCrewEvent = new EvaCrewEvent(); crewLaunch.AddEvent(evaCrewEvent); LaunchEvent launch = GetLaunch(data.from.vessel); if (launch != null) { EvaEvent evaEvent = new EvaEvent(); launch.AddEvent(evaEvent); } }
public void OnPartCouple(GameEvents.FromToAction <Part, Part> action) { if (!HighLogic.LoadedSceneIsFlight) { return; } Part from = action.from; Part to = action.to; if (from == null || from.vessel == null || from.vessel.isEVA || from.vessel.parts.Count == 1) { return; } if (to == null || to.vessel == null || to.vessel.isEVA || to.vessel.parts.Count == 1) { return; } Vessel vessel = action.from.vessel.isActiveVessel ? action.from.vessel : action.to.vessel; if (action.from.vessel != null && action.to.vessel != null) { DockingEvent dockingFrom = new DockingEvent(); LaunchEvent launchFrom = GetLaunch(action.from.vessel); if (launchFrom != null) { launchFrom.AddEvent(dockingFrom); } DockingEvent dockingTo = new DockingEvent(); LaunchEvent launchTo = GetLaunch(action.to.vessel); if (launchTo != null) { launchTo.AddEvent(dockingTo); } RecordCrewDockingEvent(action.from.vessel, action.to.vessel); } }
internal void OnEndFlight(ProtoVessel protoVessel, bool data1) { LaunchEvent launch = GetLaunchByVesselId(protoVessel.vesselID.ToString()); if (launch == null || launch.GetLastEvent() is EndFlightEvent) { return; } EndFlightEvent endFlight = new EndFlightEvent(); endFlight.finalMass = 0; foreach (var part in protoVessel.protoPartSnapshots) { endFlight.finalMass += part.mass; } endFlight.crewMembers = new List <string>(); foreach (var kerbal in protoVessel.GetVesselCrew()) { endFlight.crewMembers.Add(kerbal.name); } launch.AddEvent(endFlight); FlightGUI.SaveData(); }
public void RecordLanding(Vessel vessel) { if (vessel.isEVA) { return; } LandingEvent landing = new LandingEvent(); landing.mainBodyName = vessel.mainBody.name; landing.biome = getBiomeName(vessel.mainBody, vessel.longitude, vessel.latitude); LaunchEvent launch = GetLaunch(vessel); if (launch != null) { FlightEvent flightEvent = launch.GetLastEvent(); if (flightEvent is EvaEvent && (landing.time - flightEvent.time) / TimeSpan.TicksPerSecond < 1) { return; } if (flightEvent is LandingEvent) { if (((landing.time - flightEvent.time) / TimeSpan.TicksPerSecond < 2)) { return; } } launch.AddEvent(landing); } foreach (ProtoCrewMember kerbal in vessel.GetVesselCrew()) { LandingCrewEvent landingCrewEvent = new LandingCrewEvent(); LaunchCrewEvent crewLaunch = GetKerbalLaunch(kerbal.name); crewLaunch.AddEvent(landingCrewEvent); } }