Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 07df62dee7c8bc0b12415ce3999262ba1946f418 (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
123
124
125
126
127
128
129
130
/*
   base/game.h
   This file is part of the Osirion project and is distributed under
   the terms of the GNU General Public License version 2
*/

#ifndef __INCLUDED_BASE_H__
#define __INCLUDED_BASE_H__

#include <vector>
#include <string>

#include "base/ship.h"
#include "base/shipmodel.h"
#include "base/star.h"
#include "core/module.h"
#include "core/application.h"
#include "core/gameinterface.h"
#include "filesystem/inifile.h"
#include "sys/sys.h"

/// the base game module
/** the base game module contains the game-specific code for Project::OSiRiON
 */
namespace game
{

// entity type constants
const unsigned int ship_enttype = 256;
const unsigned int star_enttype = 257;
const unsigned int planet_enttype = 258;
const unsigned int navpoint_enttype = 259;
const unsigned int jumppoint_enttype = 260;
const unsigned int jumpgate_enttype = 261;
const unsigned int station_enttype = 262;
const unsigned int cargopod_enttype = 263;

// info class type constants
//const unsigned int shipmodel_class_id = 1;
//const unsigned int commodity_class_id = 2;

/// default player settings
class Default
{
public:
	static core::Zone *zone;
	static core::Entity *view;
	static ShipModel *shipmodel;
	static long credits;

	static void clear();
};

/// the base Project::OSiRiON game model
class Game : public core::Module
{
public:
	Game();
	virtual ~Game();

	/// run one game frame
	void frame(float seconds);

	/// is called when a player connects
	void player_connect(core::Player *player);

	/// is called when a player disconnects
	void player_disconnect(core::Player *player);

	/* --- game variables -------------------------------------- */

	/// game variable: speed of the impulse drive
	static core::Cvar *g_impulsespeed;

	/// game variable: acceleration of the impulse drive
	static core::Cvar *g_impulseacceleration;

	/// game variable: jumppoint range
	static core::Cvar *g_jumppointrange;

	/// game variable: enable or disable development mode (cheat mode)
	static core::Cvar *g_devel;
	
	/// physics variable: default damping factor of space 
	static core::Cvar *g_damping;	
	
	/// game variable: amount of time dynamic objects are kept alive when there are no players
	static core::Cvar *g_keepalive;

private:

	bool load_world();

	bool load_zone(core::Zone *zone);

	bool validate_zone(core::Zone *zone);

	bool generate_entity_menus(core::Entity *entity);

	bool load_commodities();
	
	bool load_ships();

	bool load_defaults();

	/* ---- engine functions ----------------------------------- */

	static void func_join(core::Player *player, std::string const &args);
	static void func_spectate(core::Player *player, std::string const &args);
	static void func_hail(core::Player *player, std::string const &args);
	static void func_jump(core::Player *player, std::string const &args);
	static void func_impulse(core::Player *player, std::string const &args);
	static void func_dock(core::Player *player, core::Entity *entity);
	static void func_launch(core::Player *player, std::string const &args);
	static void func_respawn(core::Player *player, std::string const &args);
	static void func_goto(core::Player *player, const std::string &args);
	static void func_buy(core::Player *player, std::string const &args);
	static void func_sell(core::Player *player, const std::string &args);
	static void func_give(core::Player *player, const std::string &args);
	static void func_eject(core::Player *player, const std::string &args);
	static void func_beam(core::Player *player, const std::string &args);
};

/// factory function
core::Module *factory();

}

#endif // __INCLUDED_BASE_H__