コード例 #1
0
        private RandomEvent Generate(Settlement.Settlement settlement)
        {
            var today  = settlement.TodaysDate.DaysSinceSettlement;
            var rarity =
                RandomUtil.WeightedPercentGet(EventRarity.Rarities, null, eventRarity => eventRarity.PercentChance);
            var ev = !(rarity == null) ? RandomUtil.Get(RandomEventArrays[rarity].Where(ev => ev.IsAvailable(settlement)).ToList()) : null;

            //Add Today's Event to Calendar if not null
            EventCalendar.Add(today, ev != null ? new List <Event> {
                ev
            } : new List <Event>());
            return(ev);
        }
コード例 #2
0
ファイル: EventExecutor.cs プロジェクト: jono-m/GameJams
    public void ExecuteOption(Event eventInfo, Event.Option option, float?paymentOverride = null, bool notify = true)
    {
        if (option.payment != null || paymentOverride.HasValue)
        {
            float amount   = paymentOverride.HasValue ? Mathf.Abs(paymentOverride.Value) : option.payment.GetAmount(moneyTracker);
            bool  isCharge = paymentOverride.HasValue ? (paymentOverride.Value < 0) : option.payment.isCharge;
            if (isCharge)
            {
                moneyTracker.SpendMoney(amount);
                if (notify)
                {
                    OnEventExecuted.Invoke(eventInfo, -amount, timeTracker.currentTime);
                }
            }
            else
            {
                moneyTracker.GainMoney(amount);
                if (notify)
                {
                    OnEventExecuted.Invoke(eventInfo, amount, timeTracker.currentTime);
                }
            }
        }

        foreach (Event.CalendarOutcome calendarOutcome in option.eventsToAddToCalendar)
        {
            calendar.Add(calendarOutcome);
        }

        foreach (Event.PoolOutcome poolOutcome in option.eventsToAddToPool)
        {
            pool.Add(poolOutcome);
        }

        foreach (Event eventType in option.eventTypesToRemoveFromCalendar)
        {
            calendar.RemoveType(eventType);
        }

        foreach (Event eventType in option.eventTypesToRemoveFromPool)
        {
            pool.RemoveType(eventType);
        }
    }