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

« back to all changes in this revision

Viewing changes to AstroMenaceSource/Object3D/Object3DManager.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 "Object3D.h"
 
30
#include "../Game.h"
 
31
 
 
32
 
 
33
 
 
34
//-----------------------------------------------------------------------------
 
35
// Удаляем все объекты в списке
 
36
//-----------------------------------------------------------------------------
 
37
void ReleaseAllObject3D()
 
38
{
 
39
        // корабли
 
40
        ReleaseAllSpaceShip();
 
41
        // оружие
 
42
        ReleaseAllWeapon();
 
43
        // наземные объекты
 
44
        ReleaseAllGroundObject();
 
45
        // снаряды
 
46
        ReleaseAllProjectile();
 
47
        // космические объекты
 
48
        ReleaseAllSpaceObject();
 
49
        // взрывы
 
50
        ReleaseAllExplosion();
 
51
}
 
52
 
 
53
 
 
54
 
 
55
 
 
56
 
 
57
 
 
58
//-----------------------------------------------------------------------------
 
59
// Прорисовываем все объекты
 
60
//-----------------------------------------------------------------------------
 
61
void DrawAllObject3D(int DrawType)
 
62
{
 
63
        // ставим всегда меньше или равно!
 
64
        vw_DepthTest(true, RI_LESSEQUAL);
 
65
 
 
66
 
 
67
        bool ShadowMap = false;
 
68
 
 
69
        if (Setup.ShadowMap > 0)
 
70
        {
 
71
                switch (DrawType)
 
72
                {
 
73
                        // меню
 
74
                        case 1: ShadowMap_StartRenderToFBO(VECTOR3D(50,-5,-120), 120.0f, 500.0f); break;
 
75
                        // игра
 
76
                        case 2: ShadowMap_StartRenderToFBO(VECTOR3D(0,0,160), 600.0f, 800.0f); break;
 
77
                }
 
78
 
 
79
                DrawAllSpaceShip(true, 0);
 
80
                DrawAllWeapon(true, 0);
 
81
                DrawAllGroundObject(true, 0);
 
82
                DrawAllProjectile(true, 0);
 
83
                DrawAllExplosion(true);
 
84
                DrawAllSpaceObject(true, 0);
 
85
 
 
86
                ShadowMap_EndRenderToFBO();
 
87
 
 
88
                // работаем с 3-м стейджем текстур (первые два у нас заняты)
 
89
                ShadowMap = true;
 
90
                ShadowMap_StartFinalRender();
 
91
        }
 
92
 
 
93
 
 
94
        // космические объекты
 
95
        DrawAllSpaceObject(false, ShadowMap);
 
96
        // корабли
 
97
        DrawAllSpaceShip(false, ShadowMap);
 
98
        // оружие
 
99
        DrawAllWeapon(false, ShadowMap);
 
100
        // наземные объекты
 
101
        DrawAllGroundObject(false, ShadowMap);
 
102
        // снаряды
 
103
        DrawAllProjectile(false, ShadowMap);
 
104
 
 
105
 
 
106
        if (Setup.ShadowMap > 0)
 
107
        {
 
108
                ShadowMap_EndFinalRender();
 
109
        }
 
110
 
 
111
        // взрывы
 
112
        DrawAllExplosion(false);
 
113
 
 
114
 
 
115
        // эффекты - самые последние в прорисовке!
 
116
        vw_DrawAllParticleSystems();
 
117
 
 
118
 
 
119
 
 
120
 
 
121
 
 
122
 
 
123
 
 
124
        // второй слой тайловой анимации "пыли"
 
125
        StarSystemDrawSecondLayer(DrawType);
 
126
 
 
127
        // эмуляция гаммы, фактически это простой пост эффект, всегда самый последний в прорисовке
 
128
        if( Setup.Brightness != 5 )
 
129
        {
 
130
 
 
131
                float *buff = 0;
 
132
                // RI_2f_XY | RI_1_TEX
 
133
                buff = new float[4*4]; if (buff == 0) return;
 
134
 
 
135
                int k=0;
 
136
 
 
137
                buff[k++] = 0.0f;
 
138
                buff[k++] = 0.0f;
 
139
                buff[k++] = 1.0f;
 
140
                buff[k++] = 0.0f;
 
141
 
 
142
                buff[k++] = 0.0f;
 
143
                buff[k++] = Setup.fAspectRatioHeight;
 
144
                buff[k++] = 1.0f;
 
145
                buff[k++] = 1.0f;
 
146
 
 
147
                buff[k++] = Setup.fAspectRatioWidth;
 
148
                buff[k++] = 0.0f;
 
149
                buff[k++] = 0.0f;
 
150
                buff[k++] = 0.0f;
 
151
 
 
152
                buff[k++] = Setup.fAspectRatioWidth;
 
153
                buff[k++] = Setup.fAspectRatioHeight;
 
154
                buff[k++] = 0.0f;
 
155
                buff[k++] = 1.0f;
 
156
 
 
157
 
 
158
                eTexture *TileTexture = vw_FindTextureByName("DATA/MENU/whitepoint.tga");
 
159
                vw_SetTexture(0, TileTexture);
 
160
 
 
161
                float BrightnessF = 1.0f + (Setup.Brightness - 5)/5.0f;
 
162
 
 
163
                if( BrightnessF > 1.0f )
 
164
                {
 
165
                        vw_SetTextureBlend(true, RI_BLEND_DESTCOLOR, RI_BLEND_ONE);
 
166
                        vw_SetColor(BrightnessF-1.0f, BrightnessF-1.0f, BrightnessF-1.0f, 1.0f);
 
167
                }
 
168
                else
 
169
                {
 
170
                        vw_SetTextureBlend(true, RI_BLEND_ZERO, RI_BLEND_SRCCOLOR);
 
171
                        vw_SetColor(BrightnessF, BrightnessF, BrightnessF, 1.0f);
 
172
                }
 
173
 
 
174
                vw_Start2DMode(-1,1);
 
175
                vw_SendVertices(RI_TRIANGLE_STRIP, 4, RI_2f_XY | RI_1_TEX, buff, 4*sizeof(float));
 
176
                vw_End2DMode();
 
177
 
 
178
                vw_SetTextureBlend(false, 0, 0);
 
179
                vw_BindTexture(0, 0);
 
180
                if (buff != 0){delete [] buff; buff = 0;}
 
181
        }
 
182
}
 
183
 
 
184
 
 
185
 
 
186
 
 
187
 
 
188
 
 
189
 
 
190
 
 
191
 
 
192
//-----------------------------------------------------------------------------
 
193
// Проверяем все объекты, обновляем данные
 
194
//-----------------------------------------------------------------------------
 
195
void UpdateAllObject3D(float Time)
 
196
{
 
197
        // проверяем корабли
 
198
        UpdateAllSpaceShip(Time);
 
199
        // проверяем все оружие
 
200
        UpdateAllWeapon(Time);
 
201
        // наземные объекты
 
202
        UpdateAllGroundObject(Time);
 
203
        // снаряды
 
204
        UpdateAllProjectile(Time);
 
205
        // космические объекты
 
206
        UpdateAllSpaceObject(Time);
 
207
        // взрывы
 
208
        UpdateAllExplosion(Time);
 
209
}
 
210
 
 
211
 
 
212
 
 
213
 
 
214
 
 
215
 
 
216