Mercurial > hg > dmlib
annotate dmsimple.c @ 619:6c23042c546f
Aaaand some more work on mode selector.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 12 Apr 2013 15:32:37 +0300 |
parents | a1f70e85a5ca |
children | 5fda51e99fe5 |
rev | line source |
---|---|
310
713c8018c3ce
Fix includes in the dmsimple engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
278
diff
changeset
|
1 #include <SDL.h> |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
2 #include "dmengine.h" |
310
713c8018c3ce
Fix includes in the dmsimple engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
278
diff
changeset
|
3 #include "dmargs.h" |
593 | 4 #include "dmtext.h" |
5 #include "dmimage.h" | |
591
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
6 #include "setupfont.h" |
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
7 #include "setupimage.h" |
608 | 8 #include "setupmenubar.h" |
591
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
9 |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
10 static const char *engineSetupImageName = "SetupImage.png"; |
608 | 11 static const char *engineSetupMenuBarName = "SetupMenuBar.png"; |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
12 static const char *engineSetupFontName = "SetupFont.dmf"; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
14 static DMEngineData engine; |
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
15 |
121
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
16 static DMOptArg optList[] = |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
17 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
18 { 0, '?', "help", "Show this help", OPT_NONE }, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
19 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
20 }; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
21 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
22 const int optListN = sizeof(optList) / sizeof(optList[0]); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
23 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
24 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
25 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
26 static void argShowHelp() |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
27 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
28 dmPrintBanner(stdout, dmProgName, "[options]"); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
29 dmArgsPrintHelp(stdout, optList, optListN); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
30 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
31 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
32 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
33 static BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
34 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
35 (void) optArg; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
36 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
37 switch (optN) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
38 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
39 case 0: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
40 argShowHelp(); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
41 exit(0); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
42 break; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
43 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
44 case 1: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
45 dmVerbosity++; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
46 break; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
47 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
48 default: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
49 dmError("Unknown option '%s'.\n", currArg); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
50 return FALSE; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
51 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
52 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
53 return TRUE; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
54 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
55 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
56 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
57 static void engineAudioCallback(void *userdata, Uint8 *stream, int len) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
58 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
59 (void) userdata; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
60 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
61 if (engine.paused) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
62 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
63 memset(stream, 0, len); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
64 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
65 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
66 #ifdef DM_USE_JSS |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
67 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
68 if (engine.dev != NULL) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
69 jvmRenderAudio(engine.dev, stream, len / jvmGetSampleSize(engine.dev)); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
70 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
71 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
72 #ifdef DM_USE_TREMOR |
361 | 73 if (engine.audioPos + len >= engine.audioRes->rdataSize) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
74 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
75 engine.exitFlag = TRUE; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
76 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
77 else |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
78 { |
361 | 79 memcpy(stream, engine.audioRes->rdata + engine.audioPos, len); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
80 engine.audioPos += len; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
81 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
82 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
83 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
84 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
85 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
86 static int engineShowProgress(int loaded, int total) |
40 | 87 { |
88 int dx = 60, | |
89 dh = 20, | |
90 dw = engine.screen->w - (2 * dx), | |
91 dy = (engine.screen->h - dh) / 2; | |
92 | |
93 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) | |
94 return DMERR_INIT_FAIL; | |
95 | |
96 // Draw the progress bar | |
97 dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0)); | |
98 dmFillRect(engine.screen, dx, dy, dx+dw, dy+dh, dmMapRGB(engine.screen, 255,255,255)); | |
99 dmFillRect(engine.screen, dx+1, dy+1, dx+dw-1, dy+dh-1, dmMapRGB(engine.screen, 0,0,0)); | |
100 | |
101 if (total > 0) | |
102 { | |
103 dmFillRect(engine.screen, | |
104 dx+3, dy+3, | |
105 dx + 3 + ((dw - 3) * loaded) / total, | |
106 dy + dh - 3, | |
107 dmMapRGB(engine.screen, 200,200,200)); | |
108 } | |
109 | |
110 // Flip screen | |
111 if (SDL_MUSTLOCK(engine.screen) != 0) | |
112 SDL_UnlockSurface(engine.screen); | |
113 | |
114 SDL_Flip(engine.screen); | |
115 return DMERR_OK; | |
116 } | |
117 | |
118 | |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
119 static int engineLoadResources() |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 { |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
121 int err, loaded = 0, total = 0; |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
122 BOOL first = TRUE; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
123 |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
124 do |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
126 // Show a nice progress bar while loading |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
127 if ((err = engineShowProgress(loaded, total)) != DMERR_OK) |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
128 return err; |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
129 |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
130 err = dmres_preload(engine.resources, first, &loaded, &total); |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
131 first = FALSE; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 } |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
133 while (err == DMERR_PROGRESS); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 return err; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
137 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
139 static BOOL engineGenInitializeVideo(int width, int height, int depth, Uint32 flags) |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
140 { |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
141 dmPrint(1, "Initializing SDL video %d x %d x %dbpp, flags=0x%08x\n", |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
142 width, height, depth, flags); |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
143 |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
144 SDL_FreeSurface(engine.screen); |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
145 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
146 engine.screen = SDL_SetVideoMode(width, height, depth, flags); |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
147 if (engine.screen == NULL) |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
148 { |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
149 dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
150 return FALSE; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
151 } |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
152 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
153 SDL_WM_SetCaption(dmProgDesc, dmProgName); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
154 |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
155 return TRUE; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
156 } |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
157 |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
158 |
593 | 159 static BOOL engineInitializeVideo() |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
160 { |
593 | 161 return engineGenInitializeVideo(engine.optVidWidth, engine.optVidHeight, |
162 engine.optVidDepth, engine.optVFlags); | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
163 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
164 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
165 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
166 typedef struct |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
167 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
168 int w, h; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
169 } DMModeEntry; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
170 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
171 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
172 DMModeEntry *engineModeList = NULL; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
173 int nengineModeList = 0, aengineModeList = 0; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
174 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
175 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
176 static int engineModeSort(const void *pa, const void *pb) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
177 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
178 DMModeEntry |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
179 *va = (DMModeEntry *) pa, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
180 *vb = (DMModeEntry *) pb; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
181 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
182 return (va->w - vb->w); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
183 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
184 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
185 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
186 int engineAddModeToList(int w, int h) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
187 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
188 DMModeEntry *mode; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
189 int i; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
190 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
191 // Check if the mode is already in our list |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
192 for (i = 0; i < nengineModeList; i++) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
193 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
194 mode = &engineModeList[i]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
195 if (mode->w == w && mode->h == h) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
196 return DMERR_OK; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
197 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
198 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
199 // Reallocate array if needed |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
200 if (nengineModeList + 1 >= aengineModeList) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
201 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
202 aengineModeList += 16; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
203 engineModeList = dmRealloc(engineModeList, sizeof(DMModeEntry) * aengineModeList); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
204 if (engineModeList == NULL) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
205 return DMERR_MALLOC; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
206 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
207 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
208 // Store |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
209 mode = &engineModeList[nengineModeList]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
210 mode->w = w; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
211 mode->h = h; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
212 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
213 nengineModeList++; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
214 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
215 return DMERR_OK; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
216 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
217 |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
218 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
219 int engineVideoSetup() |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
220 { |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
221 DMBitmapFont *menuFont = NULL; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
222 DMResource *file = NULL; |
608 | 223 SDL_Surface *menuBgImage = NULL, *menuBarImage = NULL; |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
224 int result, menuState = -1, menuChoice = 0; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
225 BOOL fullScreen = TRUE; |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
226 char menuStr[64]; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
227 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
228 // Compute a list of valid modes |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
229 if (!engineGenInitializeVideo(DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT, engine.optVidDepth, engine.optVFlags)) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
230 goto out; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
231 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
232 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
233 SDL_Rect **modes = SDL_ListModes(engine.screen->format, engine.screen->flags | SDL_FULLSCREEN); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
234 if (modes == (SDL_Rect**) 0) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
235 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
236 dmError("No compatible video resolutions/depths available at all. Bailing out.\n"); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
237 goto out; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
238 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
239 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
240 if (modes != (SDL_Rect**) -1) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
241 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
242 int i; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
243 for (i = 0; modes[i] != NULL; i++) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
244 engineAddModeToList(modes[i]->w, modes[i]->h); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
245 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
246 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
247 qsort(engineModeList, nengineModeList, sizeof(engineModeList[0]), engineModeSort); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
248 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
249 // Open video temporarily |
593 | 250 if (!engineGenInitializeVideo(DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT, 32, SDL_SWSURFACE | SDL_DOUBLEBUF)) |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
251 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
252 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
253 // Fetch and decompress setup image, try regular resources first |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
254 file = dmf_open(engine.resources, engineSetupImageName); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
255 if (file == NULL) |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
256 file = dmf_create_memio(NULL, engineSetupImageName, engineSetupImage, sizeof(engineSetupImage)); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
257 |
593 | 258 menuBgImage = dmLoadImage(file); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
259 dmf_close(file); |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
260 |
608 | 261 file = dmf_open(engine.resources, engineSetupMenuBarName); |
262 if (file == NULL) | |
263 file = dmf_create_memio(NULL, engineSetupMenuBarName, engineSetupMenuBar, sizeof(engineSetupMenuBar)); | |
264 | |
265 menuBarImage = dmLoadImage(file); | |
266 dmf_close(file); | |
267 | |
268 if (menuBgImage == NULL || menuBarImage == NULL) | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
269 { |
608 | 270 dmError("Could not instantiate setup screen images, %d: %s\n", |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
271 result, dmErrorStr(result)); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
272 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
273 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
274 |
593 | 275 if (menuBgImage->w != DM_VSETUP_WIDTH || |
276 menuBgImage->h != DM_VSETUP_HEIGHT) | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
277 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
278 dmError("Setup screen background image does not match " |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
279 "required dimensions (%dx%d vs %dx%d)\n", |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
280 menuBgImage->w, menuBgImage->h, |
593 | 281 DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
282 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
283 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
284 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
285 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
286 // Load up the bitmap font |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
287 file = dmf_open(engine.resources, engineSetupFontName); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
288 if (file == NULL) |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
289 file = dmf_create_memio(NULL, engineSetupFontName, engineSetupFont, sizeof(engineSetupFont)); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
290 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
291 result = dmLoadBitmapFont(file, &menuFont); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
292 dmf_close(file); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
293 if (result != DMERR_OK) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
294 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
295 dmError("Could not instantiate setup screen font, %d: %s\n", |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
296 result, dmErrorStr(result)); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
297 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
298 } |
614
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
299 |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
300 SDL_Surface *tmp = dmConvertScaledSurface(menuBgImage, |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
301 engine.screen->format, engine.screen->flags, |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
302 engine.screen->w, engine.screen->h); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
303 if (tmp == NULL) |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
304 { |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
305 dmError("Could not convert setup screen background image.\n"); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
306 goto out; |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
307 } |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
308 |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
309 SDL_FreeSurface(menuBgImage); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
310 menuBgImage = tmp; |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
311 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
312 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); |
614
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
313 |
618 | 314 int menuEntryHeight = menuFont->height + 2, |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
315 menuHeight = DM_VSETUP_MENU_HEIGHT / menuEntryHeight; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
316 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
317 // Enter the main loop of the menu |
608 | 318 engine.startTime = SDL_GetTicks(); |
593 | 319 menuState = 0; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
320 while (!menuState) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
321 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
322 while (SDL_PollEvent(&engine.event)) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
323 switch (engine.event.type) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
324 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
325 case SDL_KEYDOWN: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
326 switch (engine.event.key.keysym.sym) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
327 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
328 case SDLK_ESCAPE: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
329 menuState = -1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
330 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
331 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
332 case SDLK_RETURN: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
333 menuState = 1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
334 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
335 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
336 case SDLK_UP: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
337 if (menuChoice > 0) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
338 menuChoice--; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
339 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
340 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
341 case SDLK_DOWN: |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
342 if (menuChoice < nengineModeList - 1) |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
343 menuChoice++; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
344 break; |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
345 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
346 case SDLK_SPACE: |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
347 fullScreen = !fullScreen; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
348 break; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
349 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
350 default: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
351 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
352 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
353 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
354 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
355 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
356 case SDL_QUIT: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
357 menuState = -1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
358 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
359 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
360 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
361 // Draw frame |
608 | 362 engine.frameTime = SDL_GetTicks(); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
363 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
364 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
365 dmError("Can't lock surface.\n"); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
366 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
367 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
368 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
369 // Render the menu |
614
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
370 dmDirectBlitSurface(menuBgImage, engine.screen); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
371 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
372 // XXX/TODO: Some hardcoded bits here ... |
608 | 373 float t = engineGetTimeDT(&engine); |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
374 int entry; |
608 | 375 dmScaledBlitSurface32to32TransparentGA(menuBarImage, |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
376 DM_VSETUP_MENU_XC, |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
377 DM_VSETUP_MENU_YC + (menuChoice * menuEntryHeight), |
608 | 378 DM_VSETUP_MENU_WIDTH, menuEntryHeight + 2, |
379 engine.screen, | |
380 200 + sin(t * 10.0) * 50); | |
615 | 381 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
382 for (entry = 0; entry < nengineModeList && entry < menuHeight; entry++) |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
383 { |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
384 DMModeEntry *mode = &engineModeList[entry]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
385 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
386 snprintf(menuStr, sizeof(menuStr), |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
387 "%4d X %4d", mode->w, mode->h); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
388 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
389 dmDrawBMTextConst( |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
390 engine.screen, menuFont, DMD_TRANSPARENT, |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
391 DM_VSETUP_MENU_XC + 2, |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
392 DM_VSETUP_MENU_YC + 2 + entry * menuEntryHeight, |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
393 menuStr); |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
394 } |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
395 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
396 dmDrawBMTextConst( |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
397 engine.screen, menuFont, DMD_TRANSPARENT, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
398 80, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
399 DM_VSETUP_MENU_YC + menuEntryHeight * (1 + menuHeight), |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
400 fullScreen ? |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
401 "[ FULLSCREEN ] - SPACE TO TOGGLE" : |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
402 "[ WINDOWED ] - SPACE TO TOGGLE"); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
403 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
404 dmDrawBMTextConst( |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
405 engine.screen, menuFont, DMD_TRANSPARENT, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
406 80, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
407 DM_VSETUP_MENU_YC + menuEntryHeight * (2 + menuHeight), |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
408 " PRESS [ENTER] TO START "); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
409 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
410 // Flip screen |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
411 if (SDL_MUSTLOCK(engine.screen) != 0) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
412 SDL_UnlockSurface(engine.screen); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
413 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
414 SDL_Flip(engine.screen); |
616
ed4536641796
A bit slower screen update rate.
Matti Hamalainen <ccr@tnsp.org>
parents:
615
diff
changeset
|
415 SDL_Delay(25); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
416 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
417 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
418 out: |
608 | 419 SDL_FreeSurface(menuBgImage); |
420 SDL_FreeSurface(menuBarImage); | |
421 dmFreeBitmapFont(menuFont); | |
422 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
423 return menuState; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
424 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
425 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
426 |
593 | 427 int engineGetVideoAspect(int width, int height) |
428 { | |
429 if (width > 0 && height > 0) | |
430 return (width * 1000) / height; | |
431 else | |
432 return 1; | |
433 } | |
434 | |
435 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
436 int main(int argc, char *argv[]) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
437 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
438 int err; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
439 BOOL initSDL = FALSE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
440 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
441 memset(&engine, 0, sizeof(engine)); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
442 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
443 // Pre-initialization |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
444 if ((err = demoPreInit(&engine)) != DMERR_OK) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
445 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
446 |
121
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
447 if (!dmArgsProcess(argc, argv, optList, optListN, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
448 argHandleOpt, NULL, FALSE)) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
449 return DMERR_INIT_FAIL; |
123
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
450 |
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
451 dmPrint(0, |
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
452 "%s\n" |
312 | 453 "%s\n" |
454 "TNSP simple demoengine initializing.\n", | |
123
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
455 dmProgDesc, dmProgAuthor); |
125
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
456 |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
457 dmPrint(0, |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
458 "Using libSDL, " |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
459 #ifdef DM_USE_PACKFS |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
460 "zlib, " |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
461 #endif |
125
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
462 #ifdef DM_USE_TREMOR |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
463 "Tremor Vorbis codec" |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
464 #endif |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
465 " and modified stb_image.\n" |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
466 "See README.txt for more information.\n"); |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
467 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
468 // Initialize resource subsystem |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
469 dmPrint(1, "Initializing resources subsystem.\n"); |
600 | 470 if ((err = dmres_init(&engine.resources, engine.optPackFilename, |
471 engine.optDataPath, engine.optResFlags, engineClassifier)) != DMERR_OK) | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
472 { |
574 | 473 dmError("Could not initialize resource manager, #%d: %s.\n", err, dmErrorStr(err)); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
474 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
475 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
476 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
477 // Initialize SDL components |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
478 dmPrint(1, "Initializing libSDL.\n"); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
479 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
480 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
481 dmError("Could not initialize SDL: %s\n", SDL_GetError()); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
482 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
483 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
484 initSDL = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
485 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
486 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
487 // Present video mode selector |
593 | 488 if (engine.optVidAspect <= 0) |
489 engine.optVidAspect = engineGetVideoAspect(engine.optVidWidth, engine.optVidHeight); | |
490 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
491 if (engine.optVidSetup) |
593 | 492 { |
493 if ((err = engineVideoSetup()) <= 0) | |
494 goto error_exit; | |
495 } | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
496 |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
497 // Initialize audio parts |
126
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
498 if (engine.optAfmt.freq == 0 && engine.optAfmt.channels == 0) |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
499 { |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
500 // Defaults, if none seem to be set |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
501 engine.optAfmt.freq = 44100; |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
502 engine.optAfmt.format = AUDIO_S16SYS; |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
503 engine.optAfmt.channels = 2; |
316 | 504 engine.optAfmt.samples = engine.optAfmt.freq / 16; |
126
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
505 } |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
506 |
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
507 #ifdef DM_USE_JSS |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
508 jssInit(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
509 |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
510 switch (engine.optAfmt.format) |
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
511 { |
110
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
512 case AUDIO_S16SYS: engine.jss_format = JSS_AUDIO_S16; break; |
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
513 case AUDIO_U16SYS: engine.jss_format = JSS_AUDIO_U16; break; |
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
514 case AUDIO_S8: engine.jss_format = JSS_AUDIO_S8; break; |
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
515 case AUDIO_U8: engine.jss_format = JSS_AUDIO_U8; break; |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
516 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
517 |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
518 dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n", |
110
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
519 engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
520 |
110
8db49a23b393
Fixes to make the JSS audio subsystem support work again in the engine framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
109
diff
changeset
|
521 if ((engine.dev = jvmInit(engine.jss_format, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
522 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
523 dmError("jvmInit() returned NULL, voi perkele.\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
524 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
525 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
526 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
527 if ((engine.plr = jmpInit(engine.dev)) == NULL) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
528 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
529 dmError("jmpInit() returned NULL\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
530 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
531 } |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
532 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
533 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
534 // Initialize SDL audio |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
535 dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n", |
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
536 engine.optAfmt.format, engine.optAfmt.channels, engine.optAfmt.freq); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
537 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
538 engine.optAfmt.callback = engineAudioCallback; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
539 |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
540 if (SDL_OpenAudio(&engine.optAfmt, NULL) < 0) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
541 { |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
542 dmError("Couldn't open SDL audio: %s\n", SDL_GetError()); |
595
695a623eed63
Add a comment about no-sound support to the relevant part in audio setup
Matti Hamalainen <ccr@tnsp.org>
parents:
593
diff
changeset
|
543 // We'll let this pass, as we want to support no-sound. |
695a623eed63
Add a comment about no-sound support to the relevant part in audio setup
Matti Hamalainen <ccr@tnsp.org>
parents:
593
diff
changeset
|
544 // goto error_exit; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
545 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
546 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
547 // Initialize SDL video |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
548 if (engine.demoInitPreVideo != NULL && |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
549 (err = engine.demoInitPreVideo(&engine)) != DMERR_OK) |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
550 { |
574 | 551 dmError("demoInitPreVideo() failed, #%d: %s\n", err, dmErrorStr(err)); |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
552 goto error_exit; |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
553 } |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
554 |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
555 if (!engineInitializeVideo()) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
556 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
557 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
558 if (engine.demoInitPostVideo != NULL && |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
559 (err = engine.demoInitPostVideo(&engine)) != DMERR_OK) |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
560 { |
574 | 561 dmError("demoInitPostVideo() failed, #%d: %s\n", err, dmErrorStr(err)); |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
562 goto error_exit; |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
563 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
564 |
593 | 565 // Hide cursor |
566 SDL_ShowCursor(SDL_DISABLE); | |
567 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
568 // Load resources |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
569 dmPrint(1, "Loading resources, please wait...\n"); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
570 if ((err = engineLoadResources()) != DMERR_OK) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
571 { |
574 | 572 dmError("Error loading resources, #%d: %s.\n", |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
573 err, dmErrorStr(err)); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
574 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
575 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
576 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
577 // Final initializations |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
578 if ((err = engine.demoInit(&engine)) != DMERR_OK) |
354 | 579 { |
574 | 580 dmError("Failure in demoInit(), #%d: %s\n", |
354 | 581 err, dmErrorStr(err)); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
582 goto error_exit; |
354 | 583 } |
584 | |
585 // Initialize effects | |
369 | 586 if ((err = engineInitializeEffects(&engine)) != DMERR_OK) |
354 | 587 { |
574 | 588 dmError("Effects initialization failed, #%d: %s\n", |
354 | 589 err, dmErrorStr(err)); |
590 goto error_exit; | |
591 } | |
592 | |
593 // Use a timeline, if set | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
594 #ifdef DM_USE_TIMELINE |
354 | 595 if (engine.timeline != NULL) |
596 { | |
597 if ((err = dmLoadTimeline(engine.timeline, &engine.tl)) != DMERR_OK) | |
598 { | |
574 | 599 dmError("Error loading timeline, #%d: %s\n", err, |
354 | 600 dmErrorStr(err)); |
601 goto error_exit; | |
602 } | |
603 | |
604 if ((err = dmPrepareTimeline(engine.tl, engine.ptl)) != DMERR_OK) | |
605 { | |
574 | 606 dmError("Error creating prepared timeline, #%d: %s\n", |
354 | 607 err, dmErrorStr(err)); |
608 goto error_exit; | |
609 } | |
610 } | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
611 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
612 |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
613 dmPrint(1, "Starting up.\n"); |
278 | 614 |
615 SDL_LockAudio(); | |
41
780300a8d322
Move SDL_PauseAudio(0) to the "engine" instead of the demo code.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
616 SDL_PauseAudio(0); |
278 | 617 SDL_UnlockAudio(); |
618 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
619 engine.startTime = SDL_GetTicks(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
620 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
621 while (!engine.exitFlag) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
622 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
623 while (SDL_PollEvent(&engine.event)) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
624 switch (engine.event.type) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
625 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
626 case SDL_KEYDOWN: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
627 switch (engine.event.key.keysym.sym) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
628 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
629 case SDLK_ESCAPE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
630 engine.exitFlag = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
631 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
632 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
633 case SDLK_SPACE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
634 engine.pauseFlag = !engine.pauseFlag; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
635 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
636 |
336
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
637 case SDLK_f: |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
638 engine.optVFlags ^= SDL_FULLSCREEN; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
639 if (!engineInitializeVideo()) |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
640 goto error_exit; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
641 break; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
642 |
109
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
643 case SDLK_RETURN: |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
644 if (engine.event.key.keysym.mod & KMOD_ALT) |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
645 { |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
646 engine.optVFlags ^= SDL_FULLSCREEN; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
647 if (!engineInitializeVideo()) |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
648 goto error_exit; |
109
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
649 } |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
650 break; |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
651 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
652 default: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
653 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
654 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
655 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
656 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
657 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
658 case SDL_VIDEOEXPOSE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
659 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
660 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
661 case SDL_QUIT: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
662 engine.exitFlag = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
663 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
664 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
665 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
666 // Draw frame |
361 | 667 engine.frameTime = SDL_GetTicks(); |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
668 if (engine.pauseFlag != engine.paused) |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
669 { |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
670 engine.paused = engine.pauseFlag; |
367 | 671 engine.pauseTime = engineGetTick(&engine); |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
672 } |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
673 |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
674 if (engine.paused) |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
675 { |
361 | 676 engine.startTime = engine.frameTime - engine.pauseTime; |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
677 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
678 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
679 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
680 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
681 dmError("Can't lock surface.\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
682 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
683 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
684 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
685 // Call main tick |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
686 if (engine.demoRender != NULL) |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
687 { |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
688 if ((err = engine.demoRender(&engine)) != DMERR_OK) |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
689 goto error_exit; |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
690 } |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
691 #ifdef DM_USE_TIMELINE |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
692 else |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
693 { |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
694 if ((err = dmExecuteTimeline(engine.ptl, engine.screen, engineGetTick(&engine))) != DMERR_OK) |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
695 goto error_exit; |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
696 } |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
697 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
698 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
699 // Flip screen |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
700 if (SDL_MUSTLOCK(engine.screen) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
701 SDL_UnlockSurface(engine.screen); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
702 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
703 SDL_Flip(engine.screen); |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
704 SDL_Delay(engine.paused ? 100 : 20); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
705 |
361 | 706 engine.frameCount++; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
707 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
708 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
709 // Print benchmark results |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
710 engine.endTime = SDL_GetTicks(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
711 dmPrint(1, "%d frames in %d ms, fps = %1.3f\n", |
361 | 712 engine.frameCount, engine.endTime - engine.startTime, |
713 (float) (engine.frameCount * 1000.0f) / (float) (engine.endTime - engine.startTime)); | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
714 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
715 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
716 error_exit: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
717 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
718 dmPrint(1, "Shutting down.\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
719 SDL_ShowCursor(SDL_ENABLE); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
720 |
278 | 721 SDL_LockAudio(); |
722 SDL_PauseAudio(1); | |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
723 #ifdef DM_USE_JSS |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
724 jmpClose(engine.plr); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
725 jvmClose(engine.dev); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
726 jssClose(); |
278 | 727 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
728 SDL_UnlockAudio(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
729 |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
730 #ifdef DM_USE_TIMELINE |
354 | 731 dmFreeTimeline(engine.tl); |
732 dmFreePreparedTimelineData(engine.ptl); | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
733 #endif |
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
734 |
369 | 735 engineShutdownEffects(&engine); |
359
59045853853d
Make resource management re-entrant.
Matti Hamalainen <ccr@tnsp.org>
parents:
354
diff
changeset
|
736 dmres_close(engine.resources); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
737 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
738 if (engine.demoShutdown != NULL) |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
739 engine.demoShutdown(&engine); |
94
4bbfc0274b29
Change some function names, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
93
diff
changeset
|
740 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
741 if (initSDL) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
742 SDL_Quit(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
743 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
744 if (engine.demoQuit != NULL) |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
745 engine.demoQuit(&engine); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
746 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
747 return 0; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
748 } |