Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 65e94502676c7537049262f4894614b2816d2a12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
   game/game.cc
   This file is part of the Osirion project and is distributed under
   the terms of the GNU General Public License version 2
*/

// project headers
#include "game/game.h"
#include "game/sector.h"
#include "game/ship.h"
#include "game/star.h"
#include "filesystem/filesystem.h"
#include "sys/sys.h"

// C++ headers
#include <vector>

namespace game
{

bool Game::init()
{
	using math::Vector3f;
	using filesystem::IniFile;

	con_print << "Initializing game..." << std::endl;

	// read game.ini
	IniFile f;
	f.open("ini/game.ini");
	while (f) {
		f.getline();
		if (f.got_key()) {
			if (f.section() == "game") {
				// game::name
				if (f.got_key_string("name", name)); else
					// game::label
						if (f.got_key_string("label", label));	else
						// game::author
								if (f.got_key_string("author", author)); else
							// unknown value
							con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl;
			}
		} else if (f.got_section("game")) {

		} else if (f.got_section()) {
			con_warn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl;
		}
	}
	f.close();

	con_print << name << std::endl;
	con_print << "by " << author << std::endl;

	// read world.ini
	std::string tmp;
	Sector *sector =0;

	f.open("ini/world.ini");
	while (f) {
		f.getline();
		if (f.got_key()) {
			if (f.section() == "world") {
				// world::name
				if (f.got_key_string("name", tmp)); else
					// world:label
						if (f.got_key_string("label", tmp)); else
						// unknown value
						con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl;
			} else if (f.section() == "sector") {
				// sector::name
				if (f.got_key_string("name", tmp)) {
					sector->name = tmp;
				} else
					// sector:label
					if (f.got_key_string("label", tmp)) {
						sector->label = tmp;
					} else
						// unknown value
						con_warn << f.name() << " unknown key '" << f.key() << "' at line " << f.line() << std::endl;
			}
		} else if (f.got_section("world")) {
			//con_debug << "[world] section" << std::endl;
		} else if (f.got_section("sector")) {
			sector = new Sector();
			sectors.push_back(sector);
		} else if (f.got_section()) {
			con_warn << f.name() << " unknown section '" << f.section() << "' at line " << f.line() << std::endl;
		}
	}
	f.close();

	/*
	con_print << "Loading sectors..." << std::endl;
	for (unsigned n =0; n < sectors.size(); n++)
		con_print << "  " << sectors[n]->label << " " << sectors[n]->name << std::endl;
	*/
	star.location = Vector3f(256.0f, 0.0f, 256.0f);
	ship.location = Vector3f(0,0,0);
	
	return true;
}

void Game::shutdown()
{
	con_print << "Shutting down game..." << std::endl;

	// delete every sector object in the sectors vector
	for (unsigned int n =0; n< sectors.size(); n++) {
		delete sectors[n];
		sectors[n] = 0;
	}
	// clear the sectors vector
	sectors.clear();
}

void Game::frame(float seconds)
{
	ship.update(seconds);
}

}; // namespace game