From e733bc930f88e773aafb2f0c72b4cd2713e22dc0 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sun, 28 Jan 2024 11:36:02 -0600 Subject: [PATCH] [jasper/world] Double the dimensions of collision tiles --- .../include/jasper/world/worldobject.hpp | 4 ++- .../worldobjectseteditor/collisionmapview.cpp | 28 +++++++++---------- .../worldobjectseteditor/collisionmapview.hpp | 8 ++++-- .../commands/editobject.cpp | 2 +- .../commands/editobject.hpp | 6 ++-- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/jasper/modules/world/include/jasper/world/worldobject.hpp b/src/jasper/modules/world/include/jasper/world/worldobject.hpp index a52edcc..38abdc6 100644 --- a/src/jasper/modules/world/include/jasper/world/worldobject.hpp +++ b/src/jasper/modules/world/include/jasper/world/worldobject.hpp @@ -25,6 +25,8 @@ oxModelBegin(PaletteCycle) oxModelEnd() +using CollisionMap = uint32_t; + struct WorldObject { static constexpr auto TypeName = "net.drinkingtea.jasper.world.WorldObject"; static constexpr auto TypeVersion = 1; @@ -33,7 +35,7 @@ struct WorldObject { ox::String name; uint16_t palBank{}; ncore::SubSheetId subsheetId{}; - uint64_t collisionMap{}; + CollisionMap collisionMap{}; }; oxModelBegin(WorldObject) diff --git a/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.cpp b/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.cpp index 9d33ace..6b4ad32 100644 --- a/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.cpp +++ b/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.cpp @@ -6,8 +6,9 @@ namespace jasper::world { -uint64_t mapIdx(auto x, auto y) noexcept { - return static_cast(y) * 8 + static_cast(x); +CollisionMap mapIdx(auto x, auto y) noexcept { + return static_cast(y) * static_cast(sizeof(CollisionMap)) + + static_cast(x); } const glutils::ProgramSource CollisionView::s_programSrc = { @@ -61,7 +62,7 @@ ox::Error CollisionView::setup( int const w, int h, uint_t tile, - uint64_t colMap) noexcept { + CollisionMap colMap) noexcept { m_subsheetTilesWidth = w; m_subsheetTilesHeight = h; m_sheetTileStart = tile; @@ -75,7 +76,6 @@ ox::Error CollisionView::setup( void CollisionView::draw() noexcept { glutils::FrameBufferBind const frameBufferBind(m_frameBuffer); ncore::gl::draw(*m_nctx, s_scale); - //glViewport(0, 0, m_frameBuffer.width, m_frameBuffer.height); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glUseProgram(m_shader); @@ -103,14 +103,12 @@ void CollisionView::setPixelBufferObject( bool const selected, float *vbo, GLuint *ebo) const noexcept { - auto constexpr xmod = static_cast(ncore::TileWidth) / 240.f * 2; - auto constexpr ymod = static_cast(ncore::TileHeight) / 160.f * 2; + auto constexpr xmod = static_cast(ncore::TileWidth) / 240.f * 4; + auto constexpr ymod = static_cast(ncore::TileHeight) / 160.f * 4; x *= xmod; y *= -ymod; x -= 1.0f; y += 1.0f - ymod; - //x = -1; - //y = -1; auto const selection = 1.f * static_cast(selected); // don't worry, these memcpys gets optimized to something much more ideal std::array const vertices{ @@ -127,19 +125,19 @@ void CollisionView::setPixelBufferObject( memcpy(ebo, elms.data(), sizeof(elms)); } -bool CollisionView::click(ox::Vec2 const&pos, uint64_t &colMap) noexcept { +bool CollisionView::click(ox::Vec2 const&pos, CollisionMap &colMap) noexcept { auto const inMap = colMap; - auto const x = static_cast(pos.x * static_cast(m_subsheetTilesWidth)); - auto const y = static_cast(pos.y * static_cast(m_subsheetTilesHeight)); + auto const x = static_cast(pos.x * static_cast(m_subsheetTilesWidth)) / 2; + auto const y = static_cast(pos.y * static_cast(m_subsheetTilesHeight)) / 2; uint64_t const idx = mapIdx(x, y); - uint64_t const colOn = (colMap >> idx) & 1; - colMap ^= uint64_t{1} << idx; - colMap |= static_cast(!colOn) << idx; + CollisionMap const colOn = (colMap >> idx) & 1; + colMap ^= CollisionMap{1} << idx; + colMap |= static_cast(!colOn) << idx; buildGlBuffers(colMap); return inMap != colMap; } -void CollisionView::buildGlBuffers(uint64_t colMap) noexcept { +void CollisionView::buildGlBuffers(CollisionMap colMap) noexcept { auto const vboLength = static_cast(s_programSrc.rowLen) * 4; auto constexpr eboLength = 6; auto const tileCnt = diff --git a/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.hpp b/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.hpp index 9652ed1..d009dd7 100644 --- a/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.hpp +++ b/src/jasper/modules/world/src/studio/worldobjectseteditor/collisionmapview.hpp @@ -9,6 +9,8 @@ #include #include +#include + namespace jasper::world { namespace ncore = nostalgia::core; @@ -34,7 +36,7 @@ class CollisionView { int w, int h, uint_t tile, - uint64_t colMap) noexcept; + CollisionMap colMap) noexcept; void draw() noexcept; @@ -54,10 +56,10 @@ class CollisionView { /** * @return true if colMap changes */ - bool click(ox::Vec2 const&pos, uint64_t &colMap) noexcept; + bool click(ox::Vec2 const&pos, CollisionMap &colMap) noexcept; private: - void buildGlBuffers(uint64_t colMap) noexcept; + void buildGlBuffers(CollisionMap colMap) noexcept; }; diff --git a/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.cpp b/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.cpp index 22475c1..a552abf 100644 --- a/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.cpp +++ b/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.cpp @@ -89,7 +89,7 @@ int EditObjectPalette::commandId() const noexcept { } -EditObjectCollisionMap::EditObjectCollisionMap(WorldObjectSet &doc, size_t objIdx, uint64_t colMap) noexcept: +EditObjectCollisionMap::EditObjectCollisionMap(WorldObjectSet &doc, size_t objIdx, CollisionMap colMap) noexcept: m_doc(doc), m_objIdx(objIdx), m_oldVal(m_doc.objects[m_objIdx].collisionMap), diff --git a/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.hpp b/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.hpp index 65a31da..bb62cd5 100644 --- a/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.hpp +++ b/src/jasper/modules/world/src/studio/worldobjectseteditor/commands/editobject.hpp @@ -59,10 +59,10 @@ class EditObjectCollisionMap: public studio::UndoCommand { private: WorldObjectSet &m_doc; size_t const m_objIdx{}; - uint64_t const m_oldVal{}; - uint64_t const m_newVal{}; + CollisionMap const m_oldVal{}; + CollisionMap const m_newVal{}; public: - EditObjectCollisionMap(WorldObjectSet &doc, size_t objIdx, uint64_t colMap) noexcept; + EditObjectCollisionMap(WorldObjectSet &doc, size_t objIdx, CollisionMap colMap) noexcept; void redo() noexcept override; void undo() noexcept override; [[nodiscard]]