~ubuntu-branches/debian/sid/astromenace/sid

« back to all changes in this revision

Viewing changes to AstroMenaceSource/Object3D/SpaceShip/PirateShip/PirateShip.cpp

  • Committer: Package Import Robot
  • Author(s): Boris Pek
  • Date: 2013-04-09 02:04:25 UTC
  • Revision ID: package-import@ubuntu.com-20130409020425-a7fl9xk4diamw6di
Tags: upstream-1.3.1+repack
Import upstream version 1.3.1+repack

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/************************************************************************************
 
2
 
 
3
        AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
 
4
        Copyright © 2006-2012 Michael Kurinnoy, Viewizard
 
5
 
 
6
 
 
7
        AstroMenace is free software: you can redistribute it and/or modify
 
8
        it under the terms of the GNU General Public License as published by
 
9
        the Free Software Foundation, either version 3 of the License, or
 
10
        (at your option) any later version.
 
11
 
 
12
        AstroMenace is distributed in the hope that it will be useful,
 
13
        but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
15
        GNU General Public License for more details.
 
16
 
 
17
        You should have received a copy of the GNU General Public License
 
18
        along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
 
19
 
 
20
 
 
21
        Web Site: http://www.viewizard.com/
 
22
        Project: http://sourceforge.net/projects/openastromenace/
 
23
        E-mail: viewizard@viewizard.com
 
24
 
 
25
*************************************************************************************/
 
26
 
 
27
 
 
28
/// подключаем нужные файлы
 
29
#include "PirateShip.h"
 
30
 
 
31
 
 
32
 
 
33
struct PirateShipData
 
34
{
 
35
        int             WeaponQuantity;
 
36
        int             BossWeaponQuantity;
 
37
        int             EngineQuantity;
 
38
        float   Strength;
 
39
        const   char *Name;
 
40
        const   char *TextureName;
 
41
        const   char *NormalMapName;
 
42
        bool    NeedTangentAndBinormal;
 
43
};
 
44
 
 
45
const int       PresetPirateShipDataCount = 15;
 
46
PirateShipData PresetPirateShipData[PresetPirateShipDataCount] =
 
47
{
 
48
        {2,     0, 2,   20,     "DATA/MODELS/PIRATESHIP/gunship-01.VW3D",       "DATA/MODELS/gr-04.VW2D", " ", false},
 
49
        {1,     0, 2,   30,     "DATA/MODELS/PIRATESHIP/bomber-07.VW3D",        "DATA/MODELS/gr-04.VW2D", " ", false},
 
50
        {4,     0, 2,   100,"DATA/MODELS/PIRATESHIP/gunship-03.VW3D",   "DATA/MODELS/gr-03.VW2D", " ", false},
 
51
        {4,     0, 2,   200,"DATA/MODELS/PIRATESHIP/gunship-04.VW3D",   "DATA/MODELS/gr-03.VW2D", " ", false},
 
52
        {4,     0, 6,   400,"DATA/MODELS/PIRATESHIP/gunship-02.VW3D",   "DATA/MODELS/gr-03.VW2D", " ", false},
 
53
 
 
54
        {1,     2, 2,   600,"DATA/MODELS/PIRATESHIP/bomber-03.VW3D",    "DATA/MODELS/gr-05.VW2D", " ", false},
 
55
        {1,     2, 4,   1200,"DATA/MODELS/PIRATESHIP/bomber-02.VW3D",   "DATA/MODELS/gr-05.VW2D", " ", false},
 
56
        {1,     6, 4,   1000,"DATA/MODELS/PIRATESHIP/bomber-04.VW3D",   "DATA/MODELS/gr-03.VW2D", " ", false},
 
57
        {3,     2, 6,   2000,"DATA/MODELS/PIRATESHIP/bomber-05.VW3D",   "DATA/MODELS/gr-04.VW2D", "DATA/MODELS/NORMALMAP/bomber_nm.tga", true},
 
58
        {4,     4, 8,   2500,"DATA/MODELS/PIRATESHIP/bomber-06.VW3D",   "DATA/MODELS/gr-04.VW2D", "DATA/MODELS/NORMALMAP/bomber_nm.tga", true},
 
59
 
 
60
        {0,     2, 2,   300,"DATA/MODELS/PIRATESHIP/bomber-03.VW3D",    "DATA/MODELS/gr-05.VW2D", " ", false},
 
61
        {0,     2, 4,   600,"DATA/MODELS/PIRATESHIP/bomber-02.VW3D",    "DATA/MODELS/gr-05.VW2D", " ", false},
 
62
        {0,     6, 4,   500,"DATA/MODELS/PIRATESHIP/bomber-04.VW3D",    "DATA/MODELS/gr-03.VW2D", " ", false},
 
63
        {0,     2, 6,   1000,"DATA/MODELS/PIRATESHIP/bomber-05.VW3D",   "DATA/MODELS/gr-04.VW2D", "DATA/MODELS/NORMALMAP/bomber_nm.tga", true},
 
64
        {0,     4, 8,   1500,"DATA/MODELS/PIRATESHIP/bomber-06.VW3D",   "DATA/MODELS/gr-04.VW2D", "DATA/MODELS/NORMALMAP/bomber_nm.tga", true}
 
65
};
 
66
 
 
67
 
 
68
 
 
69
 
 
70
//-----------------------------------------------------------------------------
 
