server/src/kernel/calendar.c

60 lines
1.2 KiB
C
Raw Normal View History

2010-08-08 10:06:34 +02:00
#include <platform.h>
#include "calendar.h"
#include <assert.h>
#include <stdlib.h>
2010-08-08 10:06:34 +02:00
int first_turn = 0;
int first_month = 0;
int weeks_per_month = 0;
int months_per_year = 0;
char **seasonnames = NULL;
char **weeknames = NULL;
char **weeknames2 = NULL;
char **monthnames = NULL;
2011-03-07 08:02:35 +01:00
int *month_season = NULL;
2010-08-08 10:06:34 +02:00
char *agename = NULL;
2011-03-07 08:02:35 +01:00
int seasons = 0;
const gamedate *get_gamedate(int turn, gamedate * gd)
2010-08-08 10:06:34 +02:00
{
int weeks_per_year = months_per_year * weeks_per_month;
int t = turn - first_turn;
assert(gd);
2011-03-07 08:02:35 +01:00
if (t < 0)
t = turn;
2010-08-08 10:06:34 +02:00
2011-03-07 08:02:35 +01:00
gd->week = t % weeks_per_month; /* 0 - weeks_per_month-1 */
gd->month = (t / weeks_per_month + first_month) % months_per_year; /* 0 - months_per_year-1 */
gd->year = t / (weeks_per_year) + 1;
2010-08-08 10:06:34 +02:00
gd->season = month_season[gd->month];
return gd;
}
2011-03-07 08:02:35 +01:00
void calendar_cleanup(void)
2010-08-08 10:06:34 +02:00
{
int i;
free(agename);
2011-03-07 08:02:35 +01:00
for (i = 0; i != seasons; ++i) {
2010-08-08 10:06:34 +02:00
free(seasonnames[i]);
}
free(seasonnames);
2011-03-07 08:02:35 +01:00
for (i = 0; i != months_per_year; ++i) {
2010-08-08 10:06:34 +02:00
free(monthnames[i]);
}
free(storms);
free(month_season);
free(monthnames);
2011-03-07 08:02:35 +01:00
for (i = 0; i != weeks_per_month; ++i) {
2010-08-08 10:06:34 +02:00
free(weeknames[i]);
free(weeknames2[i]);
}
free(weeknames);
free(weeknames2);
}