public QPriority(QGameState node, BuildingGS targetGS, HiddenRequirement hiddenReq) { this.hiddenReq = hiddenReq; this.currentNode = node; this.targetGS = targetGS; this.distanceRuler = LTPHelper.estematedRemainingDistance(node.gameState, targetGS); }
public static RemainingDistance estematedRemainingDistance(BuildingGS currentGS, BuildingGS targetGS) { // How far away are we from the target? RemainingDistance result = new RemainingDistance(); // Compare numerical distance foreach (ResourceType rt in targetGS.getAllResourceTypes()) { int currentStockpile = currentGS.getStockpile(rt); int targetStockpile = targetGS.getStockpile(rt); int stockpileDelta = Mathf.Max(0, targetStockpile - currentStockpile); result.updateStockpileDelta(stockpileDelta); int currentResourcePerTick = currentGS.getChangePerTick(rt); int targetResourcePerTick = targetGS.getChangePerTick(rt); int rptDelta = Mathf.Max(0, targetResourcePerTick - currentResourcePerTick); result.updateCPTDelta(rt, rptDelta); int currentBestResourcePerTick = currentGS.getBestPossibleChangePerTick(rt); int bestPossibleRPTDelta = Mathf.Max(0, targetResourcePerTick - currentBestResourcePerTick); result.updateBestPossibleCPTDelta(bestPossibleRPTDelta); if (currentResourcePerTick <= 0) { result.addInfinity(); } else { float exactWaitTime = stockpileDelta / (float)currentResourcePerTick; int estWaitTime = (int)(exactWaitTime + 0.5f); result.updateWaitTime(estWaitTime); float bestPossibleWaitTime = stockpileDelta / (float)currentBestResourcePerTick; int estBestWaitTime = (int)(bestPossibleWaitTime + 0.5f); result.updateBestPossibleWaitTime(estBestWaitTime); } } return(result); }