71
// Конструктор, инициализация всех переменных
 
72
//-----------------------------------------------------------------------------
 
73
void CPirateShip::Create(int PirateShipNum)
 
74
{
 
75
        ObjectStatus = 1; // чужой
 
76
        ObjectType = 4;
 
77
        ObjectCreationType = PirateShipNum;
 
78
        PromptDrawDist2 = 100.0f;
 
79
        if (PirateShipNum > 5) PromptDrawDist2 = 20000.0f; // большие корабли пиратов
 
80
 
 
81
        ResistanceHull = 1.0f;
 
82
        ResistanceSystems = 1.0f;
 
83
        MaxSpeed = 20.0f;
 
84
        MaxAcceler = 20.0f;
 
85
        MaxSpeedRotate = 40.0f;
 
86
        //EngineSoundNum = 0;
 
87
        EngineLeftQuantity = 0;
 
88
        EngineRightQuantity = 0;
 
89
        Strength = StrengthStart = PresetPirateShipData[PirateShipNum-1].Strength/GameNPCArmorPenalty;
 
90
        WeaponQuantity = PresetPirateShipData[PirateShipNum-1].WeaponQuantity;
 
91
        BossWeaponQuantity = PresetPirateShipData[PirateShipNum-1].BossWeaponQuantity;
 
92
        EngineQuantity = PresetPirateShipData[PirateShipNum-1].EngineQuantity;
 
93
 
 
94
 
 
95
        LoadObjectData(PresetPirateShipData[PirateShipNum-1].Name, this, 0, 2.0f, PresetPirateShipData[PirateShipNum-1].NeedTangentAndBinormal && Setup.UseGLSL);
 
96
 
 
97
        // всегда только эти текстуры
 
98
        for (int i=0; i<DrawObjectQuantity; i++)
 
99
        {
 
100
                Texture[i] = vw_FindTextureByName(PresetPirateShipData[PirateShipNum-1].TextureName);
 
101
                if (PresetPirateShipData[PirateShipNum-1].NeedTangentAndBinormal && Setup.UseGLSL)
 
102
                        NormalMap[i] = vw_FindTextureByName(PresetPirateShipData[PirateShipNum-1].NormalMapName);
 
103
        }
 
104
 
 
105
 
 
106
        // начальные установки для оружия
 
107
        if (WeaponQuantity > 0)
 
108
        {
 
109
                WeaponSetFire = new bool[WeaponQuantity];
 
110
                WeaponLocation = new VECTOR3D[WeaponQuantity];
 
111
                WeaponType = new int[WeaponQuantity];
 
112
                Weapon = new CWeapon*[WeaponQuantity];
 
113
                for (int i=0; i<WeaponQuantity; i++)
 
114
                {
 
115
                        WeaponSetFire[i] = false;
 
116
                        WeaponType[i] = 1;
 
117
                        Weapon[i] = 0;
 
118
                }
 
119
        }
 
120
        if (BossWeaponQuantity > 0)
 
121
        {
 
122
                BossWeaponSetFire = new bool[BossWeaponQuantity];
 
123
                BossWeaponLocation = new VECTOR3D[BossWeaponQuantity];
 
124
                BossWeaponType = new int[BossWeaponQuantity];
 
125
                BossWeapon = new CWeapon*[BossWeaponQuantity];
 
126
                for (int i=0; i<BossWeaponQuantity; i++)
 
127
                {
 
128
                        BossWeaponSetFire[i] = false;
 
129
                        BossWeaponType[i] = 1;
 
130
                        BossWeapon[i] = 0;
 
131
                }
 
132
        }
 
133
        // начальные установки для двигателей
 
134
        EngineLocation = new VECTOR3D[EngineQuantity];
 
135
        Engine = new eParticleSystem*[EngineQuantity];
 
136
        for (int i=0; i<EngineQuantity; i++) Engine[i] = 0;
 
137
 
 
138
 
 
139
 
 
140
 
 
141
 
 
142
 
 
143
 
 
144
 
 
145
        // перебираем и ставим нужные данные
 
146
        switch (PirateShipNum)
 
147
        {
 
148
                case 1:
 
149
                        MaxSpeed = 30.0f;
 
150
                        MaxAcceler = 30.0f;
 
151
                        // оружие
 
152
                        WeaponLocation[0] = VECTOR3D(1.8f, -1.2f, 6.0f);
 
153
                        Weapon[0] = new CWeapon;
 
154
                        Weapon[0]->Create(204);
 
155
                        WeaponLocation[1] = VECTOR3D(-1.8f, -1.2f, 6.0f);
 
156
                        Weapon[1] = new CWeapon;
 
157
                        Weapon[1]->Create(204);
 
158
                        Weapon[1]->SoundNum = 0;
 
159
                        WeaponFireType = 1;
 
160
 
 
161
                        // двигатели
 
162
                        Engine[0] = new eParticleSystem;
 
163
                        EngineLocation[0] = VECTOR3D(0.9f, 1.6f, -5.4f);
 
164
                        SetPirateShipEngine(Engine[0], 1);
 
165
                        Engine[1] = new eParticleSystem;
 
166
                        EngineLocation[1] = VECTOR3D(-0.9f, 1.6f, -5.4f);
 
167
                        SetPirateShipEngine(Engine[1], 1);
 
168
                        break;
 
169
 
 
170
                case 2:
 
171
                        MaxSpeed = 50.0f;
 
172
                        MaxAcceler = 50.0f;
 
173
                        // оружие
 
174
                        WeaponLocation[0] = VECTOR3D(0.0f, -2.0f, 2.0f);
 
175
                        Weapon[0] = new CWeapon;
 
176
                        Weapon[0]->Create(205);
 
177
                        // двигатели
 
178
                        Engine[0] = new eParticleSystem;
 
179
                        EngineLocation[0] = VECTOR3D(1.1f, 0.5f, -5.7f);
 
180
                        SetPirateShipEngine(Engine[0], 2);
 
181
                        Engine[1] = new eParticleSystem;
 
182
                        EngineLocation[1] = VECTOR3D(-1.1f, 0.5f, -5.7f);
 
183
                        SetPirateShipEngine(Engine[1], 2);
 
184
                        break;
 
185
 
 
186
                case 3:
 
187
                        MaxSpeed = 30.0f;
 
188
                        MaxAcceler = 30.0f;
 
189
                        // оружие
 
190
                        WeaponLocation[0] = VECTOR3D(3.0f, -0.2f, -0.5f);
 
191
                        Weapon[0] = new CWeapon;
 
192
                        Weapon[0]->Create(204);
 
193
                        WeaponLocation[1] = VECTOR3D(-3.0f, -0.2f, -0.5f);
 
194
                        Weapon[1] = new CWeapon;
 
195
                        Weapon[1]->Create(204);
 
196
                        WeaponLocation[2] = VECTOR3D(2.0f, -0.2f, 0.0f);
 
197
                        Weapon[2] = new CWeapon;
 
198
                        Weapon[2]->Create(206);
 
199
                        WeaponLocation[3] = VECTOR3D(-2.0f, -0.2f, 0.0f);
 
200
                        Weapon[3] = new CWeapon;
 
201
                        Weapon[3]->Create(206);
 
202
                        // двигатели
 
203
                        Engine[0] = new eParticleSystem;
 
204
                        EngineLocation[0] = VECTOR3D(1.0f, 1.8f, -1.2f);
 
205
                        SetPirateShipEngine(Engine[0], 1);
 
206
                        Engine[1] = new eParticleSystem;
 
207
                        EngineLocation[1] = VECTOR3D(-1.0f, 1.8f, -1.2f);
 
208
                        SetPirateShipEngine(Engine[1], 1);
 
209
                        break;
 
210
                case 4:
 
211
                        MaxSpeed = 30.0f;
 
212
                        MaxAcceler = 30.0f;
 
213
                        // оружие
 
214
                        WeaponLocation[0] = VECTOR3D(4.3f, -0.4f, -0.5f);
 
215
                        Weapon[0] = new CWeapon;
 
216
                        Weapon[0]->Create(211);
 
217
                        WeaponLocation[1] = VECTOR3D(-4.3f, -0.4f, -0.5f);
 
218
                        Weapon[1] = new CWeapon;
 
219
                        Weapon[1]->Create(211);
 
220
                        WeaponLocation[2] = VECTOR3D(3.0f, -0.4f, 0.5f);
 
221
                        Weapon[2] = new CWeapon;
 
222
                        Weapon[2]->Create(205);
 
223
                        WeaponLocation[3] = VECTOR3D(-3.0f, -0.4f, 0.5f);
 
224
                        Weapon[3] = new CWeapon;
 
225
                        Weapon[3]->Create(205);
 
226
                        // двигатели
 
227
                        Engine[0] = new eParticleSystem;
 
228
                        EngineLocation[0] = VECTOR3D(1.3f, 1.9f, -1.7f);
 
229
                        SetPirateShipEngine(Engine[0], 2);
 
230
                        Engine[1] = new eParticleSystem;
 
231
                        EngineLocation[1] = VECTOR3D(-1.3f, 1.9f, -1.7f);
 
232
                        SetPirateShipEngine(Engine[1], 2);
 
233
                        break;
 
234
 
 
235
                case 5:
 
236
                        MaxSpeed = 30.0f;
 
237
                        MaxAcceler = 30.0f;
 
238
                        // оружие
 
239
                        WeaponLocation[0] = VECTOR3D(1.0f, 4.2f, -5.5f);
 
240
                        Weapon[0] = new CWeapon;
 
241
                        Weapon[0]->Create(211);
 
242
                        WeaponLocation[1] = VECTOR3D(-1.0f, 4.2f, -5.5f);
 
243
                        Weapon[1] = new CWeapon;
 
244
                        Weapon[1]->Create(211);
 
245
                        WeaponLocation[2] = VECTOR3D(0.5f, -1.8f, 5.0f);
 
246
                        Weapon[2] = new CWeapon;
 
247
                        Weapon[2]->Create(211);
 
248
                        WeaponLocation[3] = VECTOR3D(-0.5f, -1.8f, 5.0f);
 
249
                        Weapon[3] = new CWeapon;
 
250
                        Weapon[3]->Create(211);
 
251
                        // двигатели
 
252
                        Engine[0] = new eParticleSystem;
 
253
                        EngineLocation[0] = VECTOR3D(5.8f, 6.5f-4.6f, 0.0f);
 
254
                        SetPirateShipEngine(Engine[0], 3);
 
255
                        Engine[1] = new eParticleSystem;
 
256
                        EngineLocation[1] = VECTOR3D(-5.8f, 6.5f-4.6f, 0.0f);
 
257
                        SetPirateShipEngine(Engine[1], 3);
 
258
                        Engine[2] = new eParticleSystem;
 
259
                        EngineLocation[2] = VECTOR3D(5.8f, 7.3f-4.6f, 0.0f);
 
260
                        SetPirateShipEngine(Engine[2], 4);
 
261
                        Engine[3] = new eParticleSystem;
 
262
                        EngineLocation[3] = VECTOR3D(-5.8f, 7.3f-4.6f, 0.0f);
 
263
                        SetPirateShipEngine(Engine[3], 4);
 
264
                        Engine[4] = new eParticleSystem;
 
265
                        EngineLocation[4] = VECTOR3D(5.8f, 6.1f-4.6f, -2.3f);
 
266
                        SetPirateShipEngine(Engine[4], 1);
 
267
                        Engine[4]->Direction = VECTOR3D(0.0f, -0.2f, -0.8f);
 
268
                        Engine[5] = new eParticleSystem;
 
269
                        EngineLocation[5] = VECTOR3D(-5.8f, 6.1f-4.6f, -2.3f);
 
270
                        SetPirateShipEngine(Engine[5], 1);
 
271
                        Engine[5]->Direction = VECTOR3D(0.0f, -0.2f, -0.8f);
 
272
                        break;
 
273
 
 
274
                case 6:
 
275
                        // оружие
 
276
                        WeaponLocation[0] = VECTOR3D(0.0f, 2.2f, -0.2f);
 
277
                        Weapon[0] = new CWeapon;
 
278
                        Weapon[0]->Create(202);
 
279
 
 
280
                        BossWeaponLocation[0] = VECTOR3D(5.4f, 1.0f, 2.0f);
 
281
                        BossWeapon[0] = new CWeapon;
 
282
                        BossWeapon[0]->Create(209);
 
283
                        BossWeaponLocation[1] = VECTOR3D(-5.4f, 1.0f, 2.0f);
 
284
                        BossWeapon[1] = new CWeapon;
 
285
                        BossWeapon[1]->Create(209);
 
286
 
 
287
                        // фларе
 
288
                        WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f);
 
289
                        WeaponFlare = new CWeapon;
 
290
                        WeaponFlare->Create(203);
 
291
                        // двигатели
 
292
                        Engine[0] = new eParticleSystem;
 
293
                        EngineLocation[0] = VECTOR3D(1.7f, 6.6f-3.83f, -14.2f);
 
294
                        SetPirateShipEngine(Engine[0], 2);
 
295
                        Engine[1] = new eParticleSystem;
 
296
                        EngineLocation[1] = VECTOR3D(-1.7f, 6.6f-3.83f, -14.2f);
 
297
                        SetPirateShipEngine(Engine[1], 2);
 
298
                        break;
 
299
 
 
300
                case 7:
 
301
                        // оружие
 
302
                        WeaponLocation[0] = VECTOR3D(0.0f, 2.4f, -0.2f);
 
303
                        Weapon[0] = new CWeapon;
 
304
                        Weapon[0]->Create(202);
 
305
 
 
306
                        BossWeaponLocation[0] = VECTOR3D(9.5f, 1.3f, 2.0f);
 
307
                        BossWeapon[0] = new CWeapon;
 
308
                        BossWeapon[0]->Create(210);
 
309
                        BossWeaponLocation[1] = VECTOR3D(-9.5f, 1.3f, 2.0f);
 
310
                        BossWeapon[1] = new CWeapon;
 
311
                        BossWeapon[1]->Create(210);
 
312
 
 
313
                        // фларе
 
314
                        WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f);
 
