DefaultHolidayShouldCelebrate.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Content.Server.Holiday.Interfaces;
  2. namespace Content.Server.Holiday.ShouldCelebrate
  3. {
  4. [Virtual, DataDefinition]
  5. public partial class DefaultHolidayShouldCelebrate : IHolidayShouldCelebrate
  6. {
  7. public virtual bool ShouldCelebrate(DateTime date, HolidayPrototype holiday)
  8. {
  9. if (holiday.EndDay == 0)
  10. holiday.EndDay = holiday.BeginDay;
  11. if (holiday.EndMonth == Month.Invalid)
  12. holiday.EndMonth = holiday.BeginMonth;
  13. // Holiday spans multiple months in one year.
  14. if(holiday.EndMonth > holiday.BeginMonth)
  15. {
  16. // In final month.
  17. if (date.Month == (int) holiday.EndMonth && date.Day <= holiday.EndDay)
  18. return true;
  19. // In first month.
  20. if (date.Month == (int) holiday.BeginMonth && date.Day >= holiday.BeginDay)
  21. return true;
  22. // Holiday spans more than 2 months, and we're in the middle.
  23. if (date.Month > (int) holiday.BeginMonth && date.Month < (int) holiday.EndMonth)
  24. return true;
  25. }
  26. // Holiday starts and stops in the same month.
  27. else if (holiday.EndMonth == holiday.BeginMonth)
  28. {
  29. if (date.Month == (int) holiday.BeginMonth && date.Day >= holiday.BeginDay && date.Day <= holiday.EndDay)
  30. return true;
  31. }
  32. // Holiday starts in one year and ends in the next.
  33. else
  34. {
  35. // Holiday ends next year.
  36. if (date.Month >= (int) holiday.BeginMonth && date.Day >= holiday.BeginDay)
  37. return true;
  38. // Holiday started last year.
  39. if (date.Month <= (int) holiday.EndMonth && date.Day <= holiday.EndDay)
  40. return true;
  41. }
  42. return false;
  43. }
  44. }
  45. }