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