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

« back to all changes in this revision

Viewing changes to AstroMenaceSource/Menu/Menu_Mission.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
#include "../Game.h"
 
29
 
 
30
 
 
31
 
 
32
int     SoundOnMissionID = -1;
 
33
 
 
34
int CurrentMission = -1;
 
35
// всего доступно миссий
 
36
int AllMission;
 
37
// начало и конец отображаемых миссий
 
38
int StartMission = 0;
 
39
int EndMission = 4;
 
40
// ограничение, сколько миссий может быть открыто (нужно для демо версии)
 
41
int MissionLimitation;
 
42
 
 
43
// списки с данными для каждой миссии
 
44
char **MissionTitle = 0;
 
45
char **MissionDescr = 0;
 
46
float *MissionTitleColorR = 0;
 
47
float *MissionTitleColorG = 0;
 
48
float *MissionTitleColorB = 0;
 
49
float *MissionDescrColorR = 0;
 
50
float *MissionDescrColorG = 0;
 
51
float *MissionDescrColorB = 0;
 
52
char **MissionIcon = 0;
 
53
int *MissionTitleType = 0;
 
54
int *MissionDescrType = 0;
 
55
char **MissionFile = 0;
 
56
 
 
57
 
 
58
 
 
59
 
 
60
// получаем имя файла миссии
 
61
char MissionFileName[MAX_PATH];
 
62
char *GetMissionFileName()
 
63
{
 
64
        for(int i = 0; i<MAX_PATH; i++) MissionFileName[i] = 0;
 
65
 
 
66
        if (MissionFile != 0)
 
67
        {
 
68
                if (MissionFile[CurrentMission] != 0)
 
69
                        strcpy(MissionFileName, MissionFile[CurrentMission]);
 
70
                else
 
71
                        return 0;
 
72
        }
 
73
        else
 
74
                return 0;
 
75
 
 
76
        return MissionFileName;
 
77
}
 
78
 
 
79
 
 
80
 
 
81
 
 
82
 
 
83
 
 
84
 
 
85
 
 
86
 
 
87
 
 
88
 
 
89
 
 
90
 
 
91
 
 
92
//------------------------------------------------------------------------------------
 
93
// инициализация данных списка миссий
 
94
//------------------------------------------------------------------------------------
 
95
void MissionsListInit()
 
