roh/conf.old/area/
roh/config/code/python/
roh/config/game/area/
roh/config/game/signs/
roh/help/dmhelp/
roh/help/help/
roh/log/
roh/log/staff/
roh/monsters/ocean/
roh/objects/misc/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.47e/
/*
 * calendar.h
 *	 Header file for calendar
 *   ____            _
 *  |  _ \ ___  __ _| |_ __ ___  ___ 
 *  | |_) / _ \/ _` | | '_ ` _ \/ __|
 *  |  _ <  __/ (_| | | | | | | \__ \
 *  |_| \_\___|\__,_|_|_| |_| |_|___/
 *
 * Permission to use, modify and distribute is granted via the
 *  Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License
 *    http://creativecommons.org/licenses/by-nc-sa/3.0/
 *  
 * 	Copyright (C) 2007-2012 Jason Mitchell, Randi Mitchell
 * 	   Contributions by Tim Callahan, Jonathan Hseu
 *  Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman
 *
 */
#ifndef CALENDAR_H_
#define CALENDAR_H_

// __..--..__..--..__..--..__..--..__..--..__..--..__..--..__..--..
//
//			cWeather
//
// --..__..--..__..--..__..--..__..--..__..--..__..--..__..--..__..

class cWeather {
protected:
	bstring sunrise;
	bstring sunset;
	bstring earthTrembles;
	bstring heavyFog;
	bstring beautifulDay;
	bstring brightSun;
	bstring glaringSun;
	bstring heat;
	bstring still;
	bstring lightBreeze;
	bstring strongWind;
	bstring windGusts;
	bstring galeForce;
	bstring clearSkies;
	bstring lightClouds;
	bstring thunderheads;
	bstring lightRain;
	bstring heavyRain;
	bstring sheetsRain;
	bstring torrentRain;
	bstring noMoon;
	bstring sliverMoon;
	bstring halfMoon;
	bstring waxingMoon;
	bstring fullMoon;

public:	
	cWeather();
	void load(xmlNodePtr curNode);
	void save(xmlNodePtr curNode) const;
	bstring get(WeatherString w) const;
};

// __..--..__..--..__..--..__..--..__..--..__..--..__..--..__..--..
//
//			cDay
//
// --..__..--..__..--..__..--..__..--..__..--..__..--..__..--..__..

class cDay {
protected:
	short		month;
	short		day;
	int			year;

public:
	cDay();

	void load(xmlNodePtr curNode);
	void save(xmlNodePtr curNode) const;

	short getMonth() const;
	short getDay() const;
	int getYear() const;

	void setMonth(short m);
	void setDay(short d);
	void setYear(int y);
};

// __..--..__..--..__..--..__..--..__..--..__..--..__..--..__..--..
//
//			cSeason
//
// --..__..--..__..--..__..--..__..--..__..--..__..--..__..--..__..

class cSeason {
protected:
	Season		id;
	bstring		name;
	short		month;
	short		day;

	cWeather	weather;

public:
	cSeason();

	void load(xmlNodePtr curNode);
	void save(xmlNodePtr curNode) const;

	Season getId() const;
	bstring getName() const;
	short getMonth() const;
	short getDay() const;

	cWeather *getWeather();
};

// __..--..__..--..__..--..__..--..__..--..__..--..__..--..__..--..
//
//			cMonth
//
// --..__..--..__..--..__..--..__..--..__..--..__..--..__..--..__..

class cMonth {
protected:
	short		id;
	bstring		name;
	short		days;

public:
	cMonth();

	void load(xmlNodePtr curNode);
	void save(xmlNodePtr curNode) const;

	short getId() const;
	bstring getName() const;
	short getDays() const;
};

// __..--..__..--..__..--..__..--..__..--..__..--..__..--..__..--..
//
//			Calendar
//
// --..__..--..__..--..__..--..__..--..__..--..__..--..__..--..__..

class Calendar {
protected:
	int		totalDays;
	int		curYear;
	short	curMonth;
	short	curDay;
	short	adjHour;
	bstring lastPirate;

	cSeason	*curSeason;
	std::list<cSeason*> seasons;
	std::list<cMonth*> months;
	void	advanceMonth();

public:
	Calendar();
	int		shipUpdates;

	void clear();
	Season	whatSeason() const;
	cMonth* getMonth(short id) const;
	void	setSeason();
	void	advance();
	void	printtime(const Player* player) const;
	bool	isBirthday(const Player* target) const;
	bstring getLastPirate() const;
	void	setLastPirate(bstring name);
	void	resetToMidnight();

	void	load();
	void	save() const;
	void	loadMonths(xmlNodePtr curNode);
	void	loadSeasons(xmlNodePtr curNode);
	void	loadCurrent(xmlNodePtr curNode);

	int		getTotalDays() const;
	int		getCurYear() const;
	short	getCurMonth() const;
	short	getCurDay() const;
	short	getAdjHour() const;

	cSeason	*getCurSeason() const;
};


#endif /*CALENDAR_H_*/