// 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);
    }