96
{
 
97
        // по скрипту, смотрим что загружать + считаем сколько позиций
 
98
        cXMLDocument *xmlDoc = new cXMLDocument;
 
99
 
 
100
        // читаем данные
 
101
        if (!xmlDoc->Load("DATA/SCRIPT/list.xml"))
 
102
        {
 
103
                fprintf(stderr, "Can't find script file: %s\n", "DATA/SCRIPT/list.xml");
 
104
                delete xmlDoc;
 
105
                return;
 
106
        }
 
107
 
 
108
 
 
109
        // проверяем корневой элемент
 
110
        if (strcmp("AstroMenaceMissionsList", xmlDoc->RootXMLEntry->Name))
 
111
        {
 
112
                fprintf(stderr, "Can't find AstroMenaceMissionsList element in the: %s\n", "DATA/SCRIPT/list.xml");
 
113
                delete xmlDoc;
 
114
                return;
 
115
        }
 
116
 
 
117
 
 
118
        AllMission = 0;
 
119
        cXMLEntry *xmlEntry = xmlDoc->RootXMLEntry->FirstChild;
 
120
        while (xmlEntry)
 
121
        {
 
122
                // считаем, сколько миссий в файле
 
123
                if (!strcmp(xmlEntry->Name, "Mission")) AllMission++;
 
124
 
 
125
                // берем следующий элемент по порядку
 
126
                xmlEntry = xmlEntry->Next;
 
127
        }
 
128
 
 
129
        // резервируем память
 
130
        MissionTitle = new char*[AllMission];
 
131
        MissionDescr = new char*[AllMission];
 
132
        MissionIcon = new char*[AllMission];
 
133
        MissionFile = new char*[AllMission];
 
134
        MissionTitleColorR = new float[AllMission];
 
135
        MissionTitleColorG = new float[AllMission];
 
136
        MissionTitleColorB = new float[AllMission];
 
137
        MissionDescrColorR = new float[AllMission];
 
138
        MissionDescrColorG = new float[AllMission];
 
139
        MissionDescrColorB = new float[AllMission];
 
140
        MissionTitleType = new int[AllMission];
 
141
        MissionDescrType = new int[AllMission];
 
142
        // зануляем данные, на всякий случай
 
143
        for (int i=0; i<AllMission; i++)
 
144
        {
 
145
                MissionTitle[i] = 0;
 
146
                MissionDescr[i] = 0;
 
147
                MissionIcon[i] = 0;
 
148
                MissionFile[i] = 0;
 
149
                // установка типа, название (не ссылка)
 
150
                MissionTitleType[i] = 0;
 
151
                MissionDescrType[i] = 0;
 
152
                // установка цвета
 
153
                MissionTitleColorR[i] = 1.0f;MissionTitleColorG[i] = 0.5f;MissionTitleColorB[i] = 0.0f;
 
154
                MissionDescrColorR[i] = 1.0f;MissionDescrColorG[i] = 1.0f;MissionDescrColorB[i] = 1.0f;
 
155
        }
 
156
 
 
157
 
 
158
 
 
159
 
 
160
        // второй проход, заполняем массивы
 
161
        xmlEntry = xmlDoc->RootXMLEntry->FirstChild;
 
162
        int i = 0;
 
163
        while (xmlEntry)
 
164
        {
 
165
                // берем каждую миссию и смотрим настройки
 
166
                if (!strcmp(xmlEntry->Name, "Mission"))
 
167
                {
 
168
                        cXMLEntry *TMission = xmlEntry->FirstChild;
 
169
                        while (TMission)
 
170
                        {
 
171
                                // тайтл миссии
 
172
                                if (!strcmp(TMission->Name, "Title"))
 
173
                                {
 
174
                                        if (xmlDoc->GetEntryAttribute(TMission, "color") != 0)
 
175
                                        {
 
176
                                                switch (xmlDoc->iGetEntryAttribute(TMission, "color"))
 
177
                                                {
 
178
                                                        case 0: // белый
 
179
                                                                MissionTitleColorR[i]=1.0f;MissionTitleColorG[i]=1.0f;MissionTitleColorB[i]=1.0f;
 
180
                                                                break;
 
181
                                                        case 1: // желтый
 
182
                                                                MissionTitleColorR[i]=1.0f;MissionTitleColorG[i]=1.0f;MissionTitleColorB[i]=0.0f;
 
183
                                                                break;
 
184
                                                        case 2: // красный
 
185
                                                                MissionTitleColorR[i]=1.0f;MissionTitleColorG[i]=0.0f;MissionTitleColorB[i]=0.0f;
 
186
                                                                break;
 
187
                                                        case 3: // зеленый
 
188
                                                                MissionTitleColorR[i]=0.0f;MissionTitleColorG[i]=1.0f;MissionTitleColorB[i]=0.0f;
 
189
                                                                break;
 
190
                                                        case 4: // оранжевый
 
191
                                                                MissionTitleColorR[i]=1.0f;MissionTitleColorG[i]=0.5f;MissionTitleColorB[i]=0.0f;
 
192
                                                                break;
 
193
                                                        case 5: // серый,
 
194
                                                                MissionTitleColorR[i]=0.5f;MissionTitleColorG[i]=0.5f;MissionTitleColorB[i]=0.5f;
 
195
                                                                break;
 
196
                                                }
 
197
                                        }
 
198
                                        if (xmlDoc->GetEntryAttribute(TMission, "type") != 0) MissionTitleType[i] = xmlDoc->iGetEntryAttribute(TMission, "type");
 
199
 
 
200
                                        if (TMission->Content != 0)
 
201
                                        {
 
202
                                                MissionTitle[i] = new char[strlen(TMission->Content)+1];
 
203
                                                strcpy(MissionTitle[i], TMission->Content);
 
204
                                        }
 
205
                                }
 
206
                                else
 
207
                                // описание миссии
 
208
                                if (!strcmp(TMission->Name, "Descr"))
 
209
                                {
 
210
                                        if (xmlDoc->GetEntryAttribute(TMission, "color") != 0)
 
211
                                        {
 
212
                                                switch (xmlDoc->iGetEntryAttribute(TMission, "color"))
 
213
                                                {
 
214
                                                        case 0: // белый
 
215
                                                                MissionDescrColorR[i]=1.0f;MissionDescrColorG[i]=1.0f;MissionDescrColorB[i]=1.0f;
 
216
                                                                break;
 
217
                                                        case 1: // желтый
 
218
                                                                MissionDescrColorR[i]=1.0f;MissionDescrColorG[i]=1.0f;MissionDescrColorB[i]=0.0f;
 
219
                                                                break;
 
220
                                                        case 2: // красный
 
221
                                                                MissionDescrColorR[i]=1.0f;MissionDescrColorG[i]=0.0f;MissionDescrColorB[i]=0.0f;
 
222
                                                                break;
 
223
                                                        case 3: // зеленый
 
224
                                                                MissionDescrColorR[i]=0.0f;MissionDescrColorG[i]=1.0f;MissionDescrColorB[i]=0.0f;
 
225
                                                                break;
 
226
                                                        case 4: // оранжевый
 
227
                                                                MissionDescrColorR[i]=1.0f;MissionDescrColorG[i]=0.5f;MissionDescrColorB[i]=0.0f;
 
228
                                                                break;
 
229
                                                        case 5: // серый,
 
230
                                                                MissionDescrColorR[i]=0.5f;MissionDescrColorG[i]=0.5f;MissionDescrColorB[i]=0.5f;
 
231
                                                                break;
 
232
                                                }
 
233
                                        }
 
234
                                        if (xmlDoc->GetEntryAttribute(TMission, "type") != 0) MissionDescrType[i] = xmlDoc->iGetEntryAttribute(TMission, "type");
 
235
 
 
236
                                        if (TMission->Content != 0)
 
237
                                        {
 
238
                                                MissionDescr[i] = new char[strlen(TMission->Content)+1];
 
239
                                                strcpy(MissionDescr[i], TMission->Content);
 
240
                                        }
 
241
                                }
 
242
                                else
 
243
                                // иконка миссии
 
244
                                if (!strcmp(TMission->Name, "Icon"))
 
245
                                {
 
246
                                        if (TMission->Content != 0)
 
247
                                        {
 
248
                                                MissionIcon[i] = new char[strlen(TMission->Content)+1];
 
249
                                                strcpy(MissionIcon[i], TMission->Content);
 
250
                                        }
 
251
                                }
 
252
                                else
 
253
                                // файл миссии
 
254
                                if (!strcmp(TMission->Name, "File"))
 
255
                                {
 
256
                                        if (TMission->Content != 0)
 
257
                                        {
 
258
                                                MissionFile[i] = new char[strlen(TMission->Content)+1];
 
259
                                                strcpy(MissionFile[i], TMission->Content);
 
260
                                        }
 
261
                                }
 
262
 
 
263
 
 
264
                                // берем следующий элемент
 
265
                                TMission = TMission->Next;
 
266
                        }
 
267
 
 
268
                        i++;
 
269
                }
 
270
                else
 
271
                // проверяем музыку, возможно есть необходимость что-то заменить
 
272
                if (!strcmp(xmlEntry->Name, "GameMainMusic"))
 
273
                {
 
274
                        eFILE *file = 0;
 
275
                        file = vw_fopen(xmlEntry->Content);
 
276
                        if (file != 0)
 
277
                        {
 
278
                                strcpy(GameMainMusic, xmlEntry->Content);
 
279
                                GameMainMusicSet = true;
 
280
                                vw_fclose(file);
 
281
                                fprintf(stderr, "New GameMainMusic music file %s\n", xmlEntry->Content);
 
282
                        }
 
283
                        else
 
284
                                fprintf(stderr, "Unable to find music file %s\n", xmlEntry->Content);
 
285
                }
 
286
                else
 
287
                if (!strcmp(xmlEntry->Name, "GameBossMusic"))
 
288
                {
 
289
                        eFILE *file = 0;
 
290
                        file = vw_fopen(xmlEntry->Content);
 
291
                        if (file != 0)
 
292
                        {
 
293
                                strcpy(GameBossMusic, xmlEntry->Content);
 
294
                                GameBossMusicSet = true;
 
295
                                vw_fclose(file);
 
296
                                fprintf(stderr, "New GameBossMusic music file %s\n", xmlEntry->Content);
 
297
                        }
 
298
                        else
 
299
                                fprintf(stderr, "Unable to find music file %s\n", xmlEntry->Content);
 
300
                }
 
301
                else
 
302
                if (!strcmp(xmlEntry->Name, "GameDeathMusic"))
 
303
                {
 
304
                        eFILE *file = 0;
 
305
                        file = vw_fopen(xmlEntry->Content);
 
306
                        if (file != 0)
 
307
                        {
 
308
                                strcpy(GameDeathMusic, xmlEntry->Content);
 
309
                                GameDeathMusicSet = true;
 
310
                                vw_fclose(file);
 
311
                                fprintf(stderr, "New GameDeathMusic music file %s\n", xmlEntry->Content);
 
312
                        }
 
313
                        else
 
314
                                fprintf(stderr, "Unable to find music file %s\n", xmlEntry->Content);
 
315
                }
 
316
 
 
317
 
 
318
                // берем следующий элемент по порядку
 
319
                xmlEntry = xmlEntry->Next;
 
320
        }
 
321
 
 
322
 
 
323
        // чистим память, со скриптом работать больше не надо
 
324
        delete xmlDoc;
 
325
 
 
326
 
 
327
        // на одну меньше, т.к. это номер миссии, а не кол-во
 
328
        MissionLimitation = AllMission-1;
 
329
 
 
330
}
 