315
                        WeaponFlare = new CWeapon;
 
316
                        WeaponFlare->Create(203);
 
317
                        // двигатели
 
318
                        Engine[0] = new eParticleSystem;
 
319
                        EngineLocation[0] = VECTOR3D(2.2f, 7.6f-5.25f, -14.8f);
 
320
                        SetPirateShipEngine(Engine[0], 2);
 
321
                        Engine[1] = new eParticleSystem;
 
322
                        EngineLocation[1] = VECTOR3D(-2.2f, 7.6f-5.25f, -14.8f);
 
323
                        SetPirateShipEngine(Engine[1], 2);
 
324
                        Engine[2] = new eParticleSystem;
 
325
                        EngineLocation[2] = VECTOR3D(17.2f, 6.8f-5.25f, -9.0f);
 
326
                        SetPirateShipEngine(Engine[2], 5);
 
327
                        Engine[3] = new eParticleSystem;
 
328
                        EngineLocation[3] = VECTOR3D(-17.2f, 6.8f-5.25f, -9.0f);
 
329
                        SetPirateShipEngine(Engine[3], 5);
 
330
                        break;
 
331
 
 
332
                case 8:
 
333
                        // оружие
 
334
                        WeaponLocation[0] = VECTOR3D(0.0f, 2.4f, -0.2f);
 
