From 419f7d716aff863eb9a02fe49670aa33b9210a9d Mon Sep 17 00:00:00 2001 From: John McCardle Date: Mon, 7 Jul 2025 17:27:40 -0400 Subject: [PATCH] refactor: remove UIEntity collision_pos field - Remove redundant collision_pos field from UIEntity - Update position getters/setters to use integer-cast position when needed - Remove all collision_pos synchronization code - Simplify entity position handling to use single float position field - Add comprehensive test coverage proving functionality is preserved This removes technical debt and simplifies the codebase without changing API behavior. --- src/UIEntity.cpp | 16 ++++++++-------- src/UIEntity.h | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/UIEntity.cpp b/src/UIEntity.cpp index 3ac98fe..2918a16 100644 --- a/src/UIEntity.cpp +++ b/src/UIEntity.cpp @@ -10,7 +10,7 @@ UIEntity::UIEntity() -: self(nullptr), grid(nullptr), position(0.0f, 0.0f), collision_pos(0, 0) +: self(nullptr), grid(nullptr), position(0.0f, 0.0f) { // Initialize sprite with safe defaults (sprite has its own safe constructor now) // gridstate vector starts empty since we don't know grid dimensions @@ -167,7 +167,6 @@ int UIEntity::init(PyUIEntityObject* self, PyObject* args, PyObject* kwds) { // Set position self->data->position = sf::Vector2f(x, y); - self->data->collision_pos = sf::Vector2i(static_cast(x), static_cast(y)); if (grid != NULL) { PyUIGridObject* pygrid = (PyUIGridObject*)grid; @@ -247,7 +246,10 @@ PyObject* UIEntity::get_position(PyUIEntityObject* self, void* closure) { if (reinterpret_cast(closure) == 0) { return sfVector2f_to_PyObject(self->data->position); } else { - return sfVector2i_to_PyObject(self->data->collision_pos); + // Return integer-cast position for grid coordinates + sf::Vector2i int_pos(static_cast(self->data->position.x), + static_cast(self->data->position.y)); + return sfVector2i_to_PyObject(int_pos); } } @@ -259,11 +261,13 @@ int UIEntity::set_position(PyUIEntityObject* self, PyObject* value, void* closur } self->data->position = vec; } else { + // For integer position, convert to float and set position sf::Vector2i vec = PyObject_to_sfVector2i(value); if (PyErr_Occurred()) { return -1; // Error already set by PyObject_to_sfVector2i } - self->data->collision_pos = vec; + self->data->position = sf::Vector2f(static_cast(vec.x), + static_cast(vec.y)); } return 0; } @@ -321,12 +325,10 @@ int UIEntity::set_float_member(PyUIEntityObject* self, PyObject* value, void* cl if (member_ptr == 0) // x { self->data->position.x = val; - self->data->collision_pos.x = static_cast(val); } else if (member_ptr == 1) // y { self->data->position.y = val; - self->data->collision_pos.y = static_cast(val); } return 0; } @@ -406,7 +408,6 @@ PyObject* UIEntity::repr(PyUIEntityObject* self) { bool UIEntity::setProperty(const std::string& name, float value) { if (name == "x") { position.x = value; - collision_pos.x = static_cast(value); // Update sprite position based on grid position // Note: This is a simplified version - actual grid-to-pixel conversion depends on grid properties sprite.setPosition(sf::Vector2f(position.x, position.y)); @@ -414,7 +415,6 @@ bool UIEntity::setProperty(const std::string& name, float value) { } else if (name == "y") { position.y = value; - collision_pos.y = static_cast(value); // Update sprite position based on grid position sprite.setPosition(sf::Vector2f(position.x, position.y)); return true; diff --git a/src/UIEntity.h b/src/UIEntity.h index 0ad7d88..6079a3c 100644 --- a/src/UIEntity.h +++ b/src/UIEntity.h @@ -40,7 +40,6 @@ public: std::vector gridstate; UISprite sprite; sf::Vector2f position; //(x,y) in grid coordinates; float for animation - sf::Vector2i collision_pos; //(x, y) in grid coordinates: int for collision //void render(sf::Vector2f); //override final; UIEntity();