Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 6b6c47b2a53fef4df01bbfe84212f714a66bbc26 (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*
   core/slot.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_CORE_SLOT_H__
#define __INCLUDED_CORE_SLOT_H__

#include "math/vector3f.h"
#include "math/axis.h"

#include "core/item.h"

#include <string>

namespace core
{
	
/**
 * @brief A mount point for a weapon or a piece of equipment
 * */
class Slot {
public:
	enum Flags {Active = 1};
	
	/**
	 * @brief default constructor
	 * Creates an empty slot
	 * */
	Slot();
	
	/**
	 * @brief creates and empty slot at a given location
	 * */
	Slot(const math::Vector3f & location);
	
	/**
	 * @brief default destructor
	 * */
	~Slot();
	
	/**
	 * @brief location of the slot within the parent model
	 * */
	inline const math::Vector3f & location() const
	{
		return slot_location;
	}

	/**
	 * @brief axis indication the slot's orientation
	 * */
	inline const math::Axis & axis() const
	{
		return slot_axis;
	}
	
	/**
	 * @brief the name of the particlesystem used to render
	 * projectiles generated by this slot
	 * */

	/**
	 * */
	inline unsigned long last_fired() const
	{
		return slot_last_fired;
	}
	
	inline unsigned long interval() const
	{
		return slot_interval;
	}
	
	inline unsigned long lifespan() const 
	{
		return slot_lifespan;
	}
	
	inline  float speed() const
	{
		return slot_speed;
	}
		
	/* --- mutators -------------------------------------------- */

	/**
	 * @brief set the slot's location
	 * */
	inline void set_location(const math::Vector3f &location)
	{
		slot_location.assign(location);
	}
	
	/**
	 * @brief set the slot's orientation
	 */
	inline void set_axis(const math::Axis & axis)
	{
		slot_axis.assign(axis);
	}
	
	/**
	 * @brief set the slot's timestamp
	 * The timestamp indicates when the slot's configuration was last changed.
	 * */
	inline void set_timestamp(unsigned long timestamp)
	{
		slot_timestamp = timestamp;
	}

	/**
	 * @brief
	 * */
	inline void set_last_fired(unsigned long last_fired)
	{
		slot_last_fired = last_fired;
	}
	
	inline void set_interval(unsigned long interval)
	{
		slot_interval = interval;
	}
	
	inline void set_lifespan(unsigned long lifespan)
	{
		slot_lifespan = lifespan;
	}
	
	inline void set_speed(float speed)
	{
		slot_speed = speed;
	}
	
	/**
	 * @brief set the item this slot is holding
	 * */
	void set_item(Item *item);
	
private:
	math::Vector3f	slot_location;
	
	math::Axis	slot_axis;

	// slot flags
	unsigned int	slot_flags;
	
	unsigned long	slot_timestamp;
	
	unsigned long	slot_last_fired;
	
	// interval between two shots, in milliseconds
	unsigned long	slot_interval;
	
	// projectile lifespane
	unsigned long	slot_lifespan;
	
	// projectile speed, in gameunits / second
	float 		slot_speed;
	
	// item mounted in this slot
	Item		*slot_item;
	
	std::string	slot_particlesystem_name;
};

} // namespace core

#endif // __INCLUDED_CORE_SLOTS_H__