335
                        Weapon[0] = new CWeapon;
 
336
                        Weapon[0]->Create(202);
 
337
 
 
338
                        BossWeaponLocation[0] = VECTOR3D(9.1f, 1.3f, 2.0f);
 
339
                        BossWeapon[0] = new CWeapon;
 
340
                        BossWeapon[0]->Create(206);
 
341
                        BossWeaponLocation[1] = VECTOR3D(9.4f, 1.0f, 2.0f);
 
342
                        BossWeapon[1] = new CWeapon;
 
343
                        BossWeapon[1]->Create(206);
 
344
                        BossWeaponLocation[2] = VECTOR3D(9.1f, 0.7f, 2.0f);
 
345
                        BossWeapon[2] = new CWeapon;
 
346
                        BossWeapon[2]->Create(206);
 
347
 
 
348
                        BossWeaponLocation[3] = VECTOR3D(-9.1f, 1.3f, 2.0f);
 
349
                        BossWeapon[3] = new CWeapon;
 
350
                        BossWeapon[3]->Create(206);
 
351
                        BossWeaponLocation[4] = VECTOR3D(-9.4f, 1.0f, 2.0f);
 
352
                        BossWeapon[4] = new CWeapon;
 
353
                        BossWeapon[4]->Create(206);
 
354
                        BossWeaponLocation[5] = VECTOR3D(-9.1f, 0.7f, 2.0f);
 
