File: GroundObject.h

package info (click to toggle)
astromenace 1.3.2%2Brepack-7.1
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid
  • size: 4,496 kB
  • sloc: cpp: 61,665; makefile: 25; sh: 19
file content (183 lines) | stat: -rwxr-xr-x 6,658 bytes parent folder | download | duplicates (5)
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
172
173
174
175
176
177
178
179
180
181
182
183
/************************************************************************************

	AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
	Copyright © 2006-2013 Michael Kurinnoy, Viewizard


	AstroMenace is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	AstroMenace is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.


	Web Site: http://www.viewizard.com/
	Project: http://sourceforge.net/projects/openastromenace/
	E-mail: viewizard@viewizard.com

*************************************************************************************/


#ifndef GROUNDOBJECT_H
#define GROUNDOBJECT_H


#include "../Object3D.h"
#include "../Weapon/Weapon.h"



//-----------------------------------------------------------------------------
// Класс CGroundObject
//-----------------------------------------------------------------------------
class CGroundObject : public CObject3D
{
public:

	// базовые конструктор и деструктор объекта
	CGroundObject();
	virtual ~CGroundObject();


	// Обновление данных объектa
	virtual bool	Update(float Time);
	// Установка положения объекта
	virtual void	SetLocation(VECTOR3D NewLocation);
	// Установка углов поворота объекта
	virtual void	SetRotation(VECTOR3D NewRotation);


	// колеса, для транспорта

	// скорость вращения колес
	float	WheelTrackSpeed;

	// кол-во колес
	int		WheelQuantity;
	// перечень номеров объектов с колесами
	int		*WheelObjectsNum;

	// колеса поворотные, для установки угла поворота
	// кол-во колес
	int		WheelRotateQuantity;
	// перечень номеров объектов с колесами
	int		*WheelRotateObjectsNum;
	// скорость вращения колес
	float	WheelRotateSpeed;
	// максимальный угол поворота колес для модели
	float	MaxWheelRotateAngle;

	// если нужно, номер объекта с траком для тайловой анимации
	int		TrackObjectNum;
	int		TrackRotationDirection;// направление вращения траков


	// нужно повернуть (пересчитать мэш) при следующем проходе
	// Update + учесть эти данные в Rotation
	VECTOR3D	NeedRotate;
	// скорость поворота по каждому раправлению
	VECTOR3D	RotationSpeed;

	// максимальная скорость units/sec, зависит от двигателя
	float		MaxSpeed;
	// текущая скорость
	float		Speed;
	// нужная скорость
	float		NeedSpeed;

	// максимальное ускорение units/sec*sec, зависит от двигателя
	float		MaxAcceler;
	// макс. маневровых двигателей
	float		MaxSpeedRotate;
	// текущее ускорение
	float		Acceler;
	// нужное ускорение
	float		NeedAcceler;




	// кол-во оружия доступного на данной моделе
	int					WeaponQuantity;
	// выстрел из оружия, т.е. передача команды "стрелять" оружию при сделующем Update'е
	bool				*WeaponSetFire;
	// указатель на массив оружия
	CWeapon				**Weapon;
	// расположение оружия (относительное)
	VECTOR3D			*WeaponLocation;
	// тип стрельбы из оружия 1-обычный, 2-переменный (по умолчанию)
	int					WeaponFireType;
	int 				WeaponGroupCurrentFireNum;
	float 				WeaponGroupCurrentFireDelay;
	// наведение на цель
	bool				WeaponTargeting;

	// для просчета положения точки стрельбы, считаем как кости
	VECTOR3D			BaseBound;
	VECTOR3D			MiddleBound;
	VECTOR3D			*WeaponBound;
	// если точки фиксированы, не нужно менять направление точки выстрела
	// только учитываем общий поворот модели и соотв. точку выстрела
	// работает только если объекты поворота башни и ствола не заданы!
	bool				DoNotCalculateRotation;



	// коэф. преобразования скорость в скорость вращения колес
	float	SpeedToRotate;


	// набор указателей на номера объектов, которыми нацеливаемся по горизонтале
	int		TargetHorizObjectQuantity;
	int		*TargetHorizObject;
	float	TargetHorizObjectCurrentAngle;
	float	TargetHorizObjectNeedAngle;
	// набор указателей на номера объектов, которыми нацеливаемся по вертикали
	int		TargetVertObjectQuantity;
	int		*TargetVertObject;
	float	TargetVertObjectMaxAngle;
	float	TargetVertObjectMinAngle;
	float	TargetVertObjectCurrentAngle;
	float	TargetVertObjectNeedAngle;
	// если нужно вращать ствол (многоствольный пулемет)
	int		BarrelObjectQuantity;
	int		*BarrelObject;


	// для собственного списка
	CGroundObject* Next;
	CGroundObject* Prev;

};





//-----------------------------------------------------------------------------
// Менеджер GroundObject, дополнительный
//-----------------------------------------------------------------------------

// Включаем в список
void	AttachGroundObject(CGroundObject* GroundObject);
// Исключаем из списка
void	DetachGroundObject(CGroundObject* GroundObject);
// Проверяем все объекты, обновляем данные
void	UpdateAllGroundObject(float Time);
// Прорисовываем все объекты
void	DrawAllGroundObject(bool VertexOnlyPass, unsigned int ShadowMap);
// Удаляем все объекты в списке
void	ReleaseAllGroundObject();





#endif // GROUNDOBJECT_H