331
 
 
332
 
 
333
 
 
334
 
 
335
//------------------------------------------------------------------------------------
 
336
// удаление данных списка миссий
 
337
//------------------------------------------------------------------------------------
 
338
void MissionsListRelease()
 
339
{
 
340
        if (MissionFile != 0)
 
341
        {
 
342
                for (int i=0; i<AllMission; i++)
 
343
                {
 
344
                        delete [] MissionFile[i]; MissionFile[i] = 0;
 
345
                }
 
346
                delete [] MissionFile; MissionFile = 0;
 
347
        }
 
348
 
 
349
        if (MissionTitle != 0)
 
350
        {
 
351
                for (int i=0; i<AllMission; i++)
 
352
                {
 
353
                        delete [] MissionTitle[i]; MissionTitle[i] = 0;
 
354
                }
 
355
                delete [] MissionTitle; MissionTitle = 0;
 
356
        }
 
357
 
 
358
        if (MissionDescr != 0)
 
359
        {
 
360
                for (int i=0; i<AllMission; i++)
 
361
                {
 
362
                        delete [] MissionDescr[i]; MissionDescr[i] = 0;
 
363
                }
 
364
                delete [] MissionDescr; MissionDescr = 0;
 
365
        }
 
366
 
 
367
        if (MissionIcon != 0)
 
368
        {
 
369
                for (int i=0; i<AllMission; i++)
 
370
                {
 
371
                        delete [] MissionIcon[i]; MissionIcon[i] = 0;
 
372
                }
 
373
                delete [] MissionIcon; MissionIcon = 0;
 
374
        }
 
375
 
 
376
        if (MissionTitleColorR != 0){delete [] MissionTitleColorR; MissionTitleColorR = 0;}
 
377
        if (MissionTitleColorG != 0){delete [] MissionTitleColorG; MissionTitleColorG = 0;}
 
378
        if (MissionTitleColorB != 0){delete [] MissionTitleColorB; MissionTitleColorB = 0;}
 
379
        if (MissionDescrColorR != 0){delete [] MissionDescrColorR; MissionDescrColorR = 0;}
 
380
        if (MissionDescrColorG != 0){delete [] MissionDescrColorG; MissionDescrColorG = 0;}
 
381
        if (MissionDescrColorB != 0){delete [] MissionDescrColorB; MissionDescrColorB = 0;}
 
382
        if (MissionTitleType != 0){delete [] MissionTitleType; MissionTitleType = 0;}
 
383
        if (MissionDescrType != 0){delete [] MissionDescrType; MissionDescrType = 0;}
 
384
}
 