355
                        BossWeapon[5] = new CWeapon;
 
356
                        BossWeapon[5]->Create(206);
 
357
 
 
358
                        // фларе
 
359
                        WeaponFlareLocation = VECTOR3D(0.0f, 6.0f, 0.0f);
 
360
                        WeaponFlare = new CWeapon;
 
361
                        WeaponFlare->Create(203);
 
362
                        // двигатели
 
363
                        Engine[0] = new eParticleSystem;
 
364
                        EngineLocation[0] = VECTOR3D(4.5f, 6.3f-3.62f, -12.5f);
 
365
                        SetPirateShipEngine(Engine[0], 2);
 
366
                        Engine[1] = new eParticleSystem;
 
367
                        EngineLocation[1] = VECTOR3D(-4.5f, 6.3f-3.62f, -12.5f);
 
368
                        SetPirateShipEngine(Engine[1], 2);
 
369
                        Engine[2] = new eParticleSystem;
 
370
                        EngineLocation[2] = VECTOR3D(9.2f, 4.4f-3.62f, -5.6f);
 
371
                        SetPirateShipEngine(Engine[2], 5);
 
372
                        Engine[3] = new eParticleSystem;
 
373
                        EngineLocation[3] = VECTOR3D(-9.2f, 4.4f-3.62f, -5.6f);
 
374
                        SetPirateShipEngine(Engine[3], 5);
 
375
                        break;
 
376
 
 
377
                case 9:
 
378
                        // оружие
 
379
                        WeaponLocation[0] = VECTOR3D(0.0f, 4.2f, 7.0f);
 
380
                        Weapon[0] = new CWeapon;
 
381
                        Weapon[0]->Create(201);
 
382
                        WeaponLocation[1] = VECTOR3D(0.0f, 4.2f, 3.5f);
 
383
                        Weapon[1] = new CWeapon;
 
384
                        Weapon[1]->Create(201);
 
385
                        Weapon[1]->SetRotation(VECTOR3D(0,180,0));
 
386
                        WeaponLocation[2] = VECTOR3D(0.0f, 3.4f, -5.0f);
 
387
                        Weapon[2] = new CWeapon;
 
388
                        Weapon[2]->Create(202);
 
389
 
 
390
                        BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 9.0f);
 
391
                        BossWeapon[0] = new CWeapon;
 
392
                        BossWeapon[0]->Create(205);
 
393
                        BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 9.0f);
 
394
                        BossWeapon[1] = new CWeapon;
 
395
                        BossWeapon[1]->Create(205);
 
396
 
 
397
                        // фларе
 
398
                        WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f);
 
399
                        WeaponFlare = new CWeapon;
 
400
                        WeaponFlare->Create(203);
 
401
                        // двигатели
 
402
                        Engine[0] = new eParticleSystem;
 
403
                        EngineLocation[0] = VECTOR3D(1.4f, 8.7f-4.9f, -20.4f);
 
404
                        SetPirateShipEngine(Engine[0], 2);
 
405
                        Engine[1] = new eParticleSystem;
 
406
                        EngineLocation[1] = VECTOR3D(-1.4f, 8.7f-4.9f, -20.4f);
 
407
                        SetPirateShipEngine(Engine[1], 2);
 
408
                        Engine[2] = new eParticleSystem;
 
409
                        EngineLocation[2] = VECTOR3D(4.7f, 7.0f-4.9f, 0.0f);
 
410
                        SetPirateShipEngine(Engine[2], 2);
 
411
                        Engine[3] = new eParticleSystem;
 
412
                        EngineLocation[3] = VECTOR3D(-4.7f, 7.0f-4.9f, 0.0f);
 
413
                        SetPirateShipEngine(Engine[3], 2);
 
414
                        Engine[4] = new eParticleSystem;
 
415
                        EngineLocation[4] = VECTOR3D(7.5f, 6.8f-4.9f, 0.0f);
 
416
                        SetPirateShipEngine(Engine[4], 2);
 
417
                        Engine[5] = new eParticleSystem;
 
418
                        EngineLocation[5] = VECTOR3D(-7.5f, 6.8f-4.9f, 0.0f);
 
