From a4f0558fda8c09d82a5ba9de7b6a1027954f25d8 Mon Sep 17 00:00:00 2001 From: Bob Palmer Date: Sat, 20 Oct 2018 10:46:30 -0400 Subject: [PATCH 1/3] Changes for KSP 1.5.0 --- .../UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt | 9 +++++++++ .../UmbraSpaceIndustries/WarpDrive/WarpDrive.version | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt index 35f630a..1e4c8f9 100644 --- a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt @@ -1,3 +1,12 @@ +1.0.0 - 2018.10.20 +------------------ +KSP 1.5.0 Compatibility + +0.11.0 - 2018.06.22 +------------------ +KSP 1.4.4 Compatibility +Updated warp bubble guide (thanks Darinth!) + 0.10.0 - 2018.03.13 ----------------- KSP 1.4.1 Compatibility diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version index 9d8fcb2..2e3bf98 100644 --- a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version @@ -8,24 +8,24 @@ "ALLOW_PRE_RELEASE":false }, "VERSION":{ - "MAJOR":0, - "MINOR":10, + "MAJOR":1, + "MINOR":5, "PATCH":0, "BUILD":0 }, "KSP_VERSION":{ "MAJOR":1, - "MINOR":4, - "PATCH":1 + "MINOR":5, + "PATCH":0 }, "KSP_VERSION_MIN":{ "MAJOR":1, - "MINOR":4, + "MINOR":5, "PATCH":0 }, "KSP_VERSION_MAX":{ "MAJOR":1, - "MINOR":4, + "MINOR":5, "PATCH":9 } } \ No newline at end of file From 7b97f6e1047c4c1eb64f4980473a27a3319aa8c1 Mon Sep 17 00:00:00 2001 From: Bob Palmer Date: Tue, 20 Nov 2018 08:40:01 -0500 Subject: [PATCH 2/3] 2018.11.20 Release --- .../GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt index 1e4c8f9..3278265 100644 --- a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt @@ -1,4 +1,4 @@ -1.0.0 - 2018.10.20 +1.0.0 - 2018.11.20 ------------------ KSP 1.5.0 Compatibility From 28c1dd71ca1cdb1c379a1bcf7c3179dcf9d6eff1 Mon Sep 17 00:00:00 2001 From: Bob Palmer Date: Mon, 4 Feb 2019 21:28:11 -0500 Subject: [PATCH 3/3] KSP 1.6.x --- .../WarpDrive/CHANGELOG.txt | 4 + .../WarpDrive/USI_ModuleWarpEngine.cs | 649 ++++++++++++++++++ .../WarpDrive/WarpDrive.version | 8 +- .../WarpDrive/WarpEngine.dll | Bin 18432 -> 18432 bytes .../WarpDrive/WarpEngine.dll.mdb | Bin 0 -> 5379 bytes .../WarpDrive/WarpEngine.pdb | Bin 0 -> 32256 bytes .../.vs/WarpEngine/DesignTimeBuild/.dtbcache | Bin 0 -> 182 bytes .../WarpEngine/WarpEngine/WarpEngine.csproj | 6 +- .../WarpEngine/obj/Debug/WarpEngine.pdb | Bin 32256 -> 32256 bytes 9 files changed, 660 insertions(+), 7 deletions(-) create mode 100644 FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/USI_ModuleWarpEngine.cs create mode 100644 FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.dll.mdb create mode 100644 FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.pdb create mode 100644 Source/WarpEngine/.vs/WarpEngine/DesignTimeBuild/.dtbcache diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt index 3278265..93a92d0 100644 --- a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/CHANGELOG.txt @@ -1,3 +1,7 @@ +1.1.0 - 2019.02.05 +------------------ +KSP 1.6.x Compatibility + 1.0.0 - 2018.11.20 ------------------ KSP 1.5.0 Compatibility diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/USI_ModuleWarpEngine.cs b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/USI_ModuleWarpEngine.cs new file mode 100644 index 0000000..75d7087 --- /dev/null +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/USI_ModuleWarpEngine.cs @@ -0,0 +1,649 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +namespace WarpEngine +{ + public class USI_ModuleWarpEngine : PartModule + { + [KSPField(guiActive = true, guiName = "Warp Drive", guiActiveEditor = false)] + public string status = "inactive"; + + [KSPField] + public string deployAnimationName = "Engage"; + + [KSPField] + public string unfoldAnimationName = "Deploy"; + + [KSPField] + public string warpAnimationName = "WarpField"; + + [KSPField] + public float WarpFactor = 6f; + + [KSPField] + public float Demasting = 10f; + + [KSPField] + public int MaxAccelleration = 4; + + [KSPField] + public float MinThrottle = 0.05f; + + [KSPField(isPersistant = true)] + public bool IsDeployed = false; + + [KSPField] + public int DisruptRange = 2000; + + [KSPField] + public int BubbleSize = 20; + + [KSPField] + public double MinAltitude = 1d; + + [KSPField] + public double GravFactor = 0.95d; + + [KSPField] + public double BrakeFalloff = 0.9d; + + [KSPField] + public double minMaxSpeed = 0.001d; + + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "T-Start", advancedTweakable = true), UI_FloatRange(minValue = 85f, maxValue = 100f, stepIncrement = 1f)] + public float TurboPoint = 92f; + + [KSPField(isPersistant = true, guiActive = true, guiActiveEditor = true, guiName = "Turbo Factor", advancedTweakable = true), UI_FloatRange(minValue = 1, maxValue = 8, stepIncrement =1f)] + public float TurboFactor = 4f; + [KSPField] + public float TurboMult = 1f; + + [KSPField(guiName = "Conservation", isPersistant = true, guiActiveEditor = true, guiActive = false), UI_Toggle(disabledText = "Velocity", enabledText = "Angular Momentum")] + protected bool AMConservationMode = false; + [KSPField(guiName = "Conservation", guiActiveEditor = false, guiActive = true)] public string ConservationMode; + + [KSPEvent(guiActive = false, active = true, guiActiveEditor = true, guiName = "Toggle Bubble Guide", guiActiveUnfocused = false)] + public void ToggleBubbleGuide() + { + var gobj = FindEditorWarpBubble(); + if (gobj != null) + gobj.GetComponent().enabled = !gobj.GetComponent().enabled; + } + + private GameObject editorBubble; + + public Animation DeployAnimation + { + get + { + try + { + return part.FindModelAnimators(deployAnimationName)[0]; + } + catch (Exception) + { + print("[WARP] ERROR IN GetDeployAnimation"); + return null; + } + } + } + + public Animation UnfoldAnimation + { + get + { + try + { + return part.FindModelAnimators(unfoldAnimationName)[0]; + } + catch (Exception) + { + print("[WARP] ERROR IN GetUnfoldAnimation"); + return null; + } + } + } + + + public Animation WarpAnimation + { + get + { + try + { + return part.FindModelAnimators(warpAnimationName)[0]; + } + catch (Exception) + { + print("[WARP] ERROR IN GetWarpAnimation"); + return null; + } + } + } + + + private const int LIGHTSPEED = 299792458; + private const int SUBLIGHT_MULT = 40; + private const int SUBLIGHT_POWER = 5; + private const double SUBLIGHT_THROTTLE = .3d; + //private double CurrentSpeed; + private List _shipParts; + private double GravityBrakes; + // Angular Momentum Calculation Variables + private Vector3d TravelDirection; + private double Speed; + private CelestialBody PreviousBodyName; + private double OriginalFrameTrueRadius; + private double OriginalSpeed; + private double OriginalMomentumSqr; + private double SemiLatusOriginal; + private int ElipMode; + + + public override void OnStart(StartState state) + { + try + { + DeployAnimation[deployAnimationName].layer = 3; + if(unfoldAnimationName != "") + UnfoldAnimation[unfoldAnimationName].layer = 5; + WarpAnimation[warpAnimationName].layer = 4; + CheckBubbleDeployment(1000); + base.OnStart(state); + } + catch (Exception ex) + { + print(String.Format("[WARP] Error in OnStart - {0}", ex.Message)); + } + } + + private ModuleEngines eModule; + private GameObject warpBubble; + public override void OnAwake() + { + SetupDrive(); + } + + private void SetupDrive() + { + eModule = part.FindModuleImplementing(); + editorBubble = FindEditorWarpBubble(); + foreach (var gobj in GameObject.FindGameObjectsWithTag("Icon_Hidden")) + { + if (gobj.name == "Torus_001") + { + warpBubble = gobj; + } + } + } + + public override void OnLoad(ConfigNode node) + { + try + { + if (!HighLogic.LoadedSceneIsFlight) + return; + + + CheckBubbleDeployment(1000); + if (AMConservationMode == true) + { + ConservationMode = "A.Momentum"; + } + if (AMConservationMode == false) + { + ConservationMode = "Velocity"; + } + } + catch (Exception ex) + { + print(String.Format("[WARP] Error in OnLoad - {0}", ex.Message)); + } + } + + private void SetPartState(bool stiffenJoints) + { + if (stiffenJoints) + { + print("Stiffening"); + //Stiffen Joints + _shipParts = new List(); + foreach (var vp in vessel.parts) + { + print("[WARP] Stiffening " + vp.name); + _shipParts.Add(new ShipInfo + { + ShipPart = vp, + BreakingForce = vp.breakingForce, + BreakingTorque = vp.breakingTorque, + CrashTolerance = vp.crashTolerance, + Constraints = vp.GetComponent().constraints + }); + vp.breakingForce = Mathf.Infinity; + vp.breakingTorque = Mathf.Infinity; + vp.crashTolerance = Mathf.Infinity; + } + vessel.GetComponent().constraints &= RigidbodyConstraints.FreezeRotation; + } + + else + { + print("Unstiffening"); + //Stop vessel + vessel.GetComponent().AddTorque(-vessel.GetComponent().angularVelocity); + //Reset part state + if (_shipParts != null) + { + foreach (var sp in _shipParts) + { + if (vessel.parts.Contains(sp.ShipPart)) + { + print("[WARP] Relaxing " + sp.ShipPart.name); + sp.ShipPart.GetComponent().AddTorque(-sp.ShipPart.GetComponent().angularVelocity); + sp.ShipPart.breakingForce = sp.BreakingForce; + sp.ShipPart.breakingTorque = sp.BreakingTorque; + sp.ShipPart.crashTolerance = sp.CrashTolerance; + sp.ShipPart.GetComponent().constraints = sp.Constraints; + } + } + vessel.GetComponent().constraints &= ~RigidbodyConstraints.FreezeRotation; + } + } + } + + private bool CheckAltitude() + { + status = "inactive"; + if (FlightGlobals.currentMainBody != null) + { + var altCutoff = FlightGlobals.ActiveVessel.mainBody.Radius * MinAltitude; + if (FlightGlobals.ActiveVessel.altitude < altCutoff) + { + status = "failsafe: " + Math.Round (altCutoff / 1000, 0) + "km"; + return false; + } + } + return true; + } + + private void GravityBrake() //Maximum warp reduces as one gets closer to a planetary body - limited by SOI so physics ticks are an issue. + { + var cutoffRadius = GravFactor * FlightGlobals.ActiveVessel.mainBody.Radius; + var currentbody = FlightGlobals.ActiveVessel.mainBody; + GravityBrakes = ((FlightGlobals.ActiveVessel.mainBody.gravParameter / Math.Pow(FlightGlobals.ActiveVessel.orbit.radius, BrakeFalloff)) / (FlightGlobals.ActiveVessel.mainBody.gravParameter / Math.Pow(cutoffRadius, BrakeFalloff))); + if (currentbody != FlightGlobals.Bodies.FirstOrDefault(x => x.referenceBody == x.referenceBody)) + { + var nextbody = FlightGlobals.ActiveVessel.mainBody.orbit.referenceBody; + while (nextbody != FlightGlobals.Bodies.FirstOrDefault(x => x.referenceBody == x.referenceBody)) + { + cutoffRadius = GravFactor * nextbody.Radius; + GravityBrakes = GravityBrakes + (((nextbody.gravParameter / Math.Pow(currentbody.orbit.radius, BrakeFalloff)) / (nextbody.gravParameter / Math.Pow(cutoffRadius, BrakeFalloff)))); + currentbody = nextbody; + nextbody = nextbody.orbit.referenceBody; + } + } + GravityBrakes = 1 - GravityBrakes; + } + + public void FixedUpdate() + { + try + { + if (!HighLogic.LoadedSceneIsFlight) + return; + + if(eModule == null) + SetupDrive(); + + if (IsDeployed != eModule.getIgnitionState) + { + IsDeployed = eModule.getIgnitionState; + CheckBubbleDeployment(3); + SetPartState(eModule.getIgnitionState); + } + + if (IsDeployed) + { + //Failsafe + if (!CheckAltitude()) + { + eModule.Shutdown(); + return; + } + + //Snip parts + DecoupleBubbleParts(); + + //OH NO FLAMEOUT! + if (eModule.flameout) + { + print("Flameout"); + BubbleCollapse(eModule.currentThrottle); + FlightInputHandler.state.mainThrottle = 0; + IsDeployed = false; + return; + } + + PlayWarpAnimation(eModule.currentThrottle); + GravityBrake(); + //Start by adding in our subluminal speed which is exponential + double lowerThrottle = (Math.Min(eModule.currentThrottle, SUBLIGHT_THROTTLE) * SUBLIGHT_MULT); + double distance = Math.Pow(lowerThrottle, SUBLIGHT_POWER); + + //Then if throttle is over our threshold, go linear + if (eModule.currentThrottle > SUBLIGHT_THROTTLE) + { + //How much headroom do we have + double maxSpeed = ((LIGHTSPEED*WarpFactor) - distance); + //How much of this can we use? + var upperThrottle = eModule.currentThrottle - SUBLIGHT_THROTTLE; + //How much of this headroom have we used? + var throttlePercent = upperThrottle/(1 - SUBLIGHT_THROTTLE); + //Add it to our current throttle calculation + var additionalDistance = maxSpeed*throttlePercent; + distance += additionalDistance; + } + + + //Take into acount safe accelleration/decelleration + //if (distance > CurrentSpeed + Math.Pow(10,MaxAccelleration)) + // distance = CurrentSpeed + Math.Pow(10, MaxAccelleration); + //if (distance < CurrentSpeed - Math.Pow(10, MaxAccelleration)) + // distance = CurrentSpeed - Math.Pow(10, MaxAccelleration); + //CurrentSpeed = distance; + + //if (distance > 1000) + //{ + //Let's see if we can get rid of precision issues with distance. + // Int32 precision = Math.Round(distance, 0).ToString().Length - 1; + // if (precision > MaxAccelleration) precision = MaxAccelleration; + // var magnitude = Math.Round((distance / Math.Pow(10, precision)),0); + // var jumpDistance = Math.Pow(10,precision) * magnitude; + // distance = jumpDistance; + //} + + double maxspeeddisp = Math.Pow(LIGHTSPEED * WarpFactor, GravityBrakes) / LIGHTSPEED; + double ts = WarpFactor * (TurboPoint / 100d); + if (maxspeeddisp >= ts) + { + distance = distance / (Math.Log(1/GravityBrakes) + (1 / (TurboFactor * TurboMult))); + maxspeeddisp = maxspeeddisp / (Math.Log(1 / GravityBrakes) + (1 / (TurboFactor*TurboMult))); + } + if (eModule.currentThrottle > MinThrottle) + { + // Translate through space on the back of a Kraken! + if (maxspeeddisp >= minMaxSpeed) + { + distance = Math.Pow(distance, GravityBrakes) * TimeWarp.fixedDeltaTime; + } + else + { distance = minMaxSpeed * LIGHTSPEED * TimeWarp.fixedDeltaTime; + maxspeeddisp = minMaxSpeed; + } + Vector3d ps = FlightGlobals.ActiveVessel.transform.position + (transform.up*(float) distance); + //krakensbane.setOffset(ps); + FloatingOrigin.SetOutOfFrameOffset(ps); + + //AngularMomentum Block + if (AMConservationMode == true) + { + ApplyAngularMomentum(); + } + } + if (AMConservationMode == true && eModule.currentThrottle == 0) + { + SetAMStartStateVars(); + } + double speedcdisp = (distance) / (LIGHTSPEED * TimeWarp.fixedDeltaTime); + status = String.Format("{0:g3}c [Max {1:f3}c] T@{2:f3}c", speedcdisp, maxspeeddisp, ts); + } + } + catch (Exception ex) + { + print(String.Format("[WARP] Error in OnFixedUpdate - {0}", ex.Message)); + } + } + + private void ApplyAngularMomentum() + { + FlightGlobals.ActiveVessel.IgnoreGForces(2); + if (PreviousBodyName == FlightGlobals.ActiveVessel.mainBody) + { + Krakensbane.ResetVelocityFrame(true); + if ((FlightGlobals.ActiveVessel.orbit.eccentricity >= 1) && (ElipMode == 0)) //For Hyperbolic Orbits. Conserve angular momentum by making orbit.h constant. GMp=h^2, so semi-latus rectum must be constant as well.). + { + Speed = Math.Sqrt(FlightGlobals.ActiveVessel.mainBody.gravParameter*((2/FlightGlobals.ActiveVessel.orbit.radius)-((SemiLatusOriginal*FlightGlobals.ActiveVessel.mainBody.gravParameter)/(FlightGlobals.ActiveVessel.orbit.semiMajorAxis * OriginalMomentumSqr)))); + var VelocityOffset = (TravelDirection * Speed); + FlightGlobals.ActiveVessel.SetWorldVelocity (VelocityOffset); + } + if ((FlightGlobals.ActiveVessel.orbit.eccentricity < 1) && (ElipMode == 1)) // For Elliptical Orbits. Conserve Angular Momentum directly by altering state vectors + { + Speed = OriginalSpeed * (OriginalFrameTrueRadius / (FlightGlobals.ActiveVessel.orbit.radius)); + var VelocityOffset = (TravelDirection * Speed); + FlightGlobals.ActiveVessel.SetWorldVelocity (VelocityOffset); + if (((FlightGlobals.ActiveVessel.orbit.radius / OriginalFrameTrueRadius) >= 0.85) || ((FlightGlobals.ActiveVessel.orbit.radius / OriginalFrameTrueRadius) <= 1.15)) // re-set variables when ratio between current ratio and original gets too far from 1 + { + OriginalSpeed = Vector3d.Magnitude (FlightGlobals.ActiveVessel.orbit.GetRelativeVel ()); + OriginalFrameTrueRadius = FlightGlobals.ActiveVessel.orbit.radius; + } + } + } + if (((FlightGlobals.ActiveVessel.orbit.eccentricity < 1) && (ElipMode == 0)) || ((FlightGlobals.ActiveVessel.orbit.eccentricity > 1) && (ElipMode == 1)) || (PreviousBodyName != FlightGlobals.currentMainBody)) + if (PreviousBodyName != FlightGlobals.ActiveVessel.mainBody) + { + SetAMStartStateVars(); + } + + } + + private void SetAMStartStateVars() + { + TravelDirection = Vector3d.Normalize(FlightGlobals.ActiveVessel.orbit.GetRelativeVel()); + OriginalSpeed = Vector3d.Magnitude(FlightGlobals.ActiveVessel.orbit.GetRelativeVel()); + OriginalFrameTrueRadius = FlightGlobals.ActiveVessel.orbit.radius; + OriginalMomentumSqr = Vector3d.SqrMagnitude(FlightGlobals.ActiveVessel.orbit.h.xzy); + PreviousBodyName = FlightGlobals.currentMainBody; + SemiLatusOriginal = FlightGlobals.ActiveVessel.orbit.semiLatusRectum; + if (FlightGlobals.ActiveVessel.orbit.eccentricity > 1) + { + ElipMode = 0; + } + else + { + ElipMode = 1; + } + } + + + private void BubbleCollapse(float speed) + { + var r = new System.Random(); + foreach (var p in vessel.parts) + { + var expl = r.Next(0, 100); + if (expl <= 33) + { + p.explode(); + } + if (expl >= 66) + { + p.decouple(10000); + } + } + } + + private void PlayWarpAnimation(float speed) + { + try + { + WarpAnimation[warpAnimationName].speed = 1 + (speed * WarpFactor); + if (!WarpAnimation.IsPlaying(warpAnimationName)) + { + WarpAnimation.Play(warpAnimationName); + } + //Set our color + var rgb = ColorUtils.HSL2RGB(Math.Abs(speed - 1), 0.5, speed / 2); + var c = new Color(rgb[0], rgb[1], rgb[2]); + warpBubble.GetComponent().material.SetColor("_Color", c); + + } + catch (Exception) + { + print("[WARP] ERROR IN PlayWarpAnimation"); + } + } + private void DecoupleBubbleParts() + { + try + { + int warpenginecount = 0; + foreach (var p in vessel.parts) + { + var posPart = p.partTransform.position; + var posBubble = part.partTransform.position; + double distance = Vector3d.Distance(posBubble, posPart); + if (distance > BubbleSize) + { + print("Part outside of warp bubble destroyed " + p.name); + p.decouple(10000); + } + if ((p.Modules.Contains("USI_ModuleWarpEngine") == true) && (p.FindModuleImplementing().getIgnitionState == true)) + { + warpenginecount++; + } + } + if (warpenginecount > 1) + { + ScreenMessages.PostScreenMessage("Invited Kraken - Too Many Active Warp Drives", 5f, ScreenMessageStyle.UPPER_CENTER); + foreach (var p in vessel.parts) + { + p.explode(); + part.explode(); + } + } + } + catch (Exception) + { + print("[WARP] ERROR IN DecoupleBubbleParts"); + } + } + private void CheckBubbleDeployment(int speed) + { + try + { + print("CHECKING BUBBLE " + speed); + //Turn off guide if there + if (IsDeployed) + { + SetDeployedState(speed); + } + else + { + SetRetractedState(-speed); + CheckAltitude(); + } + if (!HighLogic.LoadedSceneIsEditor) + { + if (editorBubble != null) + editorBubble.GetComponent().enabled = false; + } + } + catch (Exception) + { + print("[WARP] ERROR IN CheckBubbleDeployment"); + } + } + private GameObject FindEditorWarpBubble() + { + foreach (var gobj in GameObject.FindObjectsOfType()) + { + if (gobj.name == "EditorWarpBubble" && gobj.GetComponent() != null) + return gobj; + } + + return null; + } + private void SetRetractedState(int speed) + { + try + { + IsDeployed = false; + PlayDeployAnimation(speed); + } + catch (Exception) + { + print("[WARP] ERROR IN SetRetractedState"); + } + } + private void SetDeployedState(int speed) + { + try + { + IsDeployed = true; + PlayDeployAnimation(speed); + //For Angular Momentum Calculations + if (AMConservationMode == true) + { + SetAMStartStateVars(); + } + } + catch (Exception) + { + print("[WARP] ERROR IN SetDeployedState"); + } + } + + private void PlayDeployAnimation(int speed) + { + try + { + if (speed < 0) + { + DeployAnimation[deployAnimationName].time = DeployAnimation[deployAnimationName].length; + if(unfoldAnimationName != "") + UnfoldAnimation[unfoldAnimationName].time = UnfoldAnimation[unfoldAnimationName].length; + } + DeployAnimation[deployAnimationName].speed = speed; + DeployAnimation.Play(deployAnimationName); + if (unfoldAnimationName != "") + { + UnfoldAnimation[unfoldAnimationName].speed = speed; + UnfoldAnimation.Play(unfoldAnimationName); + } + } + catch (Exception) + { + print("[WARP] ERROR IN PlayDeployAnimation"); + } + } + + //private List GetNearbyVessels(int range, bool includeSelf) + //{ + // try + // { + // var vessels = new List(); + // foreach (var v in FlightGlobals.Vessels.Where( + // x => x.mainBody == vessel.mainBody)) + // { + // if (v == vessel && !includeSelf) continue; + // var posCur = vessel.GetWorldPos3D(); + // var posNext = v.GetWorldPos3D(); + // var distance = Vector3d.Distance(posCur, posNext); + // if (distance < range) + // { + // vessels.Add(v); + // } + // } + // return vessels; + // } + // catch (Exception ex) + // { + // print(String.Format("[WARP] - ERROR in GetNearbyVessels - {0}", ex.Message)); + // return new List(); + // } + //} + } +} diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version index 2e3bf98..fb827f6 100644 --- a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version +++ b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpDrive.version @@ -9,23 +9,23 @@ }, "VERSION":{ "MAJOR":1, - "MINOR":5, + "MINOR":1, "PATCH":0, "BUILD":0 }, "KSP_VERSION":{ "MAJOR":1, - "MINOR":5, + "MINOR":6, "PATCH":0 }, "KSP_VERSION_MIN":{ "MAJOR":1, - "MINOR":5, + "MINOR":6, "PATCH":0 }, "KSP_VERSION_MAX":{ "MAJOR":1, - "MINOR":5, + "MINOR":6, "PATCH":9 } } \ No newline at end of file diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.dll b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.dll index 77483b607d340435d06fbd14633633b31ca8edf6..694607917e48dedd4a5b3871366437dabd9fc45b 100644 GIT binary patch delta 89 zcmZpez}PT>aY6@6-kpe;jXitJ1(HuOy>ymX>D(;We}8pN^SsRw7AM$rK++6Azy!oH oj0_AGu|RCkzz`Jd5?uCqPwfBMzP|g7rbN44sXn;b$9@Y30NMN?y8r+H delta 89 zcmZpez}PT>aY6^n!;}qC8+-Pc3ph2H3!U39;aCF`LN56vYIqBK{X-Q55d z+bW1o6%`VzGX||ARSP=Rimg@Ds*JTG+D^rvYKk!Z8EX|=(6)}%((m5)c1mJN;kG49~oyc*ovM#%t`_#34y{GUZQO)L@iLEN3O)fb75G#Uq z8Rk()C7ld1v5Q{vQIX5!E%`g0CPPw#im94vC`>jrP#sVW)k=OfTGjYDSAp{Q z#Qb7vLSONVke5BH(D&3GV!=czp9D#3sGi@c)2O~fAIEK=llUV#{X~B>&s7YD-iZAJGYW`}m`PKlsxKq2a=l5nn0J_tkczULm0C|(R$@B(tD3H9x~`Ij zyNjtD*Vz;#P1$eK%jPSEXD<7HoaU zQV5(1&{B}9yz8MOo@=~$Deq%ag-rJf2bxTV@|Kt0_Ku+g<5K4Zp;kG%pK&f+4kGQw zlOz2>$ddtuqgGxzD=wh8p?nH4O1R1tgJTOB)8Q(0RPGN@pe*30Y7gdYrDiInPATvd z_{?%Z|B`pG33Bg?H z!f~3TvVcay2E=8Y0;kG(E9qpamq@2ZD6GN7^}vow&y*_NRz$ZKJy1kC=X_n7Ydo7) z6xUGSRvj?^C3i~?@_ST{n1#JkeghRks4ysI^(KVMhC#DCti8NbFx~J5-!X@ zMlz*@m$0$LRZ$Y_+1Fq zXf%ZqROzbCPqsv5*mP%;O`40ddoIn#uLIHBpbFXJBB@|idB{(X`(N`5@9=aFmWz3ft%4Cv*xt>(-RZKAladrtpl7P-~ty|@9dF_^U%vdgmw zM-kixB@iILJZ>(aI2~iORtjHC7r2W!gI;7b9q}wkSGu=m!iBC4(C)x90n&Y{e;~C! znOSjpCY8$#B)Mkx_GNJZCz4z*THC!Ln@%Qs!Aj$N&Skmjm5hYs6q)GIB|0d6|4=&p z#V|^7NzNT{c@kODU`{Csc4M4eUuv*>pw*p13G#GSEr%Ctn(HLPh6BEHRCmB3{($R1 zN7Y+g-pBfO!zaU=bJQ1+AJL)&i!6sL?d0P;e-4x<9KvqJ<#_?Dk&e+)01*yi0`!2Q zR{y*<)S_$DN{nuf&mC-sLZL_%uEISH(Mfa&oFI5P-dRVBT(gML3|a(rmCCkG(_~!^OR1q~p%tYw zU{!**gz71a>pa=dpyfD0;&duPp+SArLet&n*U}J9wA0;Qjwgkw7l}`pE~EvxZp0{! z^1g{wNBDW0+q(+*Vp7l*!_YNkAtKhuD03<;k!#gx9$hSvPB(Bg zS`p-yyNq7h-X)A5+e(*GJFYs+`=G;pGNi1$`Y>#Or_CUBl zfNU#XFHd2_c&7+yT!B{6N`$!!5O&*Xp(~nDza}?9Rd$5wuJGMq5%^@*p5}_0+>jn9 zX!_fZk4Ac&+U^lS4oNul{0c;g340#~g*&W^P>C~2_(B2pPdJo>PbuP1azb=D`9+Y% zaV&EL)gqD7)F7#MQW_y?b-{##&_Rt{gOe|4R3=-h@@bfEjO>iSgh46I;3IQ5f z0(u=UVLxPeN0Ir}I|{;w8HX&7f^2KF)QsKq0WyVz>#dGRf$@H}l;+CGaQZ=vE{f3# z2!}%yS(mWlXDexc%Ssne#XF`EaS|WDv2CJYeyfE1mmIqZKq?H9~NbF}Q zN_C;y+R#)AAQKGu#oiVpX{ex?QkB)P!9@r_%iMN3bs{vC)9sEMl*>lYHHDMpBSE@} z!9M28MiYX~$xwgT4QI$8k%AP{X&_bES4GFGemo`bH{VyGo2MXr3&^%Q>a8wmrJb^g zi_nri`o+pz!$h_uEtHJ$DPvQ?D8&RYOPS?6iKI@|QoP0BI~FoWTF7fP^m@%3HD6A( z&vp#7Xpxg@KddsD*63uYI!?J+1#xCeaW>V{=KAYI>Mw(?k0oVk zOSUDKZ9z%)CZT)JmkVrm9)9z2ZZ^Wyry)}uN-ZlV+|h_ZrmYnETfciVL{ut_AAbc9rUq<~L$P4@@)Ng@&z@MQ$3i1P= zfl0!kV&EavXM;+BccI<{ngo0h_0K>7;Bz2|0>YO&J&k%52w&;&DnfKSFuvaD_X1A? z;cK1#ZwUAna5?aL2-pak4BQR@UjW8uKm8*JRSzLUz(EMrf^S4&;52YGC;~hW0`3N` z1bzZI0jdH%3j)R<@D$)N;PXM%z&#L_fogz%fI0=L1^xu}L!dg~8?XosWCOp8`ZiD_ puvpN?z)ip*U_S`^B|lk;!{;Cf>Z4XL1^;ne1pi6Yg8ww?{{s9ZAWr}Q literal 0 HcmV?d00001 diff --git a/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.pdb b/FOR_RELEASE/GameData/UmbraSpaceIndustries/WarpDrive/WarpEngine.pdb new file mode 100644 index 0000000000000000000000000000000000000000..73e569e3d9bc3e477c24e72b7a7d61e7c12e51dd GIT binary patch literal 32256 zcmeI53!GMEoyX64XXYL50>TK0I^02Em;nVu)B%Q@GKvnUDFVaH3o|mzjB^3Jw4D*s zEHy|iOD$Y4Y1x)#hKhw{rRMHpYFSGwwpm(j-V0lj{r;ZIJLer{Kqo)@*?dz0;7~4m_os?N(+7If5hR!+gS~sR;oiMj#(wzE!CM3E zwST|E?SJq#c$<>lSWpz!?mT~qwsvdZ+IG?2TS`m6H}S>`=R9}$V?L<-+}6)K1v}54 z)Yd8OclhETrv};^|5^{@^S|sWQCt4wl=5&+JF0=h?cY(&92)MsSDby?k8+>wv#BiD ze%2j{+aI5O#^+!C?N9q`I?dX<-*(jneO5l(=h5SXV0V}KkNz=lz}}@_>0NsDU+U&p zY&c=k{J8%}@yms1Xn8vMsD<%iY&>pt3J&PmHhFMVzH z^FwdgcH_vJ_nz(lk6kl|M(#hX_V04fC0Fzwy|dRP`9Cjf{M{cW)t)tS=%G=A2S+Ji zJJOcJ^WZ4e;Zhu^2Htz^z1MUj_muvWOj}aYP*=aAZvB$QW%I|+oxfx6^%hqIc-U$i>$e^di<*DrX}l$ ztkOi*Xd{zD%0?EutWadl@yI%#v9hY_`uVjh>y)L==ctibs$DFd&kJ?BthBDOxhADr zwUzky<%^14w#LNRT78PKJB|4Tq!ihOoQbG`NAhRAF4~yfHul5TL!}0e{&iva0)^fA z%6H!W!?x$bb~?v?t3oHlNkn>n!>8Uh8d2OIKjoI>66depD8Cfq%`Pr{*oUibe??*A zJvSa!J=cfbzV6img;kGMyz+~O#p$qlA2pzJo{7QneH65wXT35BHKsFMs(J1C-@LK~ z6VI7DQ}(k`MbpZ=RO{$`)x~{gdU~Z~5)lgj# z^o{wKG?cHau3eSkwxGK95~URnw_0b5}m%?hVde#f!VIa_;KG zarYJ22NA!@7k95stuv)p+4amMn+Uf+JsT&S$&(uk={&7*?wVoaaW#@zrO~CWJLM~{ zZ8Cmc+xV?)D6dfARrYRe{MI(EG&-93nIks}TnNLX!h*0UJR!X5-bD0#*peHz z3=LaO4qKLlEfrx)RoGISxbic3q0)Ji@Rf=H6Y|gZA7%7>=T2TD)hTI3Y9A^zQhI%% z>XPkh#F0e6`9q|(_|t3eMQR7;pr{xg4d=qa@GN)?)O>L)Tn>+eYX5v#4~M{Ya47sJ z90psU;{9hh68oKS6#Oz|9*VvK$H4pGSon1~4&D#P!v|mid=OGc(L<0jMvp-1Gx{!^ z1h>Nz;SbSN%RDyY|&G28vIvyGTZ^D!=J)a;B%0&M?Ztb@E33f+zDsG|AZy* zMK~M&4$gu94d=qQ;5_&)oDcWH(_vReb5ClzRZipjD0~Chi#9n9$wvku!;lfkP(*H$ zAtvlV!VSdTvhB6(UOEaBclTji<56CE(lR|sqg9R$l>fKMfg58cFS?c)U~$O*)p$PD z&HqiVHW*`RL%&b{guxcdW%}HP^0n1Xm(FY`U!6L2#j<557A~V>7aVBbKsg)H{L_>8 zGza)JUvVkL(`1Y#f3?3f8AP2)^G(tkj@a^qnoEpP*?fQK9|qC1*`UA6U)t%5{KxAFr!)XEvnDSF=NyQ^#GXP2215ZYOQl ziX`o0^R2Y^qd(OYE(qf3C(+OM`tkG^)iqqwoHAwi>1*#P6E8b)B}aMvc>3+=Z*3=i z;z~~N`bvLRLwRG>qPm(?LwPL~pt|?z?`|i3_72I(USH|&M}I1fEE6w(H}p^S`X+sL zZcPp4)wNBH3L8&}pYy0sk?ATyJI;`y%?Z->KN2Ayc_&nG?(0;rMJC2#c zhqdk9e!R3tM!dFd+mBaa{NCheofVVn#@Av9^`RE zdk&4q-qdFyG7qUjBIHhF8?p;gpB+rUIRVk0Pxl_1kb96Pki+KxrUo?s`*}qDT82Gq z+GxEl#oc%^=3##ysCJj058K)M!2R9xnft)SwQNA_*_kq_ zdnl1EW2oy@bt^8mZrW#b?w&?_m9Sr;IKEfe;_8RJe%kb+elGX*qj|C5SUy zHRZb7RlsTQClAEo_eb1QC3KyKTRi=IH!kAoA3^$e$J1ZTF=b8Vhnl|cAGfxXK6{8kN?=8DOo2X!BWxKgvR3Jz7w%+zZuQQmqen6Nt{Z}O;%tz<^|3T9QMDpt>^X{v5&_G?X(>JL5X_;4!MeYo#Y z9pV10(?6Des(9GHrR$=+rfF7lQ{BpyxGOJ`PPB2BY2*Cx!bEhprs<3}zJdg0E;fa* z*PNOpCy_tn6u*teTlrr=nFgaL9UpF}Tici`()q72nLnqzvbx#q!+jYu!!$IcYMWNn zRbFc1-bma7i2G}#^$V8=>8anx^=dhLG)lPpy1C#$ZBHcedwbTdEbZOHe&L!#%a-uU z5s51=!=9ZRm^$OF(UzUzl@GS9vwSv}GM`bVoFSg%ZRFk5*_`V2smjImm3CN|az&JB z3!7c(_;9Mrt+-d={uTq_Xs)HNx}>{vBGg)!HFfJ!4U4K8>YAErQuwJ(G!EinDythg zkL897qd2I(4F5Id>l^D+sY=2zV(eN%mNUZWj!AKol?->ISYb7l?;QjvB=LEK+vD;r zJ*_M8JdtLZ(!|;1i9K3|e{+3(M!A%4_9+=*nq09LrnsHvym=&H*h^%DDW_E0!<5&Q zq-#O_!soS;Ox=b~FQ_`sBM#QGj5z8kyYEZBZEhtz=dnQ_+T80g?lbh_bMR#c>Vvd% zn?4vWAU@{c)rsiaiIxY$k533ceq(s;y71bU!p~fpXn8BK;mE{Q-NLJG39tHFc=g)w z>OUo}J0@}cl5o=;ir>7udlv-AbqvVnVqQHeBw^bNJLMES8hveI4Rs%me}}I;;P#dSFg>e zuN|(wwh`W&LDbhqI;`@kwQfeK*|wSG?%eVQGpBW8&loDHM9YgNeZRiEt$~5jdA>KS z{mEhmgGt}s$>`Bkd3|Hbw9|7$bPsyc@!{03rH^yEJsPm9{(InfCo&iNg)Ux&SNp}o zYjRNd={RmdIIj;XTzKuLH0{O1r`Ffk;AG0<$IqM(-d1)l?w%YSjtSyXSX!|3g>WnN;b;_+km0eN5+nTEI5%t6T}COzX+ zlB%d{uJ?Dh+Jc$Bs50#$gXg0!T_0ZV`RFdfy%_gq7mr`Fv8Kz~`fdhEFxN_VDgg$g zdmCB#wA1zdCaznLzrris0ffH^`{!JE-)}O)*EO2cS*;tI1KRl69*?_U>*D_Lwa&MJ z&+9_cJ`TOhpz2F`Wg5?nAG_BR&;8*2H8Gkv!l}un;nFbrN*MhvY#EnmX-r(XFtK4_ za^sM2;}DyMZ`Y}=mN%m34bS+JPq=*AJ)|wRy*1agtY;n{_@2%__hd!+TcV{P-naT` z(Zif+Vg6EA$pz$1brsC1uC1KST3Xkjk(6!&)$Me`JdH@#hnM>mxIKXs;(k64N*w3p4z?V20rCd%?iNM-Z$!$w!O5k5hfPuafU@}xQZoD>Jc6-}v1chl0D z`&OTx9_-3YwJ?8&kly!V>DhKnC)erom4v&;_kC%jOZ%^}w1<-RUwqn{3)?y0>2zP> z9&vM`Wuxlb-{-#K^6<-89)^*JH)sd-fuNv*Zq&K6fj3cKj@UE0(45y{C3WU8U0~+e zqgwM^m@TMzF3eCe&%u?o`S_2Ar$hUEcmi`TBM#Gt*yW~lsM^4ui-meNZj9nHiyA!J zrBepAR+4_iexErbh}csF=Rx)g!TC^q?;~&wybxvwIs8lV?-ZElt|wye8_3V6Z_mZr zPrsaaRG+LjCjCmN^jAWqzX~e-Dya0Uq0(Os-*5W%T&(@{X+o1eQ;|u(87lpCQ0cFS zO8-)*^e=--{|eZe{>icO7iN_IX~NobuP}XP##|q4M`Ugw9+jW<#H9aOsPsMu)n0n< zp#a{DojwtK9xjDnfEUACAY}+{h2&l9ShN;?5mJWWOYl0l1#W`3!>k~ie`>oE5Jnaz z$(s*3%yK!rE0DvR0P@e~>5mOJ*HC(D)9HvkCku7oYD^Y?HAl+a9oRB`8LF?{1CtyU zbmN@`QE~hRvFBT1`fQBh9lU_ZeAUHqAMA_$Yf!!WU!c}MaUAsZBl|?`Ux$<6H(-hL z*Pifx?DOC^;aTuoa3OpEG6qaMi=pD7ZwKFo%4<*F*yzdIAw4-28ycL0kJj8{vFp8y z0%Pw(fA7zG52D;ZgXsY$YvSJ`6PmAA#MW%BI-1VebvU z2M5FLa2S;TNcb4`QSkdvb?^hII(QtO0u`VH4Qu07DRus?hr=EI-CA&#mS)x#8LKMnpI|6)j= zi_V3=2!gBcfiGdFe+0jV--Z7LsT=iK^A3>WRX_Xc7eZ#N5VhC zli;7=ED^o=@HOnG!`I;%j^{i7i=2HWd;|Yg@J*-+kp9*1E$p9wZ$mxPdj~!Z{|sM* ze}Qkp-7tr`eHR`J{|b+T{{!=((q|)O;ynfK!G0e68&uuD2R{P$Lfig%lv?NXIkf!< z{*FR=Fk9F@(2KER+k71D-VGUzj4>kj{_fqS999$CA96SwJQke_L_OU1nV!r<>gn3w z_D3_9e|F5}qS1vpt4mPtI0Z`1AWRn%Hjf<1Bw4MLZoIE;$K9S=hUN@Y;WXBm4~$8K zwy$Nu9=LF>Vb%rJ{n6NSuq&rYsIf-7o3SPT66~~pG#m1q+`QM;4YI}rJzz8J30YHu zUeMO5=2}}e(d{_;KK)Y`_pE+|D@+Pu|m~{`Sx%GT=ZRge*wEmBgamXpA zKKcZgq{H^)od7@Aj?4CEkYV}^^E^W4<1RCtbV*+CE1S7?6pYWcqp=@}|M4&%D*x(% zW3e9($HN)UUF}?eUG2;}17;54S-V-Ei(ozO6QOc?0$dLj-#@_DV{d?$!4~KKamd~_ zx(Z$a^<4C$@JsMxaEs$ZkVcOlgDvp;@Jh&otzaYE4X=g_DwAF|WL}MO;5D!Zq|8xI z_$k;6UJJ)V<*x`{hkYWv9-ah04X43P@C>*a*2B-hOW+N#3El|T!kgea_*r;8{2bg2 zsbe=kXikW)xx;Bqt-pHDbGo^c?jnrjH( zj9VU}63El{(U{FlPpu`h%F3?GAcz-Qr|@I`nR+yxmwX8#~P&8du|i1i`32NuD5A>%vv z3OpNr6_PiTj>h19*hxG18hjZ33;cKZb+`jkp6D5PKl~~DCLBlKS9*o;TiEA1`x)>7 z>ggws=wO=--H-DdY*N>2AimdmZ%=-N( zJQ4eM;py;uuo`ZMTBjd_*TCcXbd|UP$?wsOt zmd+B?5Bd;Z#?Eo}UQ2a#BqLnL*VAvfw&&ns`YgQ44t@%@j84Ez5#9d z)y8uX^+Lbj9p}ngMmbML7PCZ45 z{srbZst>8m>Kk%b-`EY+H{OMX@UL(t{2zEO+yg71^j5*YVXuPkLG5k!!cW2=5k#K? zA^aLt`1|FIU1KH-s!p=ucOdsDW>2GhaF1%jKM#3PJ^Bx4*L<0aeHY}LC$p#N3b{85 z#B2(zbdpf^BVae!8+L~SU=KJP_Jkv#!WBa4od$bhFNR0JS+F-Ofjmr#X2ZU4Av_Y6 z!G2I}YWJ;UXtx2uF!rP}gXqt;&rYYOY9CvQSU;_U136O|Xx3n@iJvt()?Mpzp3%*B zW26uFP%<{YPobBO<`m;LlzT9(lS8-{A3{IT^=P-QE4-aY{kg@d#_q?A%4W~$!(gL{ zjr~5Hin~l6<nq!7Sjj>^{ z7!HT?q2gHp*$e+S(BflqJK^l}gE0LZf@wQ_ zU&%Ua>aqx`F2!z8W$)qaTDK=+ahrn4-b4&@e`BYsFK(sFC?9t~nbI#LxZl6Jf>f9V%b!XH4H!eQVAu#XcCG2{ref1(mOba1=Znj)vzzjXw54(Fu@! zkU2}@UL}_QqfGuY&%y@d*0#?~$mlZ~XZG1fsIwVkG`_~EAQ;YIOqqD^%#`Uun2Wp0 zpuV#NyY68xf~pf9xMqx}W!NvpeL1`gmctw13V0W+fSQLD-$Sqx`@=8=pM@*o%WxI^ zEv$mC!fNpe;TqW5wnyUP$J|nCM76CkwanB{4y~EPyqM$M?YKLM za5|H2TYnQX>TeJ6*yl1~@Jkb``7TlCTE;N0O#RSLOdsqEhu}lMG-t@vwP{QGLo^fj zW8r*A7_+ybKbSLN`a`r5_v2wL91pb@D}>iV#;LhyXPlaE5>JBP#+`8*ZHK4ApTHTg zD>HXj_QqDGz>!YIz~hn8PKG7C7-ij*KrkS63>CL8LG*W^rK_cX4WE=7v@;1^VNxwx( zkSZiX?nJgByO7<;06K3WvJk04u0`%dwjzhB(Qo<<>N??#V%lvuZSq4ZLe2Rkc2O@8 zi0@Fx;&s%O_<3he4^k={@Swy9;IMU+TjB%BA;`^Iz=Zd&z~<3x5i~*|`@v_jg_R(8bg2;;DA- zPdfK|UA``H9O&GuT|B4wa8Ca&r>`>>rTe@~{~hOlkz`$iL%8%2FK+4bd!6&|=+`X)V&b1bWUNEJtdP^~gqK6LKqZ5Ap!A9eEmg0r?H` zI-<3<3+ePj@)7M(w13e(gzkx!AXP{c5+T-fSpDQ05sbgI_ zR~Q|ollkGWPs{o{JvQcEZ(BO8_Vuj4(>t-XPWJ4Rp8HT3cb}#W<8)*7Ii0?o2vk0w z=DxZ%jMJq)eOtt44^qlBes7TJdf0X_)xZ^|@0bs~Ge0n=kiOs9Fs|=RZS6bT(*3T@ z$K^3y8^-B!W8%ljp4N0TJ`DG1T7Rck-m1razw7I>+SRlEPH#o4p5}(EVBZf|eR|g4 z=~cFtaX9(RGV{&8FaCL58^-CTT6MMdSlxX;%JjN6jMH7&n&07+)9PlveC_qDztt;Z zf%Wsa)}|~zA~bK+$J)WVyYS58K71AHk;2b#A07Jmt-A{!n@e|?@VxZtKOT&wVf~yA zbE!{b3ze%h%m;e0@YdahXAbpqyuNqKYV#pnI$y@m=`eqK9eo#;)#igSuVek34)dnh z(KlCFLFUI;UdQ@5o!I)LhZ|YE&>R04$?I4@rxP0|`t~EMgO5YJt_|aK87F>zUc^Sq z)I~cVN_brx#_7h!ioRvY3fg?+5UYRd@AP70Mep`!1^d4E@6)sXPOqXhue&&K%nI6n zk>2atFitl%&bG1;x%S)VWo@r(!#Lg8IMX}SYLoU}vi7<*jMI&cvjH5+nEGw=60_H{ z{#I`y72 z3Z|c05lo&u>BORImw-A(3p4-U3cXV(_OoMy8rJ;Z@_-^ z^7o@RYCn1t_MKYF~s)L}mLOs%8xmExyonli5YnrocRd+lS5ZC}5;3DA+>GyCz= zerIzBab8CTx_02FcbS)T;P)neH68freOG-?F5_UXRX)9+c)79d>!)}AE><8+TRnY) z>%ZS^>!D>dJb+_lI=k4F=z)#Po7j=+NJ#*aHfu5eBo!Nn( zo=c7Bz)#PH%%H=+ZQ1pV<*yy+>G^?wcF2xOV*xWg4Fd6k4CrV zc3tT=y}P)`y_=}FArvk_?0UaL|75<1EO65KUpr1u=joq>?tEPBPIncJf5#72`^7-N zmh686+f|#Yz#3JOHQh~R+H3E7P;h_$|0m7I6Zk=%)%pSLU_x#Anp9&jp|PQ2LRG4~ zGS#qxPm)(#hn3Yesm2MN|AFm_eSY%Wr1SSi+Zg-Z?hhrxj(%{PS&ViSR!du(eB=h&TJzT==5Rlc@&1ZAgVp-tWi;1& zm^O6QdNb@YfiqW1rG4TKbTv;+LsTGcwai;0ijP|wQwcpF(|y3yZ3?e-O%=fMpl?ad zal0x^bDQ$k59yC+-+2@=0MY)FtyrMv=!21C5T2d##)~b>5U9!>h73nEXOBciA@Zx(x0> zG6cvEXGjF9C;+R=WGG`u1&Rd&)s_N9lfgWg3Ri|ahIEEZAPG`Kyr>?~oMNC2Aa`Uj K+>x&f1YrQz6(kz~ literal 0 HcmV?d00001 diff --git a/Source/WarpEngine/WarpEngine/WarpEngine.csproj b/Source/WarpEngine/WarpEngine/WarpEngine.csproj index 0597e1a..61f22d9 100644 --- a/Source/WarpEngine/WarpEngine/WarpEngine.csproj +++ b/Source/WarpEngine/WarpEngine/WarpEngine.csproj @@ -31,7 +31,7 @@ - ..\..\..\..\..\KSP_DEV\KSP_Data\Managed\Assembly-CSharp.dll + ..\..\..\..\..\KSP_DEV\KSP_x64_Data\Managed\Assembly-CSharp.dll False @@ -42,11 +42,11 @@ - ..\..\..\..\..\KSP_DEV\KSP_Data\Managed\UnityEngine.dll + ..\..\..\..\..\KSP_DEV\KSP_x64_Data\Managed\UnityEngine.dll False - ..\..\..\..\..\KSP_DEV\KSP_Data\Managed\UnityEngine.UI.dll + ..\..\..\..\..\KSP_DEV\KSP_x64_Data\Managed\UnityEngine.UI.dll False diff --git a/Source/WarpEngine/WarpEngine/obj/Debug/WarpEngine.pdb b/Source/WarpEngine/WarpEngine/obj/Debug/WarpEngine.pdb index afad6067a0d9eb1494bd90edabf441692ee35d44..73e569e3d9bc3e477c24e72b7a7d61e7c12e51dd 100644 GIT binary patch delta 471 zcmZqp!`SeLaRUpNMBbf<7)AyLhO*ClV*k(f_1$kYCED#u^})?DTsmxURKTC=-vEO;I{mbh;S0?kzxaxwWHGo+9kpW|??QFIfsB(~YkX$Md z!@z^djWWWP$c7`!Rsb!4nRKB1r5?y6kfk7#Kys-Y9gP_`$-Q73_FD1PS$?+&2uW(^paCk4R&sp;nHE->>;v)ag&e- z(`FBW9gGtLI5u;L*)vVfk(6L$nCx3(HCew@VzQB>)#L{fJ(Ht~geJED+3h7lvfMxu zmjQ7w5WfLpBcK%^TS9=iZu4hJQ6~2L@6_{N@4q~mU&d7zB&-3%(vJ)n50t;uivhAh z%0b#ea;ZQJ18*ib$_QH`8;&en2h;{LsnvEi8^|P(n zDT#@Rkzuo+>N^(3Wt(la*bP8jx2Q{;OpJ`1rBa@;FUn&Q`40r;oQ8}b7YQ&h^a(Pw zM^6^XF`BH#BQQBECjd-ugVJKTF<^dEZr$XPe38u}1s|Ak2J&Q?l5B7oI+eIizE=_m z3Oh?Spfy}T46@E1h(SOJh&g~*5Qy1<7z9{>xE_c(f%pOtb4_k2y~An_WSMPFESt{` E0B%ov0{{R3