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