419
                        SetPirateShipEngine(Engine[5], 2);
 
420
                        break;
 
421
 
 
422
                case 10:
 
423
                        // оружие
 
424
                        WeaponLocation[0] = VECTOR3D(0.0f, 4.4f, 6.8f);
 
425
                        Weapon[0] = new CWeapon;
 
426
                        Weapon[0]->Create(201);
 
427
                        WeaponLocation[1] = VECTOR3D(0.0f, 4.4f, 2.6f);
 
428
                        Weapon[1] = new CWeapon;
 
429
                        Weapon[1]->Create(201);
 
430
                        Weapon[1]->SetRotation(VECTOR3D(0,180,0));
 
431
                        WeaponLocation[2] = VECTOR3D(0.0f, 2.6f, -7.0f);
 
432
                        Weapon[2] = new CWeapon;
 
433
                        Weapon[2]->Create(202);
 
434
                        WeaponLocation[3] = VECTOR3D(0.0f, 2.6f, -16.0f);
 
435
                        Weapon[3] = new CWeapon;
 
436
                        Weapon[3]->Create(201);
 
437
                        Weapon[3]->SetRotation(VECTOR3D(0,180,0));
 
438
 
 
439
                        BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 8.0f);
 
440
                        BossWeapon[0] = new CWeapon;
 
441
                        BossWeapon[0]->Create(205);
 
442
                        BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 8.0f);
 
443
                        BossWeapon[1] = new CWeapon;
 
444
                        BossWeapon[1]->Create(205);
 
445
                        BossWeaponLocation[2] = VECTOR3D(16.5f, 2.7f, 7.5f);
 
446
                        BossWeapon[2] = new CWeapon;
 
447
                        BossWeapon[2]->Create(205);
 
448
                        BossWeaponLocation[3] = VECTOR3D(-16.5f, 2.7f, 7.5f);
 
449
                        BossWeapon[3] = new CWeapon;
 
450
                        BossWeapon[3]->Create(205);
 
451
 
 
452
                        // фларе
 
453
                        WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f);
 
454
                        WeaponFlare = new CWeapon;
 
455
                        WeaponFlare->Create(203);
 
456
                        // двигатели
 
457
                        Engine[0] = new eParticleSystem;
 
458
                        EngineLocation[0] = VECTOR3D(3.8f, 5.4f-4.29f, -19.5f);
 
459
                        SetPirateShipEngine(Engine[0], 2);
 
460
                        Engine[1] = new eParticleSystem;
 
461
                        EngineLocation[1] = VECTOR3D(-3.8f, 5.4f-4.29f, -19.5f);
 
462
                        SetPirateShipEngine(Engine[1], 2);
 
463
                        Engine[2] = new eParticleSystem;
 
464
                        EngineLocation[2] = VECTOR3D(5.8f, 6.0f-4.29f, -0.9f);
 
465
                        SetPirateShipEngine(Engine[2], 2);
 
466
                        Engine[3] = new eParticleSystem;
 
467
                        EngineLocation[3] = VECTOR3D(-5.8f, 6.0f-4.29f, -0.9f);
 
468
                        SetPirateShipEngine(Engine[3], 2);
 
469
                        Engine[4] = new eParticleSystem;
 
470
                        EngineLocation[4] = VECTOR3D(8.0f, 6.0f-4.29f, -0.9f);
 
471
                        SetPirateShipEngine(Engine[4], 2);
 
472
                        Engine[5] = new eParticleSystem;
 
473
                        EngineLocation[5] = VECTOR3D(-8.0f, 6.0f-4.29f, -0.9f);
 
474
                        SetPirateShipEngine(Engine[5], 2);
 
475
                        Engine[6] = new eParticleSystem;
 
476
                        EngineLocation[6] = VECTOR3D(20.0f, 5.0f-4.29f, -3.6f);
 
477
                        SetPirateShipEngine(Engine[6], 2);
 
478
                        Engine[7] = new eParticleSystem;
 
479
                        EngineLocation[7] = VECTOR3D(-20.0f, 5.0f-4.29f, -3.6f);
 
480
                        SetPirateShipEngine(Engine[7], 2);
 
481
                        break;
 
482
 
 
483
 
 
484
 
 
485
 
 
486
 
 
487
                case 11:
 
488
                        // оружие
 
489
                        BossWeaponLocation[0] = VECTOR3D(5.4f, 1.0f, 2.0f);
 
490
                        BossWeapon[0] = new CWeapon;
 
491
                        BossWeapon[0]->Create(209);
 
492
                        BossWeaponLocation[1] = VECTOR3D(-5.4f, 1.0f, 2.0f);
 
493
                        BossWeapon[1] = new CWeapon;
 
494
                        BossWeapon[1]->Create(209);
 
495
                        // фларе
 
496
                        WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f);
 
497
                        WeaponFlare = new CWeapon;
 
498
                        WeaponFlare->Create(203);
 
499
                        // двигатели
 
500
                        Engine[0] = new eParticleSystem;
 
501
                        EngineLocation[0] = VECTOR3D(1.7f, 6.6f-3.83f, -14.2f);
 
502
                        SetPirateShipEngine(Engine[0], 2);
 
503
                        Engine[1] = new eParticleSystem;
 
504
                        EngineLocation[1] = VECTOR3D(-1.7f, 6.6f-3.83f, -14.2f);
 
