diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-03 12:33:03 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-03 12:33:03 -0500 |
commit | 683e22c419757744ce853c35d732f607ddb9af16 (patch) | |
tree | bc31c1c08f19d270f70b27737d4f6944d30759b7 /src/main.cpp | |
parent | 8d7ef2b2ae3ddff204f5934fe67c535d7f1345e9 (diff) | |
download | tanetane-683e22c419757744ce853c35d732f607ddb9af16.tar.gz tanetane-683e22c419757744ce853c35d732f607ddb9af16.tar.bz2 tanetane-683e22c419757744ce853c35d732f607ddb9af16.zip |
Added input system
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/src/main.cpp b/src/main.cpp index 3ac4d09..771aa1c 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
@@ -9,15 +9,15 @@ | |||
9 | #include "camera_system.h" | 9 | #include "camera_system.h" |
10 | #include "animation_system.h" | 10 | #include "animation_system.h" |
11 | #include "character_system.h" | 11 | #include "character_system.h" |
12 | #include "input_system.h" | ||
12 | 13 | ||
13 | void loop(Renderer& renderer, Mixer& mixer) { | 14 | void loop(Renderer& renderer) { |
14 | Game game; | 15 | Game game; |
15 | game.emplaceSystem<TransformSystem>(); | 16 | game.emplaceSystem<TransformSystem>(); |
16 | game.emplaceSystem<CameraSystem>(); | 17 | game.emplaceSystem<InputSystem>(); |
17 | game.emplaceSystem<AnimationSystem>(); | ||
18 | game.emplaceSystem<CharacterSystem>(); | 18 | game.emplaceSystem<CharacterSystem>(); |
19 | 19 | game.emplaceSystem<AnimationSystem>(); | |
20 | Input keystate; | 20 | game.emplaceSystem<CameraSystem>(); |
21 | 21 | ||
22 | auto map = std::make_unique<Map>("../res/map1.tmx", renderer); | 22 | auto map = std::make_unique<Map>("../res/map1.tmx", renderer); |
23 | game.setMap(std::move(map)); | 23 | game.setMap(std::move(map)); |
@@ -25,6 +25,8 @@ void loop(Renderer& renderer, Mixer& mixer) { | |||
25 | int lucasSprite = game.emplaceSprite(); | 25 | int lucasSprite = game.emplaceSprite(); |
26 | game.getSystem<TransformSystem>().initSprite(lucasSprite, {32, 32}); | 26 | game.getSystem<TransformSystem>().initSprite(lucasSprite, {32, 32}); |
27 | game.getSystem<AnimationSystem>().initSprite(lucasSprite, "../res/lucas_anim.txt", renderer); | 27 | game.getSystem<AnimationSystem>().initSprite(lucasSprite, "../res/lucas_anim.txt", renderer); |
28 | game.getSprite(lucasSprite).controllable = true; | ||
29 | game.getSystem<CharacterSystem>().initSprite(lucasSprite); | ||
28 | 30 | ||
29 | int kumaSprite = game.emplaceSprite(); | 31 | int kumaSprite = game.emplaceSprite(); |
30 | game.getSystem<TransformSystem>().initSprite(kumaSprite, {32, 32}); | 32 | game.getSystem<TransformSystem>().initSprite(kumaSprite, {32, 32}); |
@@ -46,8 +48,6 @@ void loop(Renderer& renderer, Mixer& mixer) { | |||
46 | 48 | ||
47 | renderer.render(game); | 49 | renderer.render(game); |
48 | 50 | ||
49 | Timer inputTimer(33); | ||
50 | |||
51 | size_t lastTime = SDL_GetTicks(); | 51 | size_t lastTime = SDL_GetTicks(); |
52 | 52 | ||
53 | for (;;) { | 53 | for (;;) { |
@@ -55,33 +55,15 @@ void loop(Renderer& renderer, Mixer& mixer) { | |||
55 | size_t frameTime = currentTime - lastTime; | 55 | size_t frameTime = currentTime - lastTime; |
56 | lastTime = currentTime; | 56 | lastTime = currentTime; |
57 | 57 | ||
58 | SDL_Event e; | ||
59 | while (SDL_PollEvent(&e)) { | ||
60 | if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) { | ||
61 | return; | ||
62 | } else if (e.type == SDL_KEYDOWN && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { | ||
63 | game.getSystem<CharacterSystem>().beginCrouch(lucasSprite); | ||
64 | } else if (e.type == SDL_KEYUP && (e.key.keysym.sym == SDLK_LSHIFT || e.key.keysym.sym == SDLK_RSHIFT)) { | ||
65 | game.getSystem<CharacterSystem>().endCrouch(lucasSprite); | ||
66 | } | ||
67 | } | ||
68 | |||
69 | const Uint8* state = SDL_GetKeyboardState(NULL); | ||
70 | keystate.left = state[SDL_SCANCODE_LEFT]; | ||
71 | keystate.right = state[SDL_SCANCODE_RIGHT]; | ||
72 | keystate.up = state[SDL_SCANCODE_UP]; | ||
73 | keystate.down = state[SDL_SCANCODE_DOWN]; | ||
74 | |||
75 | inputTimer.accumulate(frameTime); | ||
76 | while (inputTimer.step()) { | ||
77 | game.getSystem<CharacterSystem>().moveSprite(lucasSprite, mixer, keystate); | ||
78 | } | ||
79 | |||
80 | for (System& system : game.systems()) { | 58 | for (System& system : game.systems()) { |
81 | system.tick(frameTime); | 59 | system.tick(frameTime); |
82 | } | 60 | } |
83 | 61 | ||
84 | renderer.render(game); | 62 | renderer.render(game); |
63 | |||
64 | if (game.shouldQuit()) { | ||
65 | return; | ||
66 | } | ||
85 | } | 67 | } |
86 | } | 68 | } |
87 | 69 | ||
@@ -89,9 +71,8 @@ int main(int, char**) { | |||
89 | try | 71 | try |
90 | { | 72 | { |
91 | Renderer renderer; | 73 | Renderer renderer; |
92 | Mixer mixer; | ||
93 | 74 | ||
94 | loop(renderer, mixer); | 75 | loop(renderer); |
95 | } catch (const sdl_error& ex) | 76 | } catch (const sdl_error& ex) |
96 | { | 77 | { |
97 | std::cout << "SDL error (" << ex.what() << ")" << std::endl; | 78 | std::cout << "SDL error (" << ex.what() << ")" << std::endl; |