Skip to content

Commit

Permalink
Remove unused tech node logic from UnlockCreditHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
siimav committed Jul 28, 2024
1 parent 22790d8 commit 5d779f3
Show file tree
Hide file tree
Showing 11 changed files with 28 additions and 37 deletions.
3 changes: 2 additions & 1 deletion Source/RP0/Harmony/PartListTooltip.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,15 @@ private static void PatchButtons(PartListTooltip __instance, AvailablePart avail
techID = availablePart.TechRequired;
eCost = availablePart.entryCost;
}

if (SpaceCenterManagement.Instance.TechListHas(techID))
{
__instance.buttonPurchaseContainer.SetActive(false);
__instance.costPanel.SetActive(true);
}
else if (__instance.buttonPurchase.gameObject.activeSelf || __instance.buttonPurchaseRed.gameObject.activeSelf)
{
var cmq = UnlockCreditHandler.Instance.GetCMQ(eCost, techID, TransactionReasonsRP0.PartOrUpgradeUnlock);
var cmq = UnlockCreditHandler.Instance.GetCMQ(eCost, TransactionReasonsRP0.PartOrUpgradeUnlock);
// If we still can't afford, bail without setting tooltip
if (!cmq.CanAfford())
return;
Expand Down
2 changes: 1 addition & 1 deletion Source/RP0/Harmony/RDController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal static void Postfix_ShowNodePanel(RDController __instance, RDNode node)
if (showCredit)
{
extraText += Localizer.Format("#rp0_UnlockCredit_NodeInfo",
UnlockCreditHandler.Instance.GetCreditAmount(node.tech.techID).ToString("N0")) + "\n";
UnlockCreditHandler.Instance.TotalCredit.ToString("N0")) + "\n";
}
else
{
Expand Down
4 changes: 2 additions & 2 deletions Source/RP0/Harmony/RDPartList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ private static bool Prefix_AddPartListItem(RDPartList __instance, AvailablePart
if (!cmq.CanAfford())
{
// try again, with credit
cmq.AddPostDelta(CurrencyRP0.Funds, System.Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, false), UnlockCreditHandler.Instance.GetCreditAmount(part.TechRequired)), true);
cmq.AddPostDelta(CurrencyRP0.Funds, System.Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, false), UnlockCreditHandler.Instance.TotalCredit), true);
if (!cmq.CanAfford())
{
// still can't afford, so use the can't afford color
Expand Down Expand Up @@ -75,7 +75,7 @@ private static bool Prefix_AddUpgradeListItem(RDPartList __instance, PartUpgrade
// BUT if we can't afford normally, but can with credit let's fix the coloring.
if (!cmq.CanAfford())
{
cmq.AddPostDelta(CurrencyRP0.Funds, System.Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, false), UnlockCreditHandler.Instance.GetCreditAmount(upgrade.techRequired)), true);
cmq.AddPostDelta(CurrencyRP0.Funds, System.Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, false), UnlockCreditHandler.Instance.TotalCredit), true);
if (!cmq.CanAfford())
{
text = cmq.GetCostLineOverride(true, false, true, true, false);
Expand Down
4 changes: 2 additions & 2 deletions Source/RP0/Harmony/RealFuels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,15 @@ internal static bool PatchedPurchaseConfig(RealFuels.EntryCostManager __instance
var cmq = CurrencyModifierQueryRP0.RunQuery(TransactionReasonsRP0.PartOrUpgradeUnlock, -cfgCost, 0d, 0d);
double postCMQcost = -cmq.GetTotal(CurrencyRP0.Funds, false);
double invertCMQop = cfgCost / postCMQcost;
double credit = UnlockCreditHandler.Instance.GetCreditAmount(techNode);
double credit = UnlockCreditHandler.Instance.TotalCredit;
// we don't bother with Min() because we're never touching this cmq again.
cmq.AddPostDelta(CurrencyRP0.Funds, credit, true);
if (!cmq.CanAfford())
{
return false;
}

double excessCost = UnlockCreditHandler.Instance.SpendCredit(techNode, postCMQcost);
double excessCost = UnlockCreditHandler.Instance.SpendCredit(postCMQcost);
if (excessCost > 0d)
{
Funding.Instance.AddFunds(-excessCost * invertCMQop, TransactionReasonsRP0.PartOrUpgradeUnlock.Stock());
Expand Down
2 changes: 1 addition & 1 deletion Source/RP0/ScenarioModules/FirstStart.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ private void Start()

ScienceUtils.MarkExperimentsAsDone(Database.StartCompletedExperiments);
CopyCraftFiles();
UnlockCreditHandler.Instance.IncrementCredit("start", HighLogic.CurrentGame.Parameters.CustomParams<RP0Settings>().StartingUnlockCredit);
UnlockCreditHandler.Instance.IncrementCredit(HighLogic.CurrentGame.Parameters.CustomParams<RP0Settings>().StartingUnlockCredit);

HighLogic.CurrentGame.CrewRoster.Update(Planetarium.GetUniversalTime());
}
Expand Down
28 changes: 10 additions & 18 deletions Source/RP0/ScenarioModules/UnlockCreditHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,17 @@ public double CreditForTime(double UT)
return sum * mult;
}

public double GetCreditAmount(string tech) => _totalCredit;
public double GetCreditAmount(List<AvailablePart> partList) => _totalCredit;

/// <summary>
/// Note this is CMQ-neutral.
/// </summary>
/// <param name="tech"></param>
/// <param name="UT"></param>
public void IncrementCreditTime(string tech, double UT) => IncrementCredit(tech, CreditForTime(UT));
public void IncrementCreditTime(double UT) => IncrementCredit(CreditForTime(UT));

/// <summary>
/// Note this is CMQ-neutral.
/// </summary>
/// <param name="tech"></param>
/// <param name="amount"></param>
public void IncrementCredit(string tech, double amount)
public void IncrementCredit(double amount)
{
// Will also catch NaN
if (!(amount > 0))
Expand Down Expand Up @@ -128,8 +123,6 @@ public void SpendCreditAndCost(List<AvailablePart> parts)
Funding.Instance.AddFunds(-excess * recipCMQMult, TransactionReasonsRP0.PartOrUpgradeUnlock.Stock());
}

public double SpendCredit(string tech, double cost) => SpendCredit(cost);

public double SpendCredit(double cost)
{
if (_totalCredit == 0d)
Expand All @@ -153,26 +146,26 @@ public double SpendCredit(double cost)
return excessCost;
}

public CurrencyModifierQueryRP0 GetCMQ(double cost, string tech, TransactionReasonsRP0 reason)
public CurrencyModifierQueryRP0 GetCMQ(double cost, TransactionReasonsRP0 reason)
{
var cmq = CurrencyModifierQueryRP0.RunQuery(reason, -cost, 0d, 0d);
cmq.AddPostDelta(CurrencyRP0.Funds, Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, true), GetCreditAmount(tech)), true);
cmq.AddPostDelta(CurrencyRP0.Funds, Math.Min(-cmq.GetTotal(CurrencyRP0.Funds, true), TotalCredit), true);
return cmq;
}

