Skip to content

Commit

Permalink
Modified my WASD movement from if else if blocks to using an unordere…
Browse files Browse the repository at this point in the history
…d_map.

Removed unused include, removed unused variables.

Currently working on adding flags to allow diagonal movement. And stoping movement on key_release.
  • Loading branch information
A-rms committed Jan 29, 2024
1 parent a5f3e77 commit 2f70902
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 32 deletions.
1 change: 0 additions & 1 deletion DogTales/src/dogtales.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include <src/dogtales.hpp>
#include "bave/input/action.hpp"

DogTales::DogTales(bave::App& app) : bave::Driver(app) {}

Expand Down
38 changes: 19 additions & 19 deletions DogTales/src/player.cpp
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
#include <src/player.hpp>

Player::Player(glm::vec2 const world_space) : m_world_space(world_space), m_vel(0.0f, 0.0f) {
m_sprite.set_size(size_v);
}
Player::Player(glm::vec2 const world_space) : m_world_space(world_space) { m_sprite.set_size(size_v); }

void Player::tick(bave::Seconds const dt) {
// Update the player's position based on velocity.
// Update the player's movement based on velocity.
m_sprite.transform.position += m_vel * dt.count();

handle_wall_collision();
}

void Player::draw(bave::Shader& shader) const { m_sprite.draw(shader); }

void Player::update_movement(float dx, float dy) {
// Modify the player's movement based on the specified direction.
// Adjust this function based on your game logic.
m_vel.x = dx * speed_v.x;
m_vel.y = dy * speed_v.y;
void Player::update_movement(glm::vec2 const& direction) {
// Normalize the direction vector
glm::vec2 normalized_direction = glm::normalize(direction);

// Apply speed to the normalized direction vector
m_vel = normalized_direction * speed_v;
}

void Player::handle_input(bave::KeyInput const& key_input) {
// Update the velocity based on WASD input
if (key_input.key == bave::Key::eW) {
update_movement(0, 1);
} else if (key_input.key == bave::Key::eA) {
update_movement(-1, 0);
} else if (key_input.key == bave::Key::eS) {
update_movement(0, -1);
} else if (key_input.key == bave::Key::eD) {
update_movement(1, 0);
}
// Mapping keys to direction offsets
std::unordered_map<bave::Key, glm::vec2> keyMappings{
{bave::Key::eW, {0.0f, 1.0f}},
{bave::Key::eA, {-1.0f, 0.0f}},
{bave::Key::eS, {0.0f, -1.0f}},
{bave::Key::eD, {1.0f, 0.0f}},
};

// Check if the pressed key has a corresponding direction in the map
auto it = keyMappings.find(key_input.key);
if (it != keyMappings.end()) { update_movement(it->second); }
}

void Player::handle_wall_collision() {
Expand Down
15 changes: 3 additions & 12 deletions DogTales/src/player.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once
#include <bave/app.hpp>
#include <bave/graphics/sprite.hpp>
#include <unordered_set>

class Player {
static constexpr glm::vec2 speed_v{500.0f, 500.0f};
Expand All @@ -10,17 +11,7 @@ class Player {

bave::Sprite m_sprite{};

glm::vec2 m_vel{speed_v};

// X and Y postitions of the player.
float m_x_pos{};
float m_y_pos{};

// X and Y speeds of the player.
float m_x_speed{};
float m_y_speed{};

static constexpr float groundLevel = 0.0f;
glm::vec2 m_vel{};

void handle_wall_collision();

Expand All @@ -31,5 +22,5 @@ class Player {

void tick(bave::Seconds dt);
void draw(bave::Shader& shader) const;
void update_movement(float dx, float dy);
void update_movement(glm::vec2 const& direction);
};

0 comments on commit 2f70902

Please sign in to comment.