diff --git a/DogTales/dog/dogtales.cpp b/DogTales/dog/dogtales.cpp index 1e86c9a..f563401 100644 --- a/DogTales/dog/dogtales.cpp +++ b/DogTales/dog/dogtales.cpp @@ -1,4 +1,5 @@ #include +#include namespace dog { DogTales::DogTales(bave::App& app) : bave::Driver(app), m_player(app, world_space_v) {} @@ -6,6 +7,22 @@ DogTales::DogTales(bave::App& app) : bave::Driver(app), m_player(app, world_spac void DogTales::tick() { auto const dt = get_app().get_dt(); + //ImGui calls + if constexpr (bave::imgui_v) { + if (ImGui::Begin("Debug")) { + if(ImGui::BeginTabBar("Main")) { + if (ImGui::BeginTabItem("Player")) { + bave::im_text("Controller States"); + ImGui::Separator(); + ImGui::Text("Test (Press 'T'): %.2f", m_player.get_controller_state("test")); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + } + ImGui::End(); + } + // Update player m_player.tick(dt); } diff --git a/DogTales/dog/player.cpp b/DogTales/dog/player.cpp index e8387ca..63d1893 100644 --- a/DogTales/dog/player.cpp +++ b/DogTales/dog/player.cpp @@ -8,13 +8,9 @@ Player::Player(bave::App& app, glm::vec2 const world_space) : m_app(app), m_worl void Player::tick(bave::Seconds const dt) { m_physics.tick(dt); + m_player_controller.tick(dt, m_app); - auto const& key_state = m_app.get_key_state(); auto direction = glm::vec2{}; - if (key_state.is_pressed(bave::Key::eW) || key_state.is_pressed(bave::Key::eUp)) { direction.y += 1.0f; } - if (key_state.is_pressed(bave::Key::eS) || key_state.is_pressed(bave::Key::eDown)) { direction.y -= 1.0f; } - if (key_state.is_pressed(bave::Key::eA) || key_state.is_pressed(bave::Key::eLeft)) { direction.x -= 1.0f; } - if (key_state.is_pressed(bave::Key::eD) || key_state.is_pressed(bave::Key::eRight)) { direction.x += 1.0f; } if (direction.x != 0.0f || direction.y != 0.0f) { direction = glm::normalize(direction); @@ -27,6 +23,12 @@ void Player::tick(bave::Seconds const dt) { void Player::draw(bave::Shader& shader) const { m_sprite.draw(shader); } +float const Player::get_controller_state(std::string key) { + try { + return m_player_controller.key_map[key]; + } catch (std::out_of_range const& oor) { return -1.f; } +} + void Player::handle_wall_collision() { auto& position = m_physics.position; // bounce_rect represents the play area for the sprite, ie the limits for its centre. diff --git a/DogTales/dog/player.hpp b/DogTales/dog/player.hpp index 07e51a2..8066866 100644 --- a/DogTales/dog/player.hpp +++ b/DogTales/dog/player.hpp @@ -2,6 +2,7 @@ #include #include #include "components/physics.hpp" +#include "player/PlayerController.hpp" namespace dog { class Player { @@ -15,6 +16,7 @@ class Player { bave::Sprite m_sprite{}; component::Physics m_physics{}; + player::PlayerController m_player_controller{}; void handle_wall_collision(); @@ -23,5 +25,7 @@ class Player { void tick(bave::Seconds dt); void draw(bave::Shader& shader) const; + + float const get_controller_state(std::string key); }; } // namespace dog diff --git a/DogTales/dog/player/PlayerController.cpp b/DogTales/dog/player/PlayerController.cpp new file mode 100644 index 0000000..564d5e3 --- /dev/null +++ b/DogTales/dog/player/PlayerController.cpp @@ -0,0 +1,13 @@ +#include "PlayerController.hpp" +#include + +namespace dog::player { + +PlayerController::PlayerController() { key_map.insert(std::make_pair("test", 0.f)); } + +void PlayerController::tick(bave::Seconds dt, const bave::App& app) { + auto const& key_state = app.get_key_state(); + key_map["test"] = key_state.is_pressed(bave::Key::eT) ? 1.f : 0.f; +} + +} // namespace dog::player diff --git a/DogTales/dog/player/PlayerController.hpp b/DogTales/dog/player/PlayerController.hpp new file mode 100644 index 0000000..84642b3 --- /dev/null +++ b/DogTales/dog/player/PlayerController.hpp @@ -0,0 +1,16 @@ +#pragma once +#include + +namespace dog::player { +class PlayerController { + + public: + + PlayerController(); + + void tick(bave::Seconds dt, const bave::App& app); + + std::unordered_map key_map{}; + +}; +} // namespace dog::player