diff --git a/src/character.cpp b/src/character.cpp index aebdec6..971e4f9 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -20,6 +20,7 @@ #include "character.hpp" #include "inputbag.hpp" #include "gameactions.hpp" +#include "worldgrid.hpp" #include #include @@ -32,9 +33,11 @@ namespace curry { m_position(vec2f(0.0f), vec2f(0.0f), vec2f(0.0f)), m_width_height(0.0f), m_input_bag(parInputBag), + m_world(parDeferredRegister.world()), m_speed(1.0f) { assert(m_input_bag); + assert(m_world); } void Character::load (const char* parTexturePath, cloonel::SDLMain& parSDLMain) { @@ -95,7 +98,13 @@ namespace curry { offset.y() -= speed; if (cloonel::IsPressed(*m_input_bag, ActionDown)) offset.y() += speed; - this->set_position(this->position() + offset); + + const auto old_pos = this->position(); + const auto new_pos = old_pos + offset; + + //if (m_world + + this->set_position(new_pos); } void Character::set_speed (float parSpeed) { diff --git a/src/character.hpp b/src/character.hpp index 51fd4a8..008410a 100644 --- a/src/character.hpp +++ b/src/character.hpp @@ -32,6 +32,8 @@ namespace cloonel { } //namespace cloonel namespace curry { + class WorldGrid; + class Character : public WorldSizeNotifiable, public Moveable { public: Character (cloonel::InputBag* parInputBag, const WorldSizeNotifiable::DeferredRegister& parDeferredRegister); @@ -54,6 +56,7 @@ namespace curry { Texture m_texture; vec2f m_width_height; cloonel::InputBag* m_input_bag; + WorldGrid* m_world; float m_speed; }; } //namespace curry diff --git a/src/worldgrid.cpp b/src/worldgrid.cpp index 4a7ee04..6e845c8 100644 --- a/src/worldgrid.cpp +++ b/src/worldgrid.cpp @@ -121,4 +121,18 @@ namespace curry { vec2i world_size_pixel (const WorldGrid& parWorld) { return parWorld.tile_size() * parWorld.world_size(); } + + vec2us pixel_to_world_tile (const WorldGrid& parWorld, const vec2i& parPos) { + assert(position_is_on_map(parWorld, parPos)); + return vector_cast( + parPos / vector_cast(parWorld.tile_size()) + ); + } + + bool position_is_on_map (const WorldGrid& parWorld, const vec2i& parPos) { + assert(parWorld.tile_size() > vec2us(0)); + + return parPos >= vec2i(0) and + parPos / vector_cast(parWorld.tile_size()) < parWorld.world_size(); + } } //namespace curry diff --git a/src/worldgrid.hpp b/src/worldgrid.hpp index 6e405a1..1dd94af 100644 --- a/src/worldgrid.hpp +++ b/src/worldgrid.hpp @@ -57,4 +57,6 @@ namespace curry { }; vec2i world_size_pixel (const WorldGrid& parWorld); + vec2us pixel_to_world_tile (const WorldGrid& parWorld, const vec2i& parPos); + bool position_is_on_map (const WorldGrid& parWorld, const vec2i& parPos); } //namespace curry