Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 9bdf4f54c14e1e1da905a239e9dba40dee0b47ff (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
/*
   base/shipmodel.h
   This file is part of the Osirion project and is distributed under 
   the terms and conditions of the GNU General Public License version 2 
*/

#ifndef __INCLUDED_BASE_SHIPMODEL_H__
#define __INCLUDED_BASE_SHIPMODEL_H__

#include <map>
#include <string>

#include "core/info.h"

namespace game {

/// ship model specifications
class ShipModel
{
public:
	ShipModel();
	~ShipModel();

	void print();

	/// acceleration
	inline const float acceleration() const { return shipmodel_acceleration; }

	/// maximum speed
	inline const float maxspeed() const { return shipmodel_maxspeed; }
	
	/// turn speed in rotations per second
	inline const float turnspeed() const { return shipmodel_turnspeed; }

	/// label of the ship model
	inline const std::string &label() const { return shipmodel_label; }

	/// name of the ship model
	inline const std::string & name() const { return shipmodel_name; }

	/// name of the model of the ship
	inline const std::string & modelname() const { return shipmodel_modelname; }

	/// price of the ship
	inline const long price() const { return shipmodel_price; }

	/// size of the cargo hold
	inline const float maxcargo() const { return shipmodel_maxcargo; }

	/// set acceleration
	inline void set_acceleration(const float acceleration) { shipmodel_acceleration = acceleration; }

	/// set maximum speed
	inline void set_maxspeed(const float maxspeed) { shipmodel_maxspeed = maxspeed; }

	/// set turn speed
	inline void set_turnspeed(const float turnspeed) { shipmodel_turnspeed = turnspeed; }

	/// set price
	inline void set_price(const long price) { shipmodel_price = price; }

	/// set size of the cargo hold
	inline void set_maxcargo(const float maxcargo) { shipmodel_maxcargo = maxcargo; }

	/// generate an info object for this shipmodel
	void generate_info(core::Info *info);

	/// indicates of this model can be equiped with a jump drive
	bool			shipmodel_jumpdrive;

	std::string 		shipmodel_label;
	std::string 		shipmodel_name;
	std::string 		shipmodel_modelname;

	/// info text
	core::Info::Text	shipmodel_infotext;

	/* ---- static registry ------------------------------------ */

	typedef std::map<std::string, ShipModel *>::iterator iterator;

	/// find an exact match
	static ShipModel *find(ShipModel *shipmodel);

	/// find an exact match
	static ShipModel *find(const std::string label);

	/// search the registry
	static ShipModel *search(const std::string label);

	/// the ship model registry
	static std::map<std::string, ShipModel *>	registry;

	/// clear the ship model registry
	static void clear();

	/// list the ship model registry
	static void list();

	/// add a new ship model
	static void add(ShipModel *shipmodel);

private:

	float 			shipmodel_acceleration;
	float 			shipmodel_maxspeed;
	float 			shipmodel_turnspeed;
	float			shipmodel_maxcargo;

	long			shipmodel_price;
	
};

}

#endif // __INCLUDED_BASE_SHIPMODEL_H__