diff options
| -rw-r--r-- | res/feather_pen.png | bin | 0 -> 190 bytes | |||
| -rw-r--r-- | src/menu_system.cpp | 17 | ||||
| -rw-r--r-- | src/menu_system.h | 9 | ||||
| -rw-r--r-- | src/renderer.cpp | 12 |
4 files changed, 38 insertions, 0 deletions
| diff --git a/res/feather_pen.png b/res/feather_pen.png new file mode 100644 index 0000000..281f4d3 --- /dev/null +++ b/res/feather_pen.png | |||
| Binary files differ | |||
| diff --git a/src/menu_system.cpp b/src/menu_system.cpp index 00c4849..acbfd76 100644 --- a/src/menu_system.cpp +++ b/src/menu_system.cpp | |||
| @@ -12,6 +12,23 @@ void MenuSystem::tick(double dt) { | |||
| 12 | } else if (pauseAnimation_.getProgress() == 1.0) { | 12 | } else if (pauseAnimation_.getProgress() == 1.0) { |
| 13 | openState_ = OpenState::Open; | 13 | openState_ = OpenState::Open; |
| 14 | } | 14 | } |
| 15 | } else if (openState_ == OpenState::Open) { | ||
| 16 | cursorBobTimer_.accumulate(dt); | ||
| 17 | while (cursorBobTimer_.step()) { | ||
| 18 | if (cursorBobDown_) { | ||
| 19 | cursorBob_++; | ||
| 20 | |||
| 21 | if (cursorBob_ >= 4) { | ||
| 22 | cursorBobDown_ = false; | ||
| 23 | } | ||
| 24 | } else { | ||
| 25 | cursorBob_--; | ||
| 26 | |||
| 27 | if (cursorBob_ <= 0) { | ||
| 28 | cursorBobDown_ = true; | ||
| 29 | } | ||
| 30 | } | ||
| 31 | } | ||
| 15 | } | 32 | } |
| 16 | } | 33 | } |
| 17 | 34 | ||
| diff --git a/src/menu_system.h b/src/menu_system.h index 56f84d5..9cbd1f0 100644 --- a/src/menu_system.h +++ b/src/menu_system.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include "interpolation.h" | 5 | #include "interpolation.h" |
| 6 | #include "menu.h" | 6 | #include "menu.h" |
| 7 | #include "system.h" | 7 | #include "system.h" |
| 8 | #include "timer.h" | ||
| 8 | 9 | ||
| 9 | class Game; | 10 | class Game; |
| 10 | 11 | ||
| @@ -31,6 +32,10 @@ public: | |||
| 31 | 32 | ||
| 32 | const std::vector<MenuItem>& getMenu() const { return menu_; } | 33 | const std::vector<MenuItem>& getMenu() const { return menu_; } |
| 33 | 34 | ||
| 35 | int getCursorPosition() const { return cursor_; } | ||
| 36 | |||
| 37 | int getCursorBob() const { return cursorBob_; } | ||
| 38 | |||
| 34 | private: | 39 | private: |
| 35 | 40 | ||
| 36 | enum class OpenState { | 41 | enum class OpenState { |
| @@ -43,6 +48,10 @@ private: | |||
| 43 | Interpolation pauseAnimation_; | 48 | Interpolation pauseAnimation_; |
| 44 | OpenState openState_ = OpenState::Closed; | 49 | OpenState openState_ = OpenState::Closed; |
| 45 | std::vector<MenuItem> menu_; | 50 | std::vector<MenuItem> menu_; |
| 51 | int cursor_ = 0; | ||
| 52 | int cursorBob_ = 0; | ||
| 53 | bool cursorBobDown_ = true; | ||
| 54 | Timer cursorBobTimer_ { 125 }; | ||
| 46 | }; | 55 | }; |
| 47 | 56 | ||
| 48 | #endif /* end of include guard: MENU_SYSTEM_H_205861EC */ | 57 | #endif /* end of include guard: MENU_SYSTEM_H_205861EC */ |
| diff --git a/src/renderer.cpp b/src/renderer.cpp index 14eefea..fc16e20 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
| @@ -559,6 +559,7 @@ void Renderer::renderMenu(Game& game) { | |||
| 559 | 559 | ||
| 560 | const int lineHeight = 16; | 560 | const int lineHeight = 16; |
| 561 | int totalHeight = menus.getMenu().size() * lineHeight; | 561 | int totalHeight = menus.getMenu().size() * lineHeight; |
| 562 | std::vector<vec2i> positions; | ||
| 562 | 563 | ||
| 563 | int index = 0; | 564 | int index = 0; |
| 564 | for (const MenuItem& menuItem : menus.getMenu()) { | 565 | for (const MenuItem& menuItem : menus.getMenu()) { |
| @@ -577,11 +578,22 @@ void Renderer::renderMenu(Game& game) { | |||
| 577 | SDL_SetRenderTarget(ren_.get(), menuTex_.get()); | 578 | SDL_SetRenderTarget(ren_.get(), menuTex_.get()); |
| 578 | SDL_RenderCopy(ren_.get(), output.renderedTex.get(), nullptr, &dest); | 579 | SDL_RenderCopy(ren_.get(), output.renderedTex.get(), nullptr, &dest); |
| 579 | 580 | ||
| 581 | positions.emplace_back(dest.x, dest.y); | ||
| 582 | |||
| 580 | break; | 583 | break; |
| 581 | } | 584 | } |
| 582 | } | 585 | } |
| 586 | |||
| 583 | index++; | 587 | index++; |
| 584 | } | 588 | } |
| 589 | |||
| 590 | int cursorTexId = loadImageFromFile("../res/feather_pen.png"); | ||
| 591 | const SDL_Rect cursorDest { | ||
| 592 | positions[menus.getCursorPosition()].x() - 2 - 16 - menus.getCursorBob(), | ||
| 593 | positions[menus.getCursorPosition()].y() - 8 - menus.getCursorBob(), | ||
| 594 | 16, | ||
| 595 | 16 }; | ||
| 596 | SDL_RenderCopy(ren_.get(), textures_.at(cursorTexId).get(), nullptr, &cursorDest); | ||
| 585 | } | 597 | } |
| 586 | 598 | ||
| 587 | int Renderer::loadImageFromFile(std::string filename) { | 599 | int Renderer::loadImageFromFile(std::string filename) { |
