]>
Commit | Line | Data |
---|---|---|
1 | #include "stdafx.h"\r | |
2 | \r | |
3 | /*Global variables for the game.*/\r | |
4 | \r | |
5 | bool app = true;\r | |
6 | bool keys[323] = {false};\r | |
7 | bool btns[3] = {false};\r | |
8 | \r | |
9 | Map *mainmap;\r | |
10 | Actor_main *actor;\r | |
11 | int ticks1, ticks2;\r | |
12 | int oldclip=1, rightpressed =0, leftpressed = 0;\r | |
13 | float vertical_speed = 0.0, falltime = 0.0;\r | |
14 | bool jumplock;\r | |
15 | \r | |
16 | /*Definition for our surfaces and such.*/\r | |
17 | \r | |
18 | SDL_Surface *viewport, *backg, *buddy, *text; //our surfaces: the viewport, the background, the actor and the text\r | |
19 | SDL_Event event; //our event handler\r | |
20 | SDL_Rect src_rect, dst_rect; //our source rectangle and dest rectangle\r | |
21 | SDL_Color white = {255,255,255,0}; //some colors\r | |
22 | SDL_Color grey = {65,65,65,0};\r | |
23 | SDL_Color magenta = {255,0,255,0};\r | |
24 | Mix_Chunk *jumpfx; //Sound effect for the jump\r | |
25 | Mix_Music *music; //background music\r | |
26 | TTF_Font *font; //font\r | |
27 | \r | |
28 | /*Definition of our functions */\r | |
29 | \r | |
30 | void init();\r | |
31 | void loadobjects();\r | |
32 | void updateinput(); //belongs to input\r | |
33 | void handleinput(); //belongs to input\r | |
34 | void handlephysics(); //belongs to actor_main\r | |
35 | void renderscene();\r | |
36 | void freeobjects();\r | |
37 | void deinit();\r | |
38 | void jump(); //belongs to actor_main\r | |
39 | \r | |
40 | \r | |
41 | /*My main man*/\r | |
42 | int main(int argc, char *argv[])\r | |
43 | {\r | |
44 | \r | |
45 | //boring stuff.\r | |
46 | std::cout << "Initializing... \n";\r | |
47 | init();\r | |
48 | std::cout << "Done! \n";\r | |
49 | std::cout << "Loading Objects... \n";\r | |
50 | loadobjects();\r | |
51 | std::cout << "Done! \n";\r | |
52 | \r | |
53 | //Play it again, Sam\r | |
54 | Mix_PlayMusic(music, 0);\r | |
55 | \r | |
56 | //It's aliiive, ALIIIVE!\r | |
57 | while(app)\r | |
58 | {\r | |
59 | \r | |
60 | //I heard seaman 2 has ticks!\r | |
61 | ticks1 = SDL_GetTicks();\r | |
62 | \r | |
63 | //don't mind these fellas\r | |
64 | updateinput();\r | |
65 | handleinput();\r | |
66 | handlephysics();\r | |
67 | \r | |
68 | renderscene();\r | |
69 | \r | |
70 | //Psh, Semantics!\r | |
71 | ticks2 = SDL_GetTicks();\r | |
72 | if ((ticks2-ticks1) < FRAME_TIME) SDL_Delay(FRAME_TIME - (ticks2-ticks1));\r | |
73 | }\r | |
74 | \r | |
75 | //freedom, yay!\r | |
76 | freeobjects();\r | |
77 | deinit();\r | |
78 | \r | |
79 | return 0;\r | |
80 | }\r | |
81 | \r | |
82 | /* Initialization of components */\r | |
83 | \r | |
84 | void init()\r | |
85 | {\r | |
86 | SDL_Init(SDL_INIT_EVERYTHING); //let's start SDL\r | |
87 | TTF_Init(); //Also the TTF library\r | |
88 | Mix_OpenAudio(44100, AUDIO_S16SYS, 1, 2048); //And finally the Audio system.\r | |
89 | mainmap = new Map;\r | |
90 | }\r | |
91 | \r | |
92 | /* deinitialization of components */\r | |
93 | \r | |
94 | void deinit()\r | |
95 | {\r | |
96 | TTF_Quit(); //bye bye TTF library\r | |
97 | Mix_CloseAudio(); //bye bye Audio Mixer\r | |
98 | SDL_Quit(); //bye bye SDL\r | |
99 | }\r | |
100 | \r | |
101 | /*Load our basic objects*/\r | |
102 | \r | |
103 | void loadobjects()\r | |
104 | {\r | |
105 | viewport = SDL_SetVideoMode( SCREEN_WIDTH, //Define our viewport\r | |
106 | SCREEN_HEIGHT,\r | |
107 | SCREEN_DEPTH,\r | |
108 | SCREEN_PROPS ); \r | |
109 | \r | |
110 | /**********LOAD SPRITES*******************************/ \r | |
111 | actor = new Actor_main(20,75,"data/mansprite.png");\r | |
112 | \r | |
113 | /**********LOAD AUDIO STUFF***************************/\r | |
114 | \r | |
115 | jumpfx = Mix_LoadWAV("data/evasion.ogg"); //este es el SFX de evasion.\r | |
116 | Mix_VolumeChunk(jumpfx,128);\r | |
117 | \r | |
118 | //music = Mix_LoadMUS("data/Air1_2.mid"); //este es el audio de fondo\r | |
119 | //Mix_VolumeMusic(128);\r | |
120 | \r | |
121 | /**********LOAD FONT STUFF*****************************/\r | |
122 | \r | |
123 | font = TTF_OpenFont("data/fipps.ttf", 24); //algo del font ... hmm :P\r | |
124 | text = TTF_RenderText_Solid(font, "Glitch Test", grey); \r | |
125 | }\r | |
126 | \r | |
127 | /*Automatic Updates*/\r | |
128 | void updateinput() //this is our super pooler\r | |
129 | {\r | |
130 | while(SDL_PollEvent(&event)){ \r | |
131 | if (event.type == SDL_KEYDOWN) keys[event.key.keysym.sym] = true; //si esta presionada la tecla, entonces es TRUE!\r | |
132 | if (event.type == SDL_KEYUP) keys[event.key.keysym.sym] = false; //si no esta presionada la tecla, entonces es FALSE!\r | |
133 | if (event.type == SDL_MOUSEBUTTONDOWN) btns[event.button.button] = true;//igual para el mouse\r | |
134 | if (event.type == SDL_MOUSEBUTTONUP) btns[event.button.button] = false; \r | |
135 | }\r | |
136 | }\r | |
137 | \r | |
138 | /*Love Handles*/\r | |
139 | void handleinput()\r | |
140 | {\r | |
141 | if(keys[SDLK_LEFT]){ //si estamos presionando la izquierda \r | |
142 | if(leftpressed == 0){ //si no hay tiempo registrado\r | |
143 | leftpressed = ticks1; //le damos un tiempo\r | |
144 | } \r | |
145 | if( (leftpressed > rightpressed || !keys[SDLK_RIGHT]) && actor->canMove(LEFT, actor->get_x(), actor->get_y(), mainmap) ){ //si presionamos la izquierda despues que la derecha o no esta la derecha\r | |
146 | actor->set_x(actor->get_x() - BUDDY_SPEED); \r | |
147 | oldclip=1;\r | |
148 | }\r | |
149 | }else{\r | |
150 | leftpressed = 0;\r | |
151 | }\r | |
152 | \r | |
153 | /*******************************************************************/\r | |
154 | \r | |
155 | if(keys[SDLK_RIGHT]){ //si estamos presionando la derecha\r | |
156 | \r | |
157 | if(rightpressed == 0){ //si no hay tiempo registrado\r | |
158 | rightpressed = ticks1; //le damos un tiempo\r | |
159 | }\r | |
160 | if( (leftpressed < rightpressed || !keys[SDLK_LEFT]) && actor->canMove(RIGHT, actor->get_x(), actor->get_y(), mainmap) ){ //si presionamos la derecha despues que la izquierda o no esta la izquierda\r | |
161 | actor->set_x(actor->get_x() + BUDDY_SPEED);\r | |
162 | oldclip=2;\r | |
163 | }\r | |
164 | }else{\r | |
165 | rightpressed = 0; //si se ha soltado la tecla reseteamos rightpressed\r | |
166 | }\r | |
167 | \r | |
168 | /*****************************************************************/\r | |
169 | \r | |
170 | if(keys[SDLK_LEFT] || keys[SDLK_RIGHT] || keys[SDLK_x]){ //cualquier movimiento pertinente, debemos animar.\r | |
171 | actor->animate(); \r | |
172 | }else{\r | |
173 | actor->set_clip_x(0); //en cuanto se detenga, pues lo devolvemos a donde debiera\r | |
174 | } \r | |
175 | \r | |
176 | /*************************************************************/ \r | |
177 | if(keys[SDLK_x]){ //z is for jumping.\r | |
178 | jump(); //ahora si, estamos brincando\r | |
179 | }else{ //si z no esta presionado\r | |
180 | if(jumplock){ //y ya habiamos aterrizado\r | |
181 | jumplock = false; //entonces jump vuelve a ser 0\r | |
182 | }\r | |
183 | if(vertical_speed < -1){\r | |
184 | vertical_speed = -1;\r | |
185 | }\r | |
186 | }\r | |
187 | \r | |
188 | if(event.type == SDL_QUIT) app = false; //si le pican a salirse, pues ... nos salimos.\r | |
189 | }\r | |
190 | \r | |
191 | void jump(){\r | |
192 | if(vertical_speed == 0 && !jumplock && actor->canMove(UP, actor->get_x(), actor->get_y(), mainmap)){\r | |
193 | vertical_speed -= JUMP_STRENGTH;\r | |
194 | }\r | |
195 | jumplock = true;\r | |
196 | }\r | |
197 | \r | |
198 | /*maneja la fisica del mono*/\r | |
199 | void handlephysics()\r | |
200 | {\r | |
201 | \r | |
202 | if(actor->canMove(DOWN, actor->get_x(), actor->get_y(), mainmap)){\r | |
203 | switch(oldclip){\r | |
204 | case 1:\r | |
205 | actor->set_clip_y(actor->get_h()*0); //depende de su direccion, escogemos el sprite de brinco\r | |
206 | break;\r | |
207 | case 2: \r | |
208 | actor->set_clip_y(actor->get_h()*3); \r | |
209 | break; \r | |
210 | }\r | |
211 | if(falltime == 0){\r | |
212 | falltime = .5;\r | |
213 | }else{\r | |
214 | falltime += (ticks2-ticks1)/1000;\r | |
215 | }\r | |
216 | }else{\r | |
217 | actor->set_clip_y(actor->get_h()*oldclip);\r | |
218 | falltime = 0;\r | |
219 | if(vertical_speed > 0){\r | |
220 | vertical_speed = 0;\r | |
221 | }\r | |
222 | }\r | |
223 | \r | |
224 | if(!actor->canMove(UP, actor->get_x(), actor->get_y(), mainmap) && vertical_speed < 0){\r | |
225 | vertical_speed = 0;\r | |
226 | }\r | |
227 | \r | |
228 | while(!actor->canMove(DOWN, actor->get_x(), actor->get_y()+vertical_speed, mainmap) && vertical_speed > 0){\r | |
229 | vertical_speed -= 1;\r | |
230 | }\r | |
231 | vertical_speed += (GRAVITY*falltime);\r | |
232 | \r | |
233 | \r | |
234 | actor->set_y(actor->get_y() + vertical_speed);\r | |
235 | }\r | |
236 | \r | |
237 | /*Please Take One*/\r | |
238 | void freeobjects()\r | |
239 | {\r | |
240 | SDL_FreeSurface(text);\r | |
241 | TTF_CloseFont(font);\r | |
242 | Mix_FreeChunk(jumpfx);\r | |
243 | //Mix_FreeMusic(music); \r | |
244 | }\r | |
245 | \r | |
246 | /*Crime scene*/\r | |
247 | void renderscene()\r | |
248 | {\r | |
249 | SDL_FillRect(viewport,NULL,0);\r | |
250 | mainmap->drawmap(viewport);\r | |
251 | Gfx::drawsurface(backg,0,0,viewport);\r | |
252 | actor->draw(viewport);\r | |
253 | Gfx::drawsurface(text,SCREEN_WIDTH/2-text->w/2,SCREEN_HEIGHT/2-text->h,viewport);\r | |
254 | SDL_Flip(viewport);\r | |
255 | } |