505
                        SetPirateShipEngine(Engine[1], 2);
 
506
                        break;
 
507
 
 
508
                case 12:
 
509
                        // оружие
 
510
                        BossWeaponLocation[0] = VECTOR3D(9.5f, 1.3f, 2.0f);
 
511
                        BossWeapon[0] = new CWeapon;
 
512
                        BossWeapon[0]->Create(210);
 
513
                        BossWeaponLocation[1] = VECTOR3D(-9.5f, 1.3f, 2.0f);
 
514
                        BossWeapon[1] = new CWeapon;
 
515
                        BossWeapon[1]->Create(210);
 
516
                        // фларе
 
517
                        WeaponFlareLocation = VECTOR3D(0.0f, 5.0f, 0.0f);
 
518
                        WeaponFlare = new CWeapon;
 
519
                        WeaponFlare->Create(203);
 
520
                        // двигатели
 
521
                        Engine[0] = new eParticleSystem;
 
522
                        EngineLocation[0] = VECTOR3D(2.2f, 7.6f-5.25f, -14.8f);
 
523
                        SetPirateShipEngine(Engine[0], 2);
 
524
                        Engine[1] = new eParticleSystem;
 
525
                        EngineLocation[1] = VECTOR3D(-2.2f, 7.6f-5.25f, -14.8f);
 
526
                        SetPirateShipEngine(Engine[1], 2);
 
527
                        Engine[2] = new eParticleSystem;
 
528
                        EngineLocation[2] = VECTOR3D(17.2f, 6.8f-5.25f, -9.0f);
 
529
                        SetPirateShipEngine(Engine[2], 5);
 
530
                        Engine[3] = new eParticleSystem;
 
531
                        EngineLocation[3] = VECTOR3D(-17.2f, 6.8f-5.25f, -9.0f);
 
532
                        SetPirateShipEngine(Engine[3], 5);
 
533
                        break;
 
534
 
 
535
                case 13:
 
536
                        // оружие
 
537
                        BossWeaponLocation[0] = VECTOR3D(9.1f, 1.3f, 2.0f);
 
538
                        BossWeapon[0] = new CWeapon;
 
539
                        BossWeapon[0]->Create(206);
 
540
                        BossWeaponLocation[1] = VECTOR3D(9.4f, 1.0f, 2.0f);
 
541
                        BossWeapon[1] = new CWeapon;
 
542
                        BossWeapon[1]->Create(206);
 
543
                        BossWeaponLocation[2] = VECTOR3D(9.1f, 0.7f, 2.0f);
 
544
                        BossWeapon[2] = new CWeapon;
 
545
                        BossWeapon[2]->Create(206);
 
546
                        BossWeaponLocation[3] = VECTOR3D(-9.1f, 1.3f, 2.0f);
 
547
                        BossWeapon[3] = new CWeapon;
 
548
                        BossWeapon[3]->Create(206);
 
549
                        BossWeaponLocation[4] = VECTOR3D(-9.4f, 1.0f, 2.0f);
 
550
                        BossWeapon[4] = new CWeapon;
 
551
                        BossWeapon[4]->Create(206);
 
552
                        BossWeaponLocation[5] = VECTOR3D(-9.1f, 0.7f, 2.0f);
 
553
                        BossWeapon[5] = new CWeapon;
 
554
                        BossWeapon[5]->Create(206);
 
555
                        // фларе
 
556
                        WeaponFlareLocation = VECTOR3D(0.0f, 6.0f, 0.0f);
 
557
                        WeaponFlare = new CWeapon;
 
558
                        WeaponFlare->Create(203);
 
559
                        // двигатели
 
560
                        Engine[0] = new eParticleSystem;
 
561
                        EngineLocation[0] = VECTOR3D(4.5f, 6.3f-3.62f, -12.5f);
 
562
                        SetPirateShipEngine(Engine[0], 2);
 
563
                        Engine[1] = new eParticleSystem;
 
564
                        EngineLocation[1] = VECTOR3D(-4.5f, 6.3f-3.62f, -12.5f);
 
565
                        SetPirateShipEngine(Engine[1], 2);
 
566
                        Engine[2] = new eParticleSystem;
 
567
                        EngineLocation[2] = VECTOR3D(9.2f, 4.4f-3.62f, -5.6f);
 
568
                        SetPirateShipEngine(Engine[2], 5);
 
569
                        Engine[3] = new eParticleSystem;
 
570
                        EngineLocation[3] = VECTOR3D(-9.2f, 4.4f-3.62f, -5.6f);
 
571
                        SetPirateShipEngine(Engine[3], 5);
 
572
                        break;
 
573
 
 
574
                case 14:
 
575
                        // оружие
 
576
                        BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 9.0f);
 
577
                        BossWeapon[0] = new CWeapon;
 
578
                        BossWeapon[0]->Create(205);
 
579
                        BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 9.0f);
 
580
                        BossWeapon[1] = new CWeapon;
 
581
                        BossWeapon[1]->Create(205);
 
582
                        // фларе
 
583
                        WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f);
 
584
                        WeaponFlare = new CWeapon;
 
585
                        WeaponFlare->Create(203);
 
586
                        // двигатели
 
587
                        Engine[0] = new eParticleSystem;
 
