1 /*
2  *  This file is part of Dune Legacy.
3  *
4  *  Dune Legacy is free software: you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation, either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  Dune Legacy is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with Dune Legacy.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef GFXMANAGER_H
19 #define GFXMANAGER_H
20 
21 #include <SDL.h>
22 #include "Animation.h"
23 #include "Shpfile.h"
24 #include "Wsafile.h"
25 #include <DataTypes.h>
26 
27 #include <string>
28 #include <array>
29 #include <memory>
30 
31 #define NUM_TERRAIN_TILES_X 11
32 #define NUM_TERRAIN_TILES_Y 8
33 #define NUM_MAPCHOICEPIECES 28
34 #define NUM_WINDTRAP_ANIMATIONS (2*STRUCTURE_ANIMATIONTIMER+4)
35 #define NUM_WINDTRAP_ANIMATIONS_PER_ROW 10
36 #define NUM_STATIC_ANIMATIONS_PER_ROW 7
37 
38 // ObjPics
39 typedef enum {
40     ObjPic_Tank_Base,
41     ObjPic_Tank_Gun,
42     ObjPic_Siegetank_Base,
43     ObjPic_Siegetank_Gun,
44     ObjPic_Devastator_Base,
45     ObjPic_Devastator_Gun,
46     ObjPic_Sonictank_Gun,
47     ObjPic_Launcher_Gun,
48     ObjPic_Quad,
49     ObjPic_Trike,
50     ObjPic_Harvester,
51     ObjPic_Harvester_Sand,
52     ObjPic_MCV,
53     ObjPic_Carryall,
54     ObjPic_CarryallShadow,
55     ObjPic_Frigate,
56     ObjPic_FrigateShadow,
57     ObjPic_Ornithopter,
58     ObjPic_OrnithopterShadow,
59     ObjPic_Trooper,
60     ObjPic_Troopers,
61     ObjPic_Soldier,
62     ObjPic_Infantry,
63     ObjPic_Saboteur,
64     ObjPic_Sandworm,
65     ObjPic_ConstructionYard,
66     ObjPic_Windtrap,
67     ObjPic_Refinery,
68     ObjPic_Barracks,
69     ObjPic_WOR,
70     ObjPic_Radar,
71     ObjPic_LightFactory,
72     ObjPic_Silo,
73     ObjPic_HeavyFactory,
74     ObjPic_HighTechFactory,
75     ObjPic_IX,
76     ObjPic_Palace,
77     ObjPic_RepairYard,
78     ObjPic_Starport,
79     ObjPic_GunTurret,
80     ObjPic_RocketTurret,
81     ObjPic_Wall,
82     ObjPic_Bullet_SmallRocket,
83     ObjPic_Bullet_MediumRocket,
84     ObjPic_Bullet_LargeRocket,
85     ObjPic_Bullet_Small,
86     ObjPic_Bullet_Medium,
87     ObjPic_Bullet_Large,
88     ObjPic_Bullet_Sonic,
89     ObjPic_Bullet_SonicTemp,
90     ObjPic_Hit_Gas,
91     ObjPic_Hit_ShellSmall,
92     ObjPic_Hit_ShellMedium,
93     ObjPic_Hit_ShellLarge,
94     ObjPic_ExplosionSmall,
95     ObjPic_ExplosionMedium1,
96     ObjPic_ExplosionMedium2,
97     ObjPic_ExplosionLarge1,
98     ObjPic_ExplosionLarge2,
99     ObjPic_ExplosionSmallUnit,
100     ObjPic_ExplosionFlames,
101     ObjPic_ExplosionSpiceBloom,
102     ObjPic_DeadInfantry,
103     ObjPic_DeadAirUnit,
104     ObjPic_Smoke,
105     ObjPic_SandwormShimmerMask,
106     ObjPic_SandwormShimmerTemp,
107     ObjPic_Terrain,
108     ObjPic_DestroyedStructure,
109     ObjPic_RockDamage,
110     ObjPic_SandDamage,
111     ObjPic_Terrain_Hidden,
112     ObjPic_Terrain_HiddenFog,
113     ObjPic_Terrain_Tracks,
114     ObjPic_Star,
115     NUM_OBJPICS
116 } ObjPic_enum;
117 
118 static const std::array<std::string, NUM_OBJPICS> ObjPicNames =  { { "Tank_Base", "Tank_Gun", "Siegetank_Base", "Siegetank_Gun", "Devastator_Base",
119     "Devastator_Gun", "Sonictank_Gun", "Launcher_Gun", "Quad", "Trike", "Harvester", "Harvester_Sand", "MCV", "Carryall", "CarryallShadow",
120     "Frigate", "FrigateShadow", "Ornithopter", "OrnithopterShadow", "Trooper", "Troopers", "Soldier", "Infantry", "Saboteur", "Sandworm",
121     "ConstructionYard", "Windtrap", "Refinery", "Barracks", "WOR", "Radar", "LightFactory", "Silo", "HeavyFactory", "HighTechFactory",
122     "IX", "Palace", "RepairYard", "Starport", "GunTurret", "RocketTurret", "Wall",
123     "Bullet_SmallRocket", "Bullet_MediumRocket", "Bullet_LargeRocket", "Bullet_Small", "Bullet_Medium", "Bullet_Large", "Bullet_Sonic",
124     "Bullet_SonicTemp", "Hit_Gas", "Hit_ShellSmall", "Hit_ShellMedium", "Hit_ShellLarge", "ExplosionSmall", "ExplosionMedium1",
125     "ExplosionMedium2", "ExplosionLarge1", "ExplosionLarge2", "ExplosionSmallUnit", "ExplosionFlames", "ExplosionSpiceBloom",
126     "DeadInfantry", "DeadAirUnit", "Smoke", "SandwormShimmerMask", "SandwormShimmerTemp", "Terrain", "DestroyedStructure", "RockDamage",
127     "SandDamage", "Terrain_Hidden", "Terrain_HiddenFog", "Terrain_Tracks", "Star" } };
128 
129 #define GROUNDUNIT_ROW(i) (i+2)|TILE_NORMAL,(i+1)|TILE_NORMAL,i|TILE_NORMAL,(i+1)|TILE_FLIPV,(i+2)|TILE_FLIPV,(i+3)|TILE_FLIPV, (i+4)|TILE_NORMAL,(i+3)|TILE_NORMAL
130 #define AIRUNIT_ROW(i) (i+2)|TILE_NORMAL,(i+1)|TILE_NORMAL,i|TILE_NORMAL,(i+1)|TILE_FLIPV,(i+2)|TILE_FLIPV,(i+1)|TILE_ROTATE, i|TILE_FLIPH,(i+1)|TILE_FLIPH
131 #define ORNITHOPTER_ROW(i) (i+6)|TILE_NORMAL,(i+3)|TILE_NORMAL,i|TILE_NORMAL,(i+3)|TILE_FLIPV,(i+6)|TILE_FLIPV,(i+3)|TILE_ROTATE, i|TILE_FLIPH,(i+3)|TILE_FLIPH
132 #define INFANTRY_ROW(i) (i+3)|TILE_NORMAL,i|TILE_NORMAL,(i+3)|TILE_FLIPV,(i+6)|TILE_NORMAL
133 #define MULTIINFANTRY_ROW(i) (i+4)|TILE_NORMAL,i|TILE_NORMAL,(i+4)|TILE_FLIPV,(i+8)|TILE_NORMAL
134 #define HARVESTERSAND_ROW(i) (i+6)|TILE_NORMAL,(i+3)|TILE_NORMAL,i|TILE_NORMAL,(i+3)|TILE_FLIPV,(i+6)|TILE_FLIPV,(i+9)|TILE_FLIPV,(i+12)|TILE_NORMAL,(i+9)|TILE_NORMAL
135 #define ROCKET_ROW(i)   (i+4)|TILE_NORMAL,(i+3)|TILE_NORMAL,(i+2)|TILE_NORMAL,(i+1)|TILE_NORMAL,i|TILE_NORMAL,(i+1)|TILE_FLIPV,(i+2)|TILE_FLIPV,(i+3)|TILE_FLIPV, \
136                         (i+4)|TILE_FLIPV,(i+3)|TILE_ROTATE,(i+2)|TILE_ROTATE, (i+1)|TILE_ROTATE,i|TILE_FLIPH,(i+1)|TILE_FLIPH,(i+2)|TILE_FLIPH,(i+3)|TILE_FLIPH
137 
138 
139 // SmallDetailPics
140 typedef enum {
141     Picture_Barracks,
142     Picture_ConstructionYard,
143     Picture_Carryall,
144     Picture_Devastator,
145     Picture_Deviator,
146     Picture_DeathHand,
147     Picture_Fremen,
148     Picture_Frigate,
149     Picture_GunTurret,
150     Picture_Harvester,
151     Picture_HeavyFactory,
152     Picture_HighTechFactory,
153     Picture_Soldier,
154     Picture_IX,
155     Picture_Launcher,
156     Picture_LightFactory,
157     Picture_MCV,
158     Picture_Ornithopter,
159     Picture_Palace,
160     Picture_Quad,
161     Picture_Radar,
162     Picture_RaiderTrike,
163     Picture_Refinery,
164     Picture_RepairYard,
165     Picture_RocketTurret,
166     Picture_Saboteur,
167     Picture_Sandworm,
168     Picture_Sardaukar,
169     Picture_SiegeTank,
170     Picture_Silo,
171     Picture_Slab1,
172     Picture_Slab4,
173     Picture_SonicTank,
174     Picture_Special,
175     Picture_StarPort,
176     Picture_Tank,
177     Picture_Trike,
178     Picture_Trooper,
179     Picture_Wall,
180     Picture_WindTrap,
181     Picture_WOR,
182     NUM_SMALLDETAILPICS
183 } SmallDetailPics_Enum;
184 
185 // tiny pictures used for tutorial hints (has the same order as ItemID_enum, except the first entry)
186 typedef enum {
187     TinyPicture_Spice = 0,
188     TinyPicture_Barracks = 1,
189     TinyPicture_ConstructionYard = 2,
190     TinyPicture_GunTurret = 3,
191     TinyPicture_HeavyFactory = 4,
192     TinyPicture_HighTechFactory = 5,
193     TinyPicture_IX = 6,
194     TinyPicture_LightFactory = 7,
195     TinyPicture_Palace = 8,
196     TinyPicture_Radar = 9,
197     TinyPicture_Refinery = 10,
198     TinyPicture_RepairYard = 11,
199     TinyPicture_RocketTurret = 12,
200     TinyPicture_Silo = 13,
201     TinyPicture_Slab1 = 14,
202     TinyPicture_Slab4 = 15,
203     TinyPicture_StarPort = 16,
204     TinyPicture_Wall = 17,
205     TinyPicture_WindTrap = 18,
206     TinyPicture_WOR = 19,
207     TinyPicture_Carryall = 20,
208     TinyPicture_Devastator = 21,
209     TinyPicture_Deviator = 22,
210     TinyPicture_Frigate = 23,
211     TinyPicture_Harvester = 24,
212     TinyPicture_Soldier = 25,
213     TinyPicture_Launcher = 26,
214     TinyPicture_MCV = 27,
215     TinyPicture_Ornithopter = 28,
216     TinyPicture_Quad = 29,
217     TinyPicture_Saboteur = 30,
218     TinyPicture_Sandworm = 31,
219     TinyPicture_SiegeTank = 32,
220     TinyPicture_SonicTank = 33,
221     TinyPicture_Tank = 34,
222     TinyPicture_Trike = 35,
223     TinyPicture_RaiderTrike = 36,
224     TinyPicture_Trooper = 37,
225     TinyPicture_Special = 38,
226     TinyPicture_Infantry = 39,
227     TinyPicture_Troopers = 40,
228     NUM_TINYPICTURE
229 } TinyPicture_Enum;
230 
231 // UI Graphics
232 typedef enum {
233     UI_RadarAnimation,
234     UI_CursorNormal,
235     UI_CursorUp,
236     UI_CursorRight,
237     UI_CursorDown,
238     UI_CursorLeft,
239     UI_CursorMove_Zoomlevel0,
240     UI_CursorMove_Zoomlevel1,
241     UI_CursorMove_Zoomlevel2,
242     UI_CursorAttack_Zoomlevel0,
243     UI_CursorAttack_Zoomlevel1,
244     UI_CursorAttack_Zoomlevel2,
245     UI_CursorCapture_Zoomlevel0,
246     UI_CursorCapture_Zoomlevel1,
247     UI_CursorCapture_Zoomlevel2,
248     UI_CursorCarryallDrop_Zoomlevel0,
249     UI_CursorCarryallDrop_Zoomlevel1,
250     UI_CursorCarryallDrop_Zoomlevel2,
251     UI_SendToRepairIcon,
252     UI_ReturnIcon,
253     UI_DeployIcon,
254     UI_DestructIcon,
255     UI_CreditsDigits,
256     UI_SideBar,
257     UI_Indicator,
258     UI_InvalidPlace_Zoomlevel0,
259     UI_InvalidPlace_Zoomlevel1,
260     UI_InvalidPlace_Zoomlevel2,
261     UI_ValidPlace_Zoomlevel0,
262     UI_ValidPlace_Zoomlevel1,
263     UI_ValidPlace_Zoomlevel2,
264     UI_GreyPlace_Zoomlevel0,
265     UI_GreyPlace_Zoomlevel1,
266     UI_GreyPlace_Zoomlevel2,
267     UI_MenuBackground,
268     UI_GameStatsBackground,
269     UI_SelectionBox_Zoomlevel0,
270     UI_SelectionBox_Zoomlevel1,
271     UI_SelectionBox_Zoomlevel2,
272     UI_OtherPlayerSelectionBox_Zoomlevel0,
273     UI_OtherPlayerSelectionBox_Zoomlevel1,
274     UI_OtherPlayerSelectionBox_Zoomlevel2,
275     UI_TopBar,
276     UI_ButtonUp,
277     UI_ButtonUp_Pressed,
278     UI_ButtonDown,
279     UI_ButtonDown_Pressed,
280     UI_BuilderListUpperCap,
281     UI_BuilderListLowerCap,
282     UI_CustomGamePlayersArrow,
283     UI_CustomGamePlayersArrowNeutral,
284     UI_MessageBox,
285     UI_Mentat,
286     UI_Mentat_Pressed,
287     UI_Options,
288     UI_Options_Pressed,
289     UI_Upgrade,
290     UI_Upgrade_Pressed,
291     UI_Repair,
292     UI_Repair_Pressed,
293     UI_HouseSelect,
294     UI_SelectYourHouseLarge,
295     UI_Herald_Colored,
296     UI_Herald_ColoredLarge,
297     UI_Herald_Grey,
298     UI_Herald_ArrowLeft,
299     UI_Herald_ArrowLeftLarge,
300     UI_Herald_ArrowLeftHighlight,
301     UI_Herald_ArrowLeftHighlightLarge,
302     UI_Herald_ArrowRight,
303     UI_Herald_ArrowRightLarge,
304     UI_Herald_ArrowRightHighlight,
305     UI_Herald_ArrowRightHighlightLarge,
306     UI_Minus,
307     UI_Minus_Active,
308     UI_Minus_Pressed,
309     UI_Plus,
310     UI_Plus_Active,
311     UI_Plus_Pressed,
312     UI_MissionSelect,
313     UI_OptionsMenu,
314     UI_LoadSaveWindow,
315     UI_NewMapWindow,
316     UI_GameMenu,
317     UI_MentatBackground,
318     UI_MentatBackgroundBene,
319     UI_MentatHouseChoiceInfoQuestion,
320     UI_MentatYes,
321     UI_MentatYes_Pressed,
322     UI_MentatNo,
323     UI_MentatNo_Pressed,
324     UI_MentatExit,
325     UI_MentatExit_Pressed,
326     UI_MentatProcced,
327     UI_MentatProcced_Pressed,
328     UI_MentatRepeat,
329     UI_MentatRepeat_Pressed,
330     UI_PlanetBackground,
331     UI_MenuButtonBorder,
332     UI_DuneLegacy,
333     UI_MapChoiceScreen,
334     UI_MapChoicePlanet,
335     UI_MapChoiceMapOnly,
336     UI_MapChoiceMap,
337     UI_MapChoiceClickMap,
338     UI_MapChoiceArrow_None,
339     UI_MapChoiceArrow_LeftUp,
340     UI_MapChoiceArrow_Up,
341     UI_MapChoiceArrow_RightUp,
342     UI_MapChoiceArrow_Right,
343     UI_MapChoiceArrow_RightDown,
344     UI_MapChoiceArrow_Down,
345     UI_MapChoiceArrow_LeftDown,
346     UI_MapChoiceArrow_Left,
347     UI_StructureSizeLattice,
348     UI_StructureSizeConcrete,
349     UI_MapEditor_SideBar,
350     UI_MapEditor_BottomBar,
351     UI_MapEditor_ExitIcon,
352     UI_MapEditor_NewIcon,
353     UI_MapEditor_LoadIcon,
354     UI_MapEditor_SaveIcon,
355     UI_MapEditor_UndoIcon,
356     UI_MapEditor_RedoIcon,
357     UI_MapEditor_PlayerIcon,
358     UI_MapEditor_MapSettingsIcon,
359     UI_MapEditor_ChoamIcon,
360     UI_MapEditor_ReinforcementsIcon,
361     UI_MapEditor_TeamsIcon,
362     UI_MapEditor_MirrorNoneIcon,
363     UI_MapEditor_MirrorHorizontalIcon,
364     UI_MapEditor_MirrorVerticalIcon,
365     UI_MapEditor_MirrorBothIcon,
366     UI_MapEditor_MirrorPointIcon,
367     UI_MapEditor_ArrowUp,
368     UI_MapEditor_ArrowUp_Active,
369     UI_MapEditor_ArrowDown,
370     UI_MapEditor_ArrowDown_Active,
371     UI_MapEditor_Plus,
372     UI_MapEditor_Plus_Active,
373     UI_MapEditor_Minus,
374     UI_MapEditor_Minus_Active,
375     UI_MapEditor_RotateLeftIcon,
376     UI_MapEditor_RotateLeftHighlightIcon,
377     UI_MapEditor_RotateRightIcon,
378     UI_MapEditor_RotateRightHighlightIcon,
379     UI_MapEditor_Sand,
380     UI_MapEditor_Dunes,
381     UI_MapEditor_SpecialBloom,
382     UI_MapEditor_Spice,
383     UI_MapEditor_ThickSpice,
384     UI_MapEditor_SpiceBloom,
385     UI_MapEditor_Slab,
386     UI_MapEditor_Rock,
387     UI_MapEditor_Mountain,
388     UI_MapEditor_Slab1,
389     UI_MapEditor_Wall,
390     UI_MapEditor_GunTurret,
391     UI_MapEditor_RocketTurret,
392     UI_MapEditor_ConstructionYard,
393     UI_MapEditor_Windtrap,
394     UI_MapEditor_Radar,
395     UI_MapEditor_Silo,
396     UI_MapEditor_IX,
397     UI_MapEditor_Barracks,
398     UI_MapEditor_WOR,
399     UI_MapEditor_LightFactory,
400     UI_MapEditor_Refinery,
401     UI_MapEditor_HighTechFactory,
402     UI_MapEditor_HeavyFactory,
403     UI_MapEditor_RepairYard,
404     UI_MapEditor_Starport,
405     UI_MapEditor_Palace,
406     UI_MapEditor_Soldier,
407     UI_MapEditor_Trooper,
408     UI_MapEditor_Harvester,
409     UI_MapEditor_Infantry,
410     UI_MapEditor_Troopers,
411     UI_MapEditor_MCV,
412     UI_MapEditor_Trike,
413     UI_MapEditor_Raider,
414     UI_MapEditor_Quad,
415     UI_MapEditor_Tank,
416     UI_MapEditor_SiegeTank,
417     UI_MapEditor_Launcher,
418     UI_MapEditor_Devastator,
419     UI_MapEditor_SonicTank,
420     UI_MapEditor_Deviator,
421     UI_MapEditor_Saboteur,
422     UI_MapEditor_Sandworm,
423     UI_MapEditor_SpecialUnit,
424     UI_MapEditor_Carryall,
425     UI_MapEditor_Ornithopter,
426     UI_MapEditor_Pen1x1,
427     UI_MapEditor_Pen3x3,
428     UI_MapEditor_Pen5x5,
429     NUM_UIGRAPHICS
430 } UIGraphics_Enum;
431 
432 //Animation
433 typedef enum {
434     Anim_HarkonnenEyes,
435     Anim_HarkonnenMouth,
436     Anim_HarkonnenShoulder,
437     Anim_AtreidesEyes,
438     Anim_AtreidesMouth,
439     Anim_AtreidesShoulder,
440     Anim_AtreidesBook,
441     Anim_OrdosEyes,
442     Anim_OrdosMouth,
443     Anim_OrdosShoulder,
444     Anim_OrdosRing,
445     Anim_FremenEyes,
446     Anim_FremenMouth,
447     Anim_FremenShoulder,
448     Anim_FremenBook,
449     Anim_SardaukarEyes,
450     Anim_SardaukarMouth,
451     Anim_SardaukarShoulder,
452     Anim_MercenaryEyes,
453     Anim_MercenaryMouth,
454     Anim_MercenaryShoulder,
455     Anim_MercenaryRing,
456     Anim_BeneEyes,
457     Anim_BeneMouth,
458     Anim_HarkonnenPlanet,
459     Anim_AtreidesPlanet,
460     Anim_OrdosPlanet,
461     Anim_FremenPlanet,
462     Anim_SardaukarPlanet,
463     Anim_MercenaryPlanet,
464     Anim_Win1,
465     Anim_Win2,
466     Anim_Lose1,
467     Anim_Lose2,
468     Anim_Barracks,
469     Anim_Carryall,
470     Anim_ConstructionYard,
471     Anim_Fremen,
472     Anim_DeathHand,
473     Anim_Devastator,
474     Anim_Harvester,
475     Anim_Radar,
476     Anim_HighTechFactory,
477     Anim_SiegeTank,
478     Anim_HeavyFactory,
479     Anim_Trooper,
480     Anim_Infantry,
481     Anim_IX,
482     Anim_LightFactory,
483     Anim_Tank,
484     Anim_MCV,
485     Anim_Deviator,
486     Anim_Ornithopter,
487     Anim_Raider,
488     Anim_Palace,
489     Anim_Quad,
490     Anim_Refinery,
491     Anim_RepairYard,
492     Anim_Launcher,
493     Anim_RocketTurret,
494     Anim_Saboteur,
495     Anim_Slab1,
496     Anim_SonicTank,
497     Anim_StarPort,
498     Anim_Silo,
499     Anim_Trike,
500     Anim_GunTurret,
501     Anim_Wall,
502     Anim_WindTrap,
503     Anim_WOR,
504     Anim_Sandworm,
505     Anim_Sardaukar,
506     Anim_Frigate,
507     Anim_Slab4,
508     NUM_ANIMATION
509 } Animation_enum;
510 
511 
512 class GFXManager {
513 public:
514     GFXManager();
515     ~GFXManager();
516 
517     SDL_Texture**   getObjPic(unsigned int id, int house=HOUSE_HARKONNEN);
518 
519     SDL_Texture*    getSmallDetailPic(unsigned int id);
520     SDL_Texture*    getTinyPicture(unsigned int id);
521     SDL_Texture*    getUIGraphic(unsigned int id, int house=HOUSE_HARKONNEN);
522     SDL_Texture*    getMapChoicePiece(unsigned int num, int house);
523 
524     SDL_Surface*    getUIGraphicSurface(unsigned int id, int house=HOUSE_HARKONNEN);
525     SDL_Surface*    getMapChoicePieceSurface(unsigned int num, int house);
526 
getBackgroundSurface()527     SDL_Surface*    getBackgroundSurface() { return pBackgroundSurface; };
528 
529     Animation*      getAnimation(unsigned int id);
530 
531 private:
532     Animation*      loadAnimationFromWsa(const std::string& filename);
533     SDL_Surface*    generateWindtrapAnimationFrames(SDL_Surface* windtrapPic);
534     SDL_Surface*    generateMapChoiceArrowFrames(SDL_Surface* arrowPic, int house=HOUSE_HARKONNEN);
535 
536     std::shared_ptr<Shpfile>  loadShpfile(const std::string& filename);
537     std::shared_ptr<Wsafile>  loadWsafile(const std::string& filename);
538 
539     SDL_Texture*    extractSmallDetailPic(const std::string& filename);
540 
541     SDL_Surface*    generateDoubledObjPic(unsigned int id, int h);
542     SDL_Surface*    generateTripledObjPic(unsigned int id, int h);
543 
544     // 8-bit surfaces kept in main memory for processing as needed, e.g. color remapping
545     SDL_Surface*    objPic[NUM_OBJPICS][(int) NUM_HOUSES][NUM_ZOOMLEVEL];
546     SDL_Surface*    uiGraphic[NUM_UIGRAPHICS][(int) NUM_HOUSES];
547     SDL_Surface*    mapChoicePieces[NUM_MAPCHOICEPIECES][(int) NUM_HOUSES];
548     Animation*      animation[NUM_ANIMATION];
549 
550     // 32-bit surfaces
551     SDL_Surface*    pBackgroundSurface;
552 
553     // Textures
554     SDL_Texture*    objPicTex[NUM_OBJPICS][(int) NUM_HOUSES][NUM_ZOOMLEVEL];
555     SDL_Texture*    smallDetailPicTex[NUM_SMALLDETAILPICS];
556     SDL_Texture*    tinyPictureTex[NUM_TINYPICTURE];
557     SDL_Texture*    uiGraphicTex[NUM_UIGRAPHICS][(int) NUM_HOUSES];
558     SDL_Texture*    mapChoicePiecesTex[NUM_MAPCHOICEPIECES][(int) NUM_HOUSES];
559 };
560 
561 #endif // GFXMANAGER_H
562