public int CompareTo(Mission missionB) { Mission missionA = this; int timeA = missionA.missionEndTime; int timeB = missionB.missionEndTime; if (missionA.factory.nearestEnemy != null) { timeA += missionA.factory.nearestEnemyDistance; } if (missionB.factory.nearestEnemy != null) { timeB += missionB.factory.nearestEnemyDistance; } int endTime = Math.Max(timeA, timeB); MissionReward rewardA = MissionReward.CalculateReward(missionA, endTime); MissionReward rewardB = MissionReward.CalculateReward(missionB, endTime); //Console.Error.WriteLine(missionA.factory.id + "-" + missionB.factory.id + ": " + // rewardA.combinedReward + "-" + rewardB.combinedReward); foreach (var mission in missionA.prereqs) { if (missionB == mission) { return(rewardA.combinedReward.CompareTo( rewardA.combinedReward + rewardB.combinedReward)); } } foreach (var mission in missionB.prereqs) { if (missionA == mission) { return((rewardA.combinedReward + rewardB.combinedReward).CompareTo(rewardB)); } } return(rewardA.combinedReward.CompareTo(rewardB.combinedReward)); }
public static int CompareTo(Mission missionA, Mission missionB) { int timeA = missionA.missionEndTime; int timeB = missionB.missionEndTime; if (missionA.factory.nearestEnemy != null) { timeA += missionA.factory.nearestEnemyDistance; } if (missionB.factory.nearestEnemy != null) { timeB += missionB.factory.nearestEnemyDistance; } int endTime = Math.Max(timeA, timeB); MissionReward rewardA = MissionReward.CalculateReward(missionA, endTime); MissionReward rewardB = MissionReward.CalculateReward(missionB, endTime); return(rewardA.combinedReward - rewardB.combinedReward); // }