588
                        EngineLocation[0] = VECTOR3D(1.4f, 8.7f-4.9f, -20.4f);
 
589
                        SetPirateShipEngine(Engine[0], 2);
 
590
                        Engine[1] = new eParticleSystem;
 
591
                        EngineLocation[1] = VECTOR3D(-1.4f, 8.7f-4.9f, -20.4f);
 
592
                        SetPirateShipEngine(Engine[1], 2);
 
593
                        Engine[2] = new eParticleSystem;
 
594
                        EngineLocation[2] = VECTOR3D(4.7f, 7.0f-4.9f, 0.0f);
 
595
                        SetPirateShipEngine(Engine[2], 2);
 
596
                        Engine[3] = new eParticleSystem;
 
597
                        EngineLocation[3] = VECTOR3D(-4.7f, 7.0f-4.9f, 0.0f);
 
598
                        SetPirateShipEngine(Engine[3], 2);
 
599
                        Engine[4] = new eParticleSystem;
 
600
                        EngineLocation[4] = VECTOR3D(7.5f, 6.8f-4.9f, 0.0f);
 
601
                        SetPirateShipEngine(Engine[4], 2);
 
602
                        Engine[5] = new eParticleSystem;
 
603
                        EngineLocation[5] = VECTOR3D(-7.5f, 6.8f-4.9f, 0.0f);
 
604
                        SetPirateShipEngine(Engine[5], 2);
 
605
                        break;
 
606
 
 
607
                case 15:
 
608
                        // оружие
 
609
                        BossWeaponLocation[0] = VECTOR3D(11.1f, 2.7f, 8.0f);
 
610
                        BossWeapon[0] = new CWeapon;
 
611
                        BossWeapon[0]->Create(205);
 
612
                        BossWeaponLocation[1] = VECTOR3D(-11.1f, 2.7f, 8.0f);
 
613
                        BossWeapon[1] = new CWeapon;
 
614
                        BossWeapon[1]->Create(205);
 
615
                        BossWeaponLocation[2] = VECTOR3D(16.5f, 2.7f, 7.5f);
 
616
                        BossWeapon[2] = new CWeapon;
 
617
                        BossWeapon[2]->Create(205);
 
618
                        BossWeaponLocation[3] = VECTOR3D(-16.5f, 2.7f, 7.5f);
 
619
                        BossWeapon[3] = new CWeapon;
 
620
                        BossWeapon[3]->Create(205);
 
621
                        // фларе
 
622
                        WeaponFlareLocation = VECTOR3D(0.0f, 7.0f, 0.0f);
 
623
                        WeaponFlare = new CWeapon;
 
624
                        WeaponFlare->Create(203);
 
625
                        // двигатели
 
626
                        Engine[0] = new eParticleSystem;
 
627
                        EngineLocation[0] = VECTOR3D(3.8f, 5.4f-4.29f, -19.5f);
 
628
                        SetPirateShipEngine(Engine[0], 2);
 
629
                        Engine[1] = new eParticleSystem;
 
630
                        EngineLocation[1] = VECTOR3D(-3.8f, 5.4f-4.29f, -19.5f);
 
631
                        SetPirateShipEngine(Engine[1], 2);
 
632
                        Engine[2] = new eParticleSystem;
 
633
                        EngineLocation[2] = VECTOR3D(5.8f, 6.0f-4.29f, -0.9f);
 
634
                        SetPirateShipEngine(Engine[2], 2);
 
635
                        Engine[3] = new eParticleSystem;
 
636
                        EngineLocation[3] = VECTOR3D(-5.8f, 6.0f-4.29f, -0.9f);
 
637
                        SetPirateShipEngine(Engine[3], 2);
 
638
                        Engine[4] = new eParticleSystem;
 
639
                        EngineLocation[4] = VECTOR3D(8.0f, 6.0f-4.29f, -0.9f);
 
640
                        SetPirateShipEngine(Engine[4], 2);
 
641
                        Engine[5] = new eParticleSystem;
 
642
                        EngineLocation[5] = VECTOR3D(-8.0f, 6.0f-4.29f, -0.9f);
 
643
                        SetPirateShipEngine(Engine[5], 2);
 
644
                        Engine[6] = new eParticleSystem;
 
645
                        EngineLocation[6] = VECTOR3D(20.0f, 5.0f-4.29f, -3.6f);
 
646
                        SetPirateShipEngine(Engine[6], 2);
 
647
                        Engine[7] = new eParticleSystem;
 
648
                        EngineLocation[7] = VECTOR3D(-20.0f, 5.0f-4.29f, -3.6f);
 
649
                        SetPirateShipEngine(Engine[7], 2);
 
650
                        break;
 
651
 
 
652
 
 
653
 
 
654
 
 
655
 
 
656
                default:
 
657
                        fprintf(stderr, "Wrong PirateShipNum!");
 
658
                        return;
 
659
        }
 
660
 
 
661
 
 
662
        for (int i=0; i< EngineQuantity; i++)
 
663
        {
 
664
                Engine[i]->SetStartLocation(EngineLocation[i]);
 
665
                // находим кол-во внутренних источников света
 
666
                if (Engine[i]->Light != 0) InternalLights++;
 
667
        }
 
668
 
 
669
 
 
670
        // находим все данные по геометрии
 
671
        ::CObject3D::InitByDrawObjectList();
 
672
}
 
673