Beispiel #1
0
        private void TriggerAlarm(DndAlarm alarm, Creature player = null, RoundSpecifier roundSpecifier = RoundSpecifier.None)
        {
            if (roundSpecifier != alarm.RoundSpecifier)
            {
                return;
            }

            if (Time == alarm.TriggerTime && alarm.RoundSpecifier != RoundSpecifier.None)
            {
                if (player != alarm.Creature)
                {
                    return;
                }
            }

            if (alarm.TriggerTime > Time)
            {
                Time = alarm.TriggerTime;                  // Update clock time to match alarm's time.
            }
            try
            {
                alarm.FireAlarm(this);
            }
            catch (Exception ex)
            {
                // TODO: Fire an OnException event handler....
            }
            alarmsToRemove.Add(alarm);
        }
Beispiel #2
0
        void TriggerAlarms(DateTime futureTime, int currentTurnIndex, Character player = null, RoundSpecifier roundSpecifier = RoundSpecifier.None)
        {
            triggeringAlarms = true;
            try
            {
                for (int i = 0; i < alarms.Count; i++)
                {
                    DndAlarm alarm = alarms[i];
                    if (alarm.TriggerTime > futureTime)
                    {
                        break;
                    }

                    if (futureTime - alarm.TriggerTime < TimeSpan.FromSeconds(6))
                    {
                        if (alarm.TurnIndex >= 0 && alarm.TurnIndex > currentTurnIndex)
                        {
                            break;
                        }
                    }

                    TriggerAlarm(alarm, player, roundSpecifier);
                }

                for (int i = 0; i < dailyAlarms.Count; i++)
                {
                    DndDailyAlarm dailyAlarm  = dailyAlarms[i];
                    int           daysFromNow = (futureTime - dailyAlarm.TriggerTime).Days;
                    if (daysFromNow != 0)
                    {
                        dailyAlarm.TriggerTime = dailyAlarm.TriggerTime.AddDays(daysFromNow);
                    }
                    if (dailyAlarm.TriggerTime > futureTime || dailyAlarm.DayOfYearLastTriggered == dailyAlarm.TriggerTime.DayOfYear)
                    {
                        break;
                    }
                    dailyAlarm.DayOfYearLastTriggered = dailyAlarm.TriggerTime.DayOfYear;
                    TriggerAlarm(dailyAlarm);
                }
            }
            finally
            {
                triggeringAlarms = false;
            }

            RemoveExpiredAlarms();
        }