summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp69
1 files changed, 43 insertions, 26 deletions
diff --git a/src/main.cpp b/src/main.cpp index 28c89cc..5e4cc1e 100644 --- a/src/main.cpp +++ b/src/main.cpp
@@ -51,6 +51,13 @@ const int TILE_HEIGHT = 8*2;
51const int VIEW_WIDTH = GAME_WIDTH / TILE_WIDTH; 51const int VIEW_WIDTH = GAME_WIDTH / TILE_WIDTH;
52const int VIEW_HEIGHT = GAME_HEIGHT / TILE_HEIGHT; 52const int VIEW_HEIGHT = GAME_HEIGHT / TILE_HEIGHT;
53 53
54struct Input {
55 bool left = false;
56 bool right = false;
57 bool up = false;
58 bool down = false;
59};
60
54class Map { 61class Map {
55public: 62public:
56 63
@@ -258,28 +265,34 @@ void recalculateLighting(Map& map, fov_settings_type* fov)
258 map.lighting[player_x+VIEW_WIDTH*player_y] = true; 265 map.lighting[player_x+VIEW_WIDTH*player_y] = true;
259} 266}
260 267
261void processKeys(Map& map) 268void processKeys(Map& map, const Input& keystate)
262{ 269{
263 const Uint8* state = SDL_GetKeyboardState(NULL); 270 int px = player_x;
271 int py = player_y;
272
273 if (keystate.up)
274 {
275 py--;
276 }
264 277
265 if (state[SDL_SCANCODE_UP]) 278 if (keystate.down)
266 { 279 {
267 movePlayer(player_x, player_y-1, map); 280 py++;
268 } 281 }
269 282
270 if (state[SDL_SCANCODE_DOWN]) 283 if (keystate.left)
271 { 284 {
272 movePlayer(player_x, player_y+1, map); 285 px--;
273 } 286 }
274 287
275 if (state[SDL_SCANCODE_LEFT]) 288 if (keystate.right)
276 { 289 {
277 movePlayer(player_x-1, player_y, map); 290 px++;
278 } 291 }
279 292
280 if (state[SDL_SCANCODE_RIGHT]) 293 if (!(player_x == px && player_y == px))
281 { 294 {
282 movePlayer(player_x+1, player_y, map); 295 movePlayer(px, py, map);
283 } 296 }
284} 297}
285 298
@@ -335,11 +348,13 @@ int main(int, char**)
335 tick(map); 348 tick(map);
336 349
337 bool quit = false; 350 bool quit = false;
351 Input keystate;
338 SDL_Event e; 352 SDL_Event e;
339 while (!quit) 353 while (!quit)
340 { 354 {
341 bool input = false; 355 //bool input = false;
342 int presses = 0; 356 //int presses = 0;
357 bool pressedSpace = false;
343 while (SDL_PollEvent(&e)) 358 while (SDL_PollEvent(&e))
344 { 359 {
345 if (e.type == SDL_QUIT) 360 if (e.type == SDL_QUIT)
@@ -347,7 +362,7 @@ int main(int, char**)
347 quit = true; 362 quit = true;
348 } else if (e.type == SDL_KEYDOWN) 363 } else if (e.type == SDL_KEYDOWN)
349 { 364 {
350 presses++; 365 //presses++;
351 366
352 switch (e.key.keysym.sym) 367 switch (e.key.keysym.sym)
353 { 368 {
@@ -359,7 +374,8 @@ int main(int, char**)
359 374
360 case SDLK_SPACE: 375 case SDLK_SPACE:
361 { 376 {
362 input = true; 377 pressedSpace = true;
378 //input = true;
363 379
364 std::deque<std::tuple<int, int>> lamps; 380 std::deque<std::tuple<int, int>> lamps;
365 lamps.emplace_back(player_x, player_y); 381 lamps.emplace_back(player_x, player_y);
@@ -368,7 +384,7 @@ int main(int, char**)
368 384
369 for (int i = 0; i < 5; i++) 385 for (int i = 0; i < 5; i++)
370 { 386 {
371 processKeys(map); 387 processKeys(map, keystate);
372 388
373 tick( 389 tick(
374 map, 390 map,
@@ -431,13 +447,18 @@ int main(int, char**)
431 break; 447 break;
432 } 448 }
433 } 449 }
434 } else if (e.type == SDL_KEYUP)
435 {
436 presses++;
437 } 450 }
438 } 451 }
439 452
440 if (presses > 0) 453 const Uint8* state = SDL_GetKeyboardState(NULL);
454 keystate.left = state[SDL_SCANCODE_LEFT];
455 keystate.right = state[SDL_SCANCODE_RIGHT];
456 keystate.up = state[SDL_SCANCODE_UP];
457 keystate.down = state[SDL_SCANCODE_DOWN];
458
459 bool input = keystate.left || keystate.right || keystate.up || keystate.down || pressedSpace;
460
461 if (input)
441 { 462 {
442 for (int y = 0; y < VIEW_HEIGHT; y++) 463 for (int y = 0; y < VIEW_HEIGHT; y++)
443 { 464 {
@@ -451,14 +472,10 @@ int main(int, char**)
451 } 472 }
452 } 473 }
453 474
454 for (int i = 0; i < presses; i++) 475 processKeys(map, keystate);
455 {
456 processKeys(map);
457 }
458
459 recalculateLighting(map, fov.get()); 476 recalculateLighting(map, fov.get());
460 477
461 if (presses > 0) 478 if (input)
462 { 479 {
463 for (int y = 0; y < VIEW_HEIGHT; y++) 480 for (int y = 0; y < VIEW_HEIGHT; y++)
464 { 481 {
@@ -482,7 +499,7 @@ int main(int, char**)
482 } 499 }
483 500
484 render(ren.get(), map, true); 501 render(ren.get(), map, true);
485 SDL_Delay(10); 502 SDL_Delay(50);
486 } 503 }
487 } catch (const sdl_error& ex) 504 } catch (const sdl_error& ex)
488 { 505 {