385
 
 
386
 
 
387
 
 
388
 
 
389
 
 
390
 
 
391
 
 
392
 
 
393
 
 
394
 
 
395
 
 
396
 
 
397
//------------------------------------------------------------------------------------
 
398
// выбор миссии
 
399
//------------------------------------------------------------------------------------
 
400
void MissionMenu()
 
401
{
 
402
 
 
403
        // проверка ограничения
 
404
        if (Setup.Profile[CurrentProfile].OpenLevelNum > MissionLimitation)
 
405
                Setup.Profile[CurrentProfile].OpenLevelNum = MissionLimitation;
 
406
 
 
407
 
 
408
 
 
409
        RECT SrcRest, DstRest;
 
410
        SetRect(&SrcRest,2,2,863-2,484-2);
 
411
        SetRect(&DstRest,Setup.iAspectRatioWidth/2-427,175-15,Setup.iAspectRatioWidth/2-427+863-4,175-15+484-4);
 
412
        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName("DATA/MENU/panel800_444_back.tga"), true, 0.9f*MenuContentTransp);
 
413
 
 
414
 
 
415
 
 
416
        int X1 = Setup.iAspectRatioWidth/2 - 372;
 
417
        int Y1 = 215;
 
418
 
 
419
 
 
420
        // подложка
 
