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