From cf74195121a2cfc4537cb64c965fa1945c57ffae Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 3 Jun 2010 02:37:25 +0200 Subject: Initial commit --- DDate.vala | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 DDate.vala (limited to 'DDate.vala') diff --git a/DDate.vala b/DDate.vala new file mode 100644 index 0000000..54c1064 --- /dev/null +++ b/DDate.vala @@ -0,0 +1,98 @@ +using GLib; + +public enum DDateMonth { + CHAOS = 0, DISCORD = 1, CONFUSION = 2, BUREAUCRACY = 3, THE_AFTERMATH = 4, ST_TIBS_DAY; + + public string to_short_string() { + switch(this) { + case CHAOS: + return "Chs"; + case DISCORD: + return "Dsc"; + case CONFUSION: + return "Cfn"; + case BUREAUCRACY: + return "Bcy"; + case THE_AFTERMATH: + return "Afm"; + default: + return "St. Tib's Day"; + } + } +} + +public enum DDateWeekday { + SWEETMORN = 0, BOOMTIME = 1, PUNGENDAY = 2, PRICKLE_PRICKLE = 3, SETTING_ORANGE = 4, ST_TIBS_DAY; + + public string to_short_string() { + switch(this) { + case SWEETMORN: + return "SM"; + case BOOMTIME: + return "BT"; + case PUNGENDAY: + return "PD"; + case PRICKLE_PRICKLE: + return "PP"; + case SETTING_ORANGE: + return "SO"; + default: + return "St. Tib's Day"; + } + } +} + +public struct DDate { + private GLib.Date date; + + private uint get_day_of_year() { + if (date.get_year().is_leap_year() && date.get_day_of_year() > 60) + return date.get_day_of_year()-1; + else + return date.get_day_of_year(); + } + + public DDate(GLib.Date date0) { + date = date0; + } + + public DDate.with_time_t(time_t time) { + date = Date(); + date.set_time_t(time); + } + + public bool is_st_tibs_day() { + return (date.get_month() == GLib.DateMonth.FEBRUARY && date.get_day() == 29); + } + + public uchar get_day() { + return (uchar)(get_day_of_year() % 73); + } + + public DDateMonth get_month() { + if(is_st_tibs_day()) + return DDateMonth.ST_TIBS_DAY; + + return (DDateMonth)(get_day_of_year()/73); + } + + public DDateWeekday get_weekday() { + if(is_st_tibs_day()) + return DDateWeekday.ST_TIBS_DAY; + + return (DDateWeekday)((get_day_of_year()-1)%5); + } + + public string to_string() { + string ret = ""; + + if(is_st_tibs_day()) { + ret = "St. Tib's Day"; + } + else { + ret = get_weekday().to_short_string() + ", " + get_day().to_string() + ". " + get_month().to_short_string(); + } + + return ret; + } +} -- cgit v1.2.3