示例#1
0
 public QPriority(QGameState node, BuildingGS targetGS, HiddenRequirement hiddenReq)
 {
     this.hiddenReq     = hiddenReq;
     this.currentNode   = node;
     this.targetGS      = targetGS;
     this.distanceRuler = LTPHelper.estematedRemainingDistance(node.gameState, targetGS);
 }
示例#2
0
    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);
    }