Skip to content
This repository has been archived by the owner on Sep 7, 2021. It is now read-only.

Commit

Permalink
ksp 1.2 update
Browse files Browse the repository at this point in the history
  • Loading branch information
Crzyrndm committed Oct 15, 2016
1 parent c072762 commit c078c66
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 60 deletions.
Binary file modified GameData/RW Saturatable/SaturatableRW.dll
Binary file not shown.
2 changes: 1 addition & 1 deletion GameData/RW Saturatable/SaturatableRW.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"NAME":"Saturatable RW","URL":"https://github.com/Crzyrndm/RW-Saturatable/blob/master/GameData/RW%20Saturatable/SaturatableRW.version","DOWNLOAD":"","VERSION":{"MAJOR":1,"MINOR":11,"PATCH":0,"BUILD":0},"KSP_VERSION":{"MAJOR":1,"MINOR":1,"PATCH":2}}
{"NAME":"Saturatable RW","URL":"https://github.com/Crzyrndm/RW-Saturatable/blob/master/GameData/RW%20Saturatable/SaturatableRW.version","DOWNLOAD":"","VERSION":{"MAJOR":1,"MINOR":12,"PATCH":0,"BUILD":0},"KSP_VERSION":{"MAJOR":1,"MINOR":2,"PATCH":0}}
112 changes: 53 additions & 59 deletions SaturatableRW/RWSaturatable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,8 @@ public override string GetInfo()
else
info += string.Format("\r\n<b>Bleed Rate:\r\n\tMin:</b> {0:0.#%}\r\n\t<b>Max:</b> {1:0.#%}", min, max);

//// resource consumption
//info += "\r\n\r\n<b><color=#99ff00ff>Requires:</color></b>";
// resource consumption
info += "\r\n\r\n<b><color=#99ff00ff>Requires:</color></b>";
//foreach (ModuleResource res in wheelRef.GetConsumedResources())
//{
// if (res.rate <= 1)
Expand All @@ -273,7 +273,7 @@ public void FixedUpdate()
{
if (!(HighLogic.LoadedSceneIsFlight && FlightGlobals.ready))
return;
//useResourcesToRecover();
useResourcesToRecover();

// update stored momentum
updateMomentum();
Expand All @@ -282,62 +282,56 @@ public void FixedUpdate()
updateTorque();
}

//Vector3 lastRemovedMoment;
//private void useResourcesToRecover()
//{
// if (!bConsumeResource || !canForceDischarge)
// return;

// float momentumToRemove = TimeWarp.fixedDeltaTime * dischargeRate * saturationLimit;
// float x_momentToRemove = Mathf.Clamp(x_Moment, -momentumToRemove, momentumToRemove);
// float y_momentToRemove = Mathf.Clamp(y_Moment, -momentumToRemove, momentumToRemove);
// float z_momentToRemove = Mathf.Clamp(z_Moment, -momentumToRemove, momentumToRemove);
// double resourcePctToRequest = (Math.Abs(x_momentToRemove) + Math.Abs(y_momentToRemove) + Math.Abs(z_momentToRemove)) / (3 * momentumToRemove); // reduce the resource consumption if less is removed
// if (resourcePctToRequest < 0.01)
// {
// bConsumeResource = false;
// return;
// }

// // I'm looping through like this because I need to know the minimum pct available across all the resources to be consumed otherwise the last one might run low and cause uneven draw
// // if only one resource specified lets just not do this extra resource check...
// double pctRequestable = 1;
// if (dischargeResources.Count > 1)
// {
// foreach (ResourceConsumer rc in dischargeResources)
// {
// double total = getConnectedResources(rc).Sum(r => r.amount);
// double requestedAmount = rc.Rate * resourcePctToRequest * TimeWarp.fixedDeltaTime;
// pctRequestable = Math.Min(total / requestedAmount, pctRequestable);
// }
// }
// if (pctRequestable < 0.01)
// {
// bConsumeResource = false;
// return;
// }

// float momentFrac = (float)pctRequestable;
// foreach (ResourceConsumer rc in dischargeResources)
// {
// double amount = rc.Rate * resourcePctToRequest * pctRequestable * TimeWarp.fixedDeltaTime;
// momentFrac = (float)Math.Min(momentFrac, part.RequestResource(rc.ID, amount) / amount);
// }
// x_Moment -= x_momentToRemove * momentFrac;
// y_Moment -= y_momentToRemove * momentFrac;
// z_Moment -= z_momentToRemove * momentFrac;

// lastRemovedMoment = new Vector3(x_momentToRemove * momentFrac, y_momentToRemove * momentFrac, z_momentToRemove * momentFrac);
// if (dischargeTorque)
// part.AddTorque(vessel.ReferenceTransform.rotation * -lastRemovedMoment);
//}

//public List<PartResource> getConnectedResources(ResourceConsumer rc)
//{
// List<PartResource> connectedResources = new List<PartResource>();
// part.GetConnectedResources(rc.ID, rc.FlowMode, connectedResources);
// return connectedResources;
//}
Vector3 lastRemovedMoment;
private void useResourcesToRecover()
{
if (!bConsumeResource || !canForceDischarge)
return;

float momentumToRemove = TimeWarp.fixedDeltaTime * dischargeRate * saturationLimit;
float x_momentToRemove = Mathf.Clamp(x_Moment, -momentumToRemove, momentumToRemove);
float y_momentToRemove = Mathf.Clamp(y_Moment, -momentumToRemove, momentumToRemove);
float z_momentToRemove = Mathf.Clamp(z_Moment, -momentumToRemove, momentumToRemove);
double resourcePctToRequest = (Math.Abs(x_momentToRemove) + Math.Abs(y_momentToRemove) + Math.Abs(z_momentToRemove)) / (3 * momentumToRemove); // reduce the resource consumption if less is removed
if (resourcePctToRequest < 0.01)
{
bConsumeResource = false;
return;
}

// I'm looping through like this because I need to know the minimum pct available across all the resources to be consumed otherwise the last one might run low and cause uneven draw
// if only one resource specified lets just not do this extra resource check...
double pctRequestable = 1;
if (dischargeResources.Count > 1)
{
double available, total;
foreach (ResourceConsumer rc in dischargeResources)
{
vessel.resourcePartSet.GetConnectedResourceTotals(rc.ID, out available, out total, true);
double requestedAmount = rc.Rate * resourcePctToRequest * TimeWarp.fixedDeltaTime;
pctRequestable = Math.Min(total / requestedAmount, pctRequestable);
}
}
if (pctRequestable < 0.01)
{
bConsumeResource = false;
return;
}

float momentFrac = (float)pctRequestable;
foreach (ResourceConsumer rc in dischargeResources)
{
double amount = rc.Rate * resourcePctToRequest * pctRequestable * TimeWarp.fixedDeltaTime;
momentFrac = (float)Math.Min(momentFrac, part.RequestResource(rc.ID, amount) / amount);
}
x_Moment -= x_momentToRemove * momentFrac;
y_Moment -= y_momentToRemove * momentFrac;
z_Moment -= z_momentToRemove * momentFrac;

lastRemovedMoment = new Vector3(x_momentToRemove * momentFrac, y_momentToRemove * momentFrac, z_momentToRemove * momentFrac);
if (dischargeTorque)
part.AddTorque(vessel.ReferenceTransform.rotation * -lastRemovedMoment);
}

private void updateMomentum()
{
Expand Down

0 comments on commit c078c66

Please sign in to comment.