421
        SetRect(&SrcRest,0,0,2,2);
 
422
        SetRect(&DstRest,X1-2,Y1-2,X1+2+750,Y1+2+320);
 
423
        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.2f*MenuContentTransp);
 
424
        SetRect(&DstRest,X1,Y1,X1+750,Y1+320);
 
425
        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.5f*MenuContentTransp);
 
426
 
 
427
 
 
428
 
 
429
 
 
430
 
 
431
 
 
432
        // подсвечиваем выбранный уровень
 
433
        if (CurrentMission != -1)
 
434
        if (StartMission<=CurrentMission && CurrentMission<=EndMission)
 
435
        {
 
436
                int ShowLine = CurrentMission;
 
437
                while (ShowLine>4) ShowLine -= 5;
 
438
 
 
439
                int Y1 = 215 + 64*ShowLine;
 
440
 
 
441
                SetRect(&SrcRest,0,0,2,2);
 
442
                SetRect(&DstRest,X1+1,Y1+1,X1+749,Y1+63);
 
443
                vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName("DATA/MENU/whitepoint.tga"), true, 0.1f*MenuContentTransp);
 
444
        }
 
445
 
 
446
 
 
447
 
 
448
 
 
449
        // выводим миссии текущего листа
 
450
        int TMPSoundOnMissionID = -1;
 
451
        for (int i=StartMission; i<=EndMission; i++)
 
452
        if (AllMission > i) // на тот случай, если у нас кол-во миссий не делится на 5
 