public CurrencyModifierQueryRP0 GetPrePostCostAndAffordability(double cost, string tech, TransactionReasonsRP0 reason, out double preCreditCost, out double postCreditCost, out double credit, out bool canAfford)
public CurrencyModifierQueryRP0 GetPrePostCostAndAffordability(double cost, TransactionReasonsRP0 reason, out double preCreditCost, out double postCreditCost, out double credit, out bool canAfford)
{
var cmq = CurrencyModifierQueryRP0.RunQuery(reason, -cost, 0d, 0d);
preCreditCost = -cmq.GetTotal(CurrencyRP0.Funds, false);
credit = Math.Min(preCreditCost, GetCreditAmount(tech));
credit = Math.Min(preCreditCost, TotalCredit);
cmq.AddPostDelta(CurrencyRP0.Funds, credit, true);
postCreditCost = -cmq.GetTotal(CurrencyRP0.Funds, true);
canAfford = cmq.CanAfford();

return cmq;
}

public void ProcessCredit(double cost, string tech, TransactionReasonsRP0 reason)
public void ProcessCredit(double cost, TransactionReasonsRP0 reason)
{
var cmq = CurrencyModifierQueryRP0.RunQuery(reason, -cost, 0d, 0d);
double postCMQCost = -cmq.GetTotal(CurrencyRP0.Funds, true);
Expand All @@ -185,9 +178,8 @@ public void ProcessCredit(double cost, string tech, TransactionReasonsRP0 reason
/// and returns remaining (unsubsidized) cost
/// </summary>
/// <param name="entryCost"></param>
/// <param name="tech"></param>
/// <returns></returns>
private float ProcessCredit(float entryCost, string tech)
private float ProcessCredit(float entryCost)
{
if (entryCost == 0f)
return 0f;
Expand Down Expand Up @@ -220,7 +212,7 @@ private void OnPartPurchased(AvailablePart ap)
UnlockCreditUtility.StoredPartEntryCost = ap.entryCost;
if (ap.costsFunds)
{
int remainingCost = (int)ProcessCredit(ap.entryCost, ap.TechRequired);
int remainingCost = (int)ProcessCredit(ap.entryCost);
ap.SetEntryCost(remainingCost);
if(HighLogic.LoadedSceneIsEditor)
SpaceCenterManagement.Instance.IsEditorRecalcuationRequired = true;
Expand All @@ -230,7 +222,7 @@ private void OnPartPurchased(AvailablePart ap)
private void OnPartUpgradePurchased(PartUpgradeHandler.Upgrade up)
{
UnlockCreditUtility.StoredUpgradeEntryCost = up.entryCost;
float remainingCost = ProcessCredit(up.entryCost, up.techRequired);
float remainingCost = ProcessCredit(up.entryCost);
up.entryCost = remainingCost;
if (HighLogic.LoadedSceneIsEditor)
SpaceCenterManagement.Instance.IsEditorRecalcuationRequired = true;
Expand Down
4 changes: 2 additions & 2 deletions Source/RP0/SpaceCenter/Projects/ResearchProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -288,11 +288,11 @@ public double IncrementProgress(double UTDiff)
SpaceCenterManagement.Instance.RecalculateBuildRates(); // this might change other rates

double portion = toGo / increment;
UnlockCreditHandler.Instance.IncrementCreditTime(techID, portion * UTDiff);
UnlockCreditHandler.Instance.IncrementCreditTime(portion * UTDiff);
return (1d - portion) * UTDiff;
}

UnlockCreditHandler.Instance.IncrementCreditTime(techID, UTDiff);
UnlockCreditHandler.Instance.IncrementCreditTime(UTDiff);
return 0d;
}

Expand Down
6 changes: 2 additions & 4 deletions Source/RP0/SpaceCenter/VesselBuildValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,9 +186,7 @@ private void ProcessPartAvailability(VesselProject vp)
var cmq = CurrencyModifierQueryRP0.RunQuery(TransactionReasonsRP0.PartOrUpgradeUnlock, -unlockCost, 0d, 0d);
double postCMQUnlockCost = -cmq.GetTotal(CurrencyRP0.Funds, false);

double credit = UnlockCreditHandler.Instance.GetCreditAmount(partList);

double spentCredit = Math.Min(postCMQUnlockCost, credit);
double spentCredit = Math.Min(postCMQUnlockCost, UnlockCreditHandler.Instance.TotalCredit);
cmq.AddPostDelta(CurrencyRP0.Funds, spentCredit, true);

int partCount = partList.Count;
Expand Down Expand Up @@ -455,7 +453,7 @@ private DialogGUIBase[] ConstructPartConfigErrorsUI(Dictionary<Part, List<PartCo
string costStr = cmq.GetCostLineOverride(true, false, false, true);
double trueTotal = -cmq.GetTotal(CurrencyRP0.Funds, false);
double invertCMQOp = error.CostToResolve / trueTotal;
double creditAmtToUse = Math.Min(trueTotal, UnlockCreditHandler.Instance.GetCreditAmount(error.TechToResolve));
double creditAmtToUse = Math.Min(trueTotal, UnlockCreditHandler.Instance.TotalCredit);
cmq.AddPostDelta(CurrencyRP0.Funds, creditAmtToUse, true);
string afterCreditLine = cmq.GetCostLineOverride(true, false, true, true, true);
if (string.IsNullOrEmpty(afterCreditLine))
Expand Down
6 changes: 3 additions & 3 deletions Source/RP0/Tooling/ModuleTooling.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public virtual void ToolingEvent()

bool bypass = HighLogic.CurrentGame.Parameters.Difficulty.BypassEntryPurchaseAfterResearch;
float toolingCost = bypass ? 0f : GetToolingCost();
var cmq = UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, string.Empty, TransactionReasonsRP0.ToolingPurchase, out double preCost, out double postCost, out double credit, out bool canAfford);
var cmq = UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, TransactionReasonsRP0.ToolingPurchase, out double preCost, out double postCost, out double credit, out bool canAfford);
string costline = cmq.GetCostLineOverride(true, false, true, true);
if (string.IsNullOrEmpty(costline))
costline = "nothing";
Expand All @@ -74,7 +74,7 @@ public virtual void ToolingEvent()
{
using (new CareerEventScope(CareerEventType.Tooling))
{
UnlockCreditHandler.Instance.ProcessCredit(toolingCost, string.Empty, TransactionReasonsRP0.ToolingPurchase);
UnlockCreditHandler.Instance.ProcessCredit(toolingCost, TransactionReasonsRP0.ToolingPurchase);
}
PurchaseTooling();
GameEvents.onEditorShipModified.Fire(EditorLogic.fetch.ship);
Expand Down Expand Up @@ -232,7 +232,7 @@ public static float PurchaseToolingBatch(List<ModuleTooling> toolingColl, bool i
{
using (new CareerEventScope(CareerEventType.Tooling))
{
UnlockCreditHandler.Instance.ProcessCredit(totalCost, string.Empty, TransactionReasonsRP0.ToolingPurchase);
UnlockCreditHandler.Instance.ProcessCredit(totalCost, TransactionReasonsRP0.ToolingPurchase);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion Source/RP0/UI/ProceduralAvionicsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ private bool DrawUnlockButton(string curCfgName, ProceduralAvionicsTechNode tech
if (unlockCost <= 0) return switchedConfig;
var cmq = CurrencyModifierQueryRP0.RunQuery(TransactionReasonsRP0.PartOrUpgradeUnlock, -unlockCost, 0d, 0d);
double trueCost = -cmq.GetTotal(CurrencyRP0.Funds, false);
double creditToUse = Math.Min(trueCost, UnlockCreditHandler.Instance.GetCreditAmount(techNode.TechNodeName));
double creditToUse = Math.Min(trueCost, UnlockCreditHandler.Instance.TotalCredit);
cmq.AddPostDelta(CurrencyRP0.Funds, creditToUse, true);
GUI.enabled = techNode.IsAvailable && cmq.CanAfford();
_gc.text = $"Unlock ({BuildCostString(Math.Max(0d, trueCost - creditToUse), trueCost)})";
Expand Down
4 changes: 2 additions & 2 deletions Source/RP0/UI/ToolingGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ private static void RenderToolAllButton()
if (GUILayout.Button("Tool All", HighLogic.Skin.button))
{
GetUntooledPartsAndCost(out List<ModuleTooling> untooledParts, out float toolingCost);
var cmq = UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, string.Empty, TransactionReasonsRP0.ToolingPurchase, out double preCost, out double postCost, out double credit, out bool canAfford);
var cmq = UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, TransactionReasonsRP0.ToolingPurchase, out double preCost, out double postCost, out double credit, out bool canAfford);
string buttonText = canAfford ? "Purchase All Toolings" : "Can't Afford";
string costline = cmq.GetCostLineOverride(true, false, true, true);
if (string.IsNullOrEmpty(costline))
Expand Down Expand Up @@ -169,7 +169,7 @@ private static void ToolAll()
{
GetUntooledPartsAndCost(out List<ModuleTooling> untooledParts, out float toolingCost);

UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, string.Empty, TransactionReasonsRP0.ToolingPurchase, out _, out _, out _, out bool canAfford);
UnlockCreditHandler.Instance.GetPrePostCostAndAffordability(toolingCost, TransactionReasonsRP0.ToolingPurchase, out _, out _, out _, out bool canAfford);
if (canAfford)
{
ModuleTooling.PurchaseToolingBatch(untooledParts);
Expand Down

0 comments on commit 5d779f3

Please sign in to comment.