protected bool actuallyGenerate() { //ImpactMonitor.Log("Trying to generate an impact contract"); IEnumerable <CelestialBody> bodies = Contract.GetBodies_Reached(false, false); bodies = bodies.Where(body => !body.atmosphere); //generate a weighted list of possible contracts (different bodsies and biomes where appropriate) List <PossibleContract> contracts = pickContracts(bodies); if (contracts.Count == 0) { return(false); } double totalProb = contracts.Last().probability; double picked = random.NextDouble() * totalProb; IComparer <PossibleContract> comp = new PossibleContract.ProbComparer(); int contractIndex = contracts.BinarySearch(new PossibleContract(picked, null, 0), comp); if (contractIndex < 0) { contractIndex = ~contractIndex; } //ImpactMonitor.Log("pickedindex=" + contractIndex); pickedContract = contracts[contractIndex]; // ImpactMonitor.Log("picked one "+pickedContract); SetExpiry(); SetScience(1.5f, pickedContract.body); SetDeadlineYears(0.5f, pickedContract.body); SetReputation(3, 4, pickedContract.body); SetFunds(20000, 80000, 10000, pickedContract.body); generateParameters(); //ImpactMonitor.Log("Generated parameters"); return(true); }
protected override void OnLoad(ConfigNode node) { base.OnLoad(node); pickedContract = new PossibleContract(node.GetNode(valuesNode)); }