453
        {
 
454
                // если не можем выбирать...
 
455
                if (i > Setup.Profile[CurrentProfile].OpenLevelNum)
 
456
                {
 
457
                        SetRect(&SrcRest,0,0,64,64);
 
458
                        SetRect(&DstRest,X1+2,Y1+2,X1+62,Y1+62);
 
459
 
 
460
                        if (MissionIcon[i] != 0)
 
461
                                vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName(MissionIcon[i]), true, 0.3f*MenuContentTransp);
 
462
 
 
463
                        int SizeI = vw_FontSize(vw_GetText(MissionTitle[i]));
 
464
                        if (SizeI < 750-30-64)
 
465
                        {
 
466
                                if (MissionTitleType[i] == 1)
 
467
                                        vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionTitle[i]));
 
468
                                else
 
469
                                        vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, MissionTitle[i]);
 
470
                        }
 
471
                        else
 
472
                        {
 
473
                                if (MissionTitleType[i] == 1)
 
474
                                        vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionTitle[i]));
 
475
                                else
 
476
                                        vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, MissionTitle[i]);
 
477
                        }
 
478
 
 
479
                        SizeI = vw_FontSize(vw_GetText(MissionDescr[i]));
 
480
                        if (SizeI < 750-30-64)
 
481
                        {
 
482
                                if (MissionDescrType[i] == 1)
 
483
                                        vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionDescr[i]));
 
484
                                else
 
485
                                        vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, MissionDescr[i]);
 
486
                        }
 
487
                        else
 
488
                        {
 
489
                                if (MissionDescrType[i] == 1)
 
490
                                        vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionDescr[i]));
 
491
                                else
 
492
                                        vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, MissionDescr[i]);
 
493
                        }
 
494
                }
 
495
 
 
496
 
 
497
                SetRect(&DstRest,X1,Y1+1,X1+750,Y1+64);
 
498
                if (i <= Setup.Profile[CurrentProfile].OpenLevelNum)
 
499
                {
 
500
                        // работаем с клавиатурой
 
501
                        if ((MenuContentTransp >= 0.99f) && !isDialogBoxDrawing()) CurrentActiveMenuElement++;
 
502
                        bool InFocusByKeyboard = false;
 
503
                        if (CurrentKeyboardSelectMenuElement > 0)
 
504
                        {
 
505
                                if (CurrentKeyboardSelectMenuElement == CurrentActiveMenuElement)
 
506
                                {
 
507
                                        InFocusByKeyboard = true;
 
508
                                }
 
509
                        }
 
510
 
 
511
 
 
512
                        if ((vw_OnRect(&DstRest) || InFocusByKeyboard) && !isDialogBoxDrawing())
 
513
                        {
 
514
                                TMPSoundOnMissionID = i;
 
515
                                CurrentCursorStatus = 1;
 
516
                                // если только встали - нужно звуком это показать
 
517
                                if (SoundOnMissionID != i)
 
518
                                {
 
519
                                        SoundOnMissionID = i;
 
520
                                        // если задействуем клавиатуру - неиграем тут звук
 
521
                                        if (CurrentKeyboardSelectMenuElement == 0) Audio_PlaySound2D(5,1.0f);
 
522
                                }
 
523
 
 
524
                                // если стоим над ним...
 
525
                                SetRect(&SrcRest,0,0,64,64);
 
526
                                SetRect(&DstRest,X1,Y1,X1+64,Y1+64);
 
527
                                if (MissionIcon != 0)
 
528
                                        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName(MissionIcon[i]), true, MenuContentTransp);
 
529
 
 
530
 
 
531
                                int SizeI = vw_FontSize(vw_GetText(MissionTitle[i]));
 
532
                                if (SizeI < 750-30-64)
 
533
                                {
 
534
                                        if (MissionTitleType[i] == 1)
 
535
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, vw_GetText(MissionTitle[i]));
 
536
                                        else
 
537
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, MissionTitle[i]);
 
538
                                }
 
539
                                else
 
540
                                {
 
541
                                        if (MissionTitleType[i] == 1)
 
542
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, vw_GetText(MissionTitle[i]));
 
543
                                        else
 
544
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, MissionTitle[i]);
 
545
                                }
 
546
                                SizeI = vw_FontSize(vw_GetText(MissionDescr[i]));
 
547
                                if (SizeI < 750-30-64)
 
548
                                {
 
549
                                        if (MissionDescrType[i] == 1)
 
550
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, vw_GetText(MissionDescr[i]));
 
551
                                        else
 
552
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, MissionDescr[i]);
 
553
 
 
554
                                }
 
555
                                else
 
556
                                {
 
557
                                        if (MissionDescrType[i] == 1)
 
558
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, vw_GetText(MissionDescr[i]));
 
559
                                        else
 
560
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, MissionDescr[i]);
 
561
                                }
 
562
 
 
563
 
 
564
 
 
565
                                if (CurrentMission != i)
 
566
                                {
 
567
                                        SetRect(&SrcRest,0,0,2,2);
 
568
                                        SetRect(&DstRest,X1+64,Y1+1,X1+749,Y1+63);
 
569
                                        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName("DATA/MENU/whitepoint.tga"), true, 0.1f*MenuContentTransp);
 
570
                                }
 
571
                                if (vw_GetWindowLBMouse(true) || (InFocusByKeyboard && (vw_GetKeys(SDLK_KP_ENTER) || vw_GetKeys(SDLK_RETURN))))
 
572
                                {
 
573
 
 
574
                                        CurrentMission = i;
 
575
                                        Setup.Profile[CurrentProfile].LastMission = CurrentMission;
 
576
                                        Audio_PlaySound2D(6,1.0f);
 
577
                                        if (InFocusByKeyboard)
 
578
                                        {
 
579
                                                vw_SetKeys(SDLK_KP_ENTER, false);
 
580
                                                vw_SetKeys(SDLK_RETURN, false);
 
581
                                        }
 
582
                                }
 
583
 
 
584
                                if (vw_GetWindowLBDoubleMouse(true))
 
585
                                {
 
586
                                        CurrentMission = i;
 
587
                                        Setup.Profile[CurrentProfile].LastMission = CurrentMission;
 
588
                                        // если уже играли в эту миссию
 
589
                                        if (Setup.Profile[CurrentProfile].MissionReplayCount[CurrentMission] > 0)
 
590
                                        {
 
591
                                                if (Setup.NeedShowHint[5])
 
592
                                                {
 
593
                                                        SetCurrentDialogBox(14);
 
594
                                                }
 
595
                                                else
 
596
                                                {
 
597
                                                        ComBuffer = WORKSHOP;
 
598
                                                        CurrentWorkshop = 3;
 
599
                                                        WorkshopCreate();
 
600
                                                }
 
601
                                        }
 
602
                                        else
 
603
                                        {
 
604
                                                ComBuffer = WORKSHOP;
 
605
                                                CurrentWorkshop = 3;
 
606
                                                WorkshopCreate();
 
607
                                        }
 
608
                                }
 
609
                        }
 
610
                        else
 
611
                        {
 
612
                                // если не стоим над ним, но можем выбирать
 
613
                                SetRect(&SrcRest,0,0,64,64);
 
614
                                SetRect(&DstRest,X1+2,Y1+2,X1+62,Y1+62);
 
615
                                if (MissionIcon != 0)
 
616
                                        vw_DrawTransparent(&DstRest, &SrcRest, vw_FindTextureByName(MissionIcon[i]), true, 0.8f*MenuContentTransp);
 
617
 
 
618
                                int SizeI = vw_FontSize(vw_GetText(MissionTitle[i]));
 
619
                                if (SizeI < 750-30-64)
 
620
                                {
 
621
                                        if (MissionTitleType[i] == 1)
 
622
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionTitle[i]));
 
623
                                        else
 
624
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, MissionTitle[i]);
 
625
                                }
 
626
                                else
 
627
                                {
 
628
                                        if (MissionTitleType[i] == 1)
 
629
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionTitle[i]));
 
630
                                        else
 
631
                                                vw_DrawFont(X1+20+64, Y1+9, -650, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, MissionTitle[i]);
 
632
                                }
 
633
 
 
634
                                SizeI = vw_FontSize(vw_GetText(MissionDescr[i]));
 
635
                                if (SizeI < 750-30-64)
 
636
                                {
 
637
                                        if (MissionDescrType[i] == 1)
 
638
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionDescr[i]));
 
639
                                        else
 
640
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, MissionDescr[i]);
 
641
 
 
642
                                }
 
643
                                else
 
644
                                {
 
645
                                        if (MissionDescrType[i] == 1)
 
646
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionDescr[i]));
 
647
                                        else
 
648
                                                vw_DrawFont(X1+20+64, Y1+33, -650, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, MissionDescr[i]);
 
649
                                }
 
650
                        }
 
651
                }
 
652
 
 
653
                Y1 += 64;
 
654
        }
 
655
        // если не стоим над профайлами - нужно сбросить флаг
 
656
        if (TMPSoundOnMissionID == -1) SoundOnMissionID = -1;
 
657
 
 
658
 
 
659
 
 
660
 
 
661
 
 
662
 
 
663
 
 
664
 
 
665
 
 
666
 
 
667
 
 
668
 
 
669
 
 
670
 
 
671
        // чтобы не сбивать.. устанавливаем "железно"
 
672
        Y1 = 218+320+24;
 
673
        int AllPagesQuant = AllMission/5;
 
674
        if (AllMission/5 < (AllMission*1.0f)/5.0f) AllPagesQuant++;
 
675
 
 
676
        int AllCurPage = StartMission/5 + 1;
 
677
        vw_DrawFont(X1, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, vw_GetText("3_Page_%i_of_%i"), AllCurPage, AllPagesQuant);
 
678
 
 
679
 
 
680
 
 
681
        bool Off = false;
 
682
        if (AllCurPage == 1) Off = true;
 
683
        if (DrawButton200_2(X1+616-200-30-72, Y1-6, vw_GetText("1_Page_Up"), MenuContentTransp, Off))
 
684
        {
 
685
                StartMission -= 5;
 
686
                EndMission -= 5;
 
687
        }
 
688
        Off = false;
 
689
        if (AllCurPage == AllPagesQuant) Off = true;
 
690
        if (DrawButton200_2(X1+616-72, Y1-6, vw_GetText("1_Page_Down"), MenuContentTransp, Off))
 
691
        {
 
692
                StartMission += 5;
 
693
                EndMission += 5;
 
694
        }
 
695
 
 
696
 
 
697
 
 
698
 
 
699
 
 
700
 
 
701
 
 
702
        int X = Setup.iAspectRatioWidth/2 - 284;
 
703
        int Y = 165+100*5;
 
704
        if (DrawButton256(X,Y, vw_GetText("1_BACK"), MenuContentTransp, &Button10Transp, &LastButton10UpdateTime))
 
705
        {
 
706
                ComBuffer = PROFILE;
 
707
        }
 
708
 
 
709
        Off = true;
 
710
        if (CurrentMission >= 0) Off = false;
 
711
        X = Setup.iAspectRatioWidth/2 + 28;
 
712
        if (DrawButton256(X,Y, vw_GetText("1_NEXT"), MenuContentTransp, &Button11Transp, &LastButton11UpdateTime, Off))
 
713
        {
 
714
                // если уже играли в эту миссию
 
715
                if (Setup.Profile[CurrentProfile].MissionReplayCount[CurrentMission] > 0)
 
716
                {
 
717
                        if (Setup.NeedShowHint[5])
 
718
                        {
 
719
                                SetCurrentDialogBox(14);
 
720
                        }
 
721
                        else
 
722
                        {
 
723
                                ComBuffer = WORKSHOP;
 
724
                                CurrentWorkshop = 3;
 
725
                                WorkshopCreate();
 
726
                        }
 
727
                }
 
728
                else
 
729
                {
 
730
                        ComBuffer = WORKSHOP;
 
731
                        CurrentWorkshop = 3;
 
732
                        WorkshopCreate();
 
733
                }
 
734
        }
 
735
 
 
736
 
 
737
 
 
738
 
 
739
}