// Update is called once per frame void Update() { if (mNumFleetingDemands < maxFleetingDemands) { mFleetingDemandTimer -= GameState.GameDeltaTime; if (mFleetingDemandTimer <= 0) { int tier = Mathf.FloorToInt(GameState.GameTimeElapsed / 120); SacrificeDemand demand = DemandGenerator.ScaledDemand(tier); SacrificeResult satisfied = null; SacrificeResult ignored = null; float negativeChance = 0.8f - GameState.Favour * 0.1f; float specialChance = 0.0f + GameState.Favour * 0.05f; float roll = Random.value; if (roll <= negativeChance) { ignored = BoonLibrary.RandomTemporaryCurse(); } else if (roll - negativeChance <= specialChance) { satisfied = BoonLibrary.RandomBoon(tier, GameState.Favour); } else { satisfied = BoonLibrary.RandomTemporaryBoon(tier, GameState.Favour); } GodDemand d = new GodDemand(demand, satisfied, ignored); d.mTimeLeft = 30; mDemands.Add(d); //mFleetingDemands.Add(new FleetingDemand(d, 30)); mFleetingDemandTimer = Random.Range(fleetingDemandTimer - (fleetingDemandTimer / 2), fleetingDemandTimer + (fleetingDemandTimer / 2)); } } for (int i = mDemands.Count - 1; i >= 0; --i) { GodDemand d = mDemands[i]; if (d.mTimeLeft == -1) { // fleeting demands are tacked on to the end, so once we hit a non-fleeting we're done break; } if (d.mTimeLeft > 0) { d.mTimeLeft -= GameState.GameDeltaTime; if (d.mTimeLeft <= 0) { if (d.mIgnoredResult != null) { d.mIgnoredResult.DoEffect(); } mDemands.RemoveAt(i); } } } }
// Generate a group of demands that will all be removed when any one of them is purchased. private List <GodDemand> GenerateDemandGroup(int groupSize) { List <GodDemand> result = new List <GodDemand>(); // 3 groups at each tier, starting with tier 0. int groupId = mNextDemandGroupId++; int tier = Mathf.FloorToInt(groupId / 3f); SacrificeResultFactory[] boons = BoonLibrary.RandomBoonFactories(groupSize); foreach (SacrificeResultFactory boonFactory in boons) { GodDemand demand = new GodDemand( DemandGenerator.ScaledDemand(tier), boonFactory.Make(tier, GameState.Favour), null ); demand.GroupId = groupId; result.Add(demand); } return(result); }