Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 0cfe87ec056dae4074d228fb85646c539122e8d0 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
   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__