This is kind of a big one, as I imagine a lot of people will want to make mods using the Gregorian/Julian calendar (as well as other real world calendars and custom ones for fantasy mods), but the length of weeks, seasons and years are locked as constants in CampaignTime. Simply changing these from constants to variables would be a start, but that wouldn't help with implementing a calendar where the months aren't all of equal length, leap years exist, etc. Ideally, I think there should be a game model with methods for:
- Setting the starting date and time
- Determining the year, season and week of a given CampaignTime object
- Calculating how many years/seasons/weeks have elapsed between two CampaignTime objects
- Providing a string representation of a CampaignTime object (and if there could be an optional format parameter that would be awesome)