public SettlementInfo ClosestSettlementOfFaction(Faction faction) { InitListOfSettlements(); var travelTicks = maxTicksToNeighbour; SettlementInfo closestSettlement = null; if (listOfSettlements == null) { return(null); } foreach (var si in listOfSettlements) { if (si.settlement.Faction != faction) { continue; } var travelTicksFromHere = CaravanArrivalTimeEstimator.EstimatedTicksToArrive(si.settlement.Tile, Tile, null); if (travelTicksFromHere >= travelTicks) { continue; } closestSettlement = si; travelTicks = travelTicksFromHere; } return(closestSettlement); }
public void startHelping(Faction faction, RoadConstructionSite site, Pawn negotiator) { // Test success or failure of the negotiator, plus amount of help obtained (based on negotiation value & roll) float negotiationValue = negotiator.GetStatValue(StatDefOf.NegotiationAbility, true); float failChance = helpRequestFailChance / negotiationValue; float roll = Rand.Value; float amountOfHelp = helpBaseAmount * (1 + negotiationValue * roll * 5); //Log.Message(String.Format("[RotR] - Negotiation for road construction help : negotiation value = {0:0.00} , fail chance = {1:P} , roll = {2:0.00} , help = {3:0.00}", negotiationValue , failChance, roll , amountOfHelp)); // Calculate how long the faction needs to start helping SettlementInfo closestSettlement = site.closestSettlementOfFaction(faction); int tick = Find.TickManager.TicksGame + closestSettlement.distance; // Determine amount of help per tick float amountPerTick = Math.Max(Rand.Gaussian(helpPerTickMedian, helpPerTickVariance), helpPerTickMin); setCurrentlyHelping(faction); site.initiateFactionHelp(faction, tick, amountOfHelp, amountPerTick); }
public SettlementInfo closestSettlementOfFaction(Faction faction) { initListOfSettlements(); int travelTicks = maxTicksToNeighbour; SettlementInfo closestSettlement = null; if (listOfSettlements != null) { foreach (SettlementInfo si in listOfSettlements) { if (si.settlement.Faction == faction) { int travelTicksFromHere = CaravanArrivalTimeEstimator.EstimatedTicksToArrive(si.settlement.Tile, Tile, null); if (travelTicksFromHere < travelTicks) { closestSettlement = si; travelTicks = travelTicksFromHere; } } } } return(closestSettlement); }