From eb9db31d312b811eecfc5bd8b858d870d48d4602 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Mon, 28 Jul 2025 14:25:28 +0300 Subject: [PATCH] Remove colliderAllocated flag --- src/DrawComponents/DrawBrushStroke.cpp | 30 +++++-------------- src/DrawComponents/DrawBrushStroke.hpp | 7 ++--- src/DrawComponents/DrawComponent.cpp | 14 ++++----- src/DrawComponents/DrawComponent.hpp | 13 ++++---- src/DrawComponents/DrawEllipse.cpp | 10 ++----- src/DrawComponents/DrawEllipse.hpp | 7 ++--- src/DrawComponents/DrawImage.cpp | 10 ++----- src/DrawComponents/DrawImage.hpp | 7 ++--- src/DrawComponents/DrawRectangle.cpp | 10 ++----- src/DrawComponents/DrawRectangle.hpp | 7 ++--- src/DrawComponents/DrawTextBox.cpp | 10 ++----- src/DrawComponents/DrawTextBox.hpp | 7 ++--- src/DrawingProgram/DrawingProgram.cpp | 12 -------- src/DrawingProgram/DrawingProgram.hpp | 5 ---- .../DrawingProgramSelection.cpp | 2 +- src/DrawingProgram/EditTool.cpp | 4 +-- src/DrawingProgram/EraserTool.cpp | 2 +- src/DrawingProgram/TextBoxTool.cpp | 4 +-- 18 files changed, 44 insertions(+), 117 deletions(-) diff --git a/src/DrawComponents/DrawBrushStroke.cpp b/src/DrawComponents/DrawBrushStroke.cpp index d0184d5..596fe7d 100644 --- a/src/DrawComponents/DrawBrushStroke.cpp +++ b/src/DrawComponents/DrawBrushStroke.cpp @@ -333,7 +333,7 @@ void DrawBrushStroke::create_triangles(const std::function& vertexDataPtr, co void DrawBrushStroke::update(DrawingProgram& drawP) { } -bool DrawBrushStroke::collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) { - if(colliderAllocated) - return collisionTree.is_collide(checkAgainst); - +bool DrawBrushStroke::collides_within_coords(const SCollision::ColliderCollection& checkAgainst) { if(!SCollision::collide(checkAgainst, collisionTree.objects.bounds)) return false; @@ -402,17 +399,6 @@ bool DrawBrushStroke::collides_within_coords(const SCollision::ColliderCollectio return toRet; } -void DrawBrushStroke::free_collider() { - collisionTree.objects.aabb.clear(); - collisionTree.objects.circle.clear(); - collisionTree.objects.triangle.clear(); - collisionTree.children.clear(); -} - -void DrawBrushStroke::allocate_collider() { - create_collider(true); -} - SCollision::AABB DrawBrushStroke::get_obj_coord_bounds() const { return collisionTree.objects.bounds; } diff --git a/src/DrawComponents/DrawBrushStroke.hpp b/src/DrawComponents/DrawBrushStroke.hpp index 7966785..55f4589 100644 --- a/src/DrawComponents/DrawBrushStroke.hpp +++ b/src/DrawComponents/DrawBrushStroke.hpp @@ -37,13 +37,10 @@ class DrawBrushStroke : public DrawComponent { virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual void initialize_draw_data(DrawingProgram& drawP) override; virtual void update(DrawingProgram& drawP) override; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) override; - virtual void create_collider(bool colliderAllocated) override; + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) override; + virtual void create_collider() override; virtual void update_from_delayed_ptr() override; - virtual void free_collider() override; - virtual void allocate_collider() override; - virtual SCollision::AABB get_obj_coord_bounds() const override; sk_sp vertices; diff --git a/src/DrawComponents/DrawComponent.cpp b/src/DrawComponents/DrawComponent.cpp index eb12b47..11240d1 100644 --- a/src/DrawComponents/DrawComponent.cpp +++ b/src/DrawComponents/DrawComponent.cpp @@ -172,19 +172,19 @@ void DrawComponent::client_send_erase_set(DrawingProgram& drawP, const std::unor void DrawComponent::finalize_update(DrawingProgram& drawP, bool invalidateCache) { if(invalidateCache && collabListInfo.lock()) drawP.compCache.preupdate_component(collabListInfo.lock()); - create_collider(drawP.colliderAllocated); + create_collider(); } -bool DrawComponent::collides_with_world_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, bool colliderAllocated) { - return collides_with(camCoords, checkAgainstWorld, camCoords.world_collider_to_coords>(checkAgainstWorld), colliderAllocated); +bool DrawComponent::collides_with_world_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld) { + return collides_with(camCoords, checkAgainstWorld, camCoords.world_collider_to_coords>(checkAgainstWorld)); } -bool DrawComponent::collides_with_cam_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstCam, bool colliderAllocated) { - return collides_with(camCoords, camCoords.collider_to_world>(checkAgainstCam), checkAgainstCam, colliderAllocated); +bool DrawComponent::collides_with_cam_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstCam) { + return collides_with(camCoords, camCoords.collider_to_world>(checkAgainstCam), checkAgainstCam); } // We could just send one of the checkAgainst colliders, since they represent the same thing, but sending both saves on redundant transformations, since we can save both of the versions on the executor side -bool DrawComponent::collides_with(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, const SCollision::ColliderCollection& checkAgainstCam, bool colliderAllocated) { +bool DrawComponent::collides_with(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, const SCollision::ColliderCollection& checkAgainstCam) { if((camCoords.inverseScale << DRAWCOMP_MAX_SHIFT_BEFORE_DISAPPEAR) < coords.inverseScale) // Object is too large, just dismiss the collision return false; else if((camCoords.inverseScale >> DRAWCOMP_COLLIDE_MIN_SHIFT_TINY) >= coords.inverseScale) { @@ -200,7 +200,7 @@ bool DrawComponent::collides_with(const CoordSpaceHelper& camCoords, const SColl [&coords = coords](const WorldScalar& a) { return coords.scalar_to_space(a); }); - return collides_within_coords(c, colliderAllocated); + return collides_within_coords(c); } } diff --git a/src/DrawComponents/DrawComponent.hpp b/src/DrawComponents/DrawComponent.hpp index b78c031..2dc8f45 100644 --- a/src/DrawComponents/DrawComponent.hpp +++ b/src/DrawComponents/DrawComponent.hpp @@ -103,7 +103,7 @@ class DrawComponent { virtual SCollision::AABB get_obj_coord_bounds() const = 0; virtual std::shared_ptr copy() const = 0; - virtual void create_collider(bool colliderAllocated) = 0; + virtual void create_collider() = 0; virtual void draw(SkCanvas* canvas, const DrawData& drawData) = 0; void temp_update(DrawingProgram& drawP); void final_update(DrawingProgram& drawP, bool invalidateCache = true); // invalidateCache = false version should be thread safe @@ -111,13 +111,10 @@ class DrawComponent { virtual void initialize_draw_data(DrawingProgram& drawP) = 0; virtual void finalize_update(DrawingProgram& drawP, bool invalidateCache = true); virtual void update(DrawingProgram& drawP) = 0; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) = 0; - bool collides_with_world_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, bool colliderAllocated); - bool collides_with_cam_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstCam, bool colliderAllocated); - bool collides_with(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, const SCollision::ColliderCollection& checkAgainstCam, bool colliderAllocated); + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) = 0; + bool collides_with_world_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld); + bool collides_with_cam_coords(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstCam); + bool collides_with(const CoordSpaceHelper& camCoords, const SCollision::ColliderCollection& checkAgainstWorld, const SCollision::ColliderCollection& checkAgainstCam); virtual void update_from_delayed_ptr() = 0; - - virtual void free_collider() = 0; - virtual void allocate_collider() = 0; #endif }; diff --git a/src/DrawComponents/DrawEllipse.cpp b/src/DrawComponents/DrawEllipse.cpp index 5268efa..7c453a9 100644 --- a/src/DrawComponents/DrawEllipse.cpp +++ b/src/DrawComponents/DrawEllipse.cpp @@ -65,11 +65,11 @@ void DrawEllipse::initialize_draw_data(DrawingProgram& drawP) { void DrawEllipse::update(DrawingProgram& drawP) { } -bool DrawEllipse::collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) { +bool DrawEllipse::collides_within_coords(const SCollision::ColliderCollection& checkAgainst) { return collisionTree.is_collide(checkAgainst); } -void DrawEllipse::create_collider(bool colliderAllocated) { +void DrawEllipse::create_collider() { using namespace SCollision; ColliderCollection strokeObjects; @@ -128,12 +128,6 @@ void DrawEllipse::create_collider(bool colliderAllocated) { calculate_world_bounds(); } -void DrawEllipse::free_collider() { -} - -void DrawEllipse::allocate_collider() { -} - SCollision::AABB DrawEllipse::get_obj_coord_bounds() const { return collisionTree.objects.bounds; } diff --git a/src/DrawComponents/DrawEllipse.hpp b/src/DrawComponents/DrawEllipse.hpp index 58565f9..b15dec7 100644 --- a/src/DrawComponents/DrawEllipse.hpp +++ b/src/DrawComponents/DrawEllipse.hpp @@ -29,13 +29,10 @@ class DrawEllipse : public DrawComponent { virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual void initialize_draw_data(DrawingProgram& drawP) override; virtual void update(DrawingProgram& drawP) override; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) override; + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) override; virtual void update_from_delayed_ptr() override; void create_draw_data(); - virtual void create_collider(bool colliderAllocated) override; - - virtual void free_collider() override; - virtual void allocate_collider() override; + virtual void create_collider() override; virtual SCollision::AABB get_obj_coord_bounds() const override; diff --git a/src/DrawComponents/DrawImage.cpp b/src/DrawComponents/DrawImage.cpp index b8e3b28..d8d3d2e 100644 --- a/src/DrawComponents/DrawImage.cpp +++ b/src/DrawComponents/DrawImage.cpp @@ -70,7 +70,7 @@ void DrawImage::initialize_draw_data(DrawingProgram& drawP) { create_draw_data(); } -bool DrawImage::collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) { +bool DrawImage::collides_within_coords(const SCollision::ColliderCollection& checkAgainst) { return collisionTree.is_collide(checkAgainst); } @@ -78,7 +78,7 @@ void DrawImage::create_draw_data() { imRect = SkRect::MakeLTRB(d.p1.x(), d.p1.y(), d.p2.x(), d.p2.y()); } -void DrawImage::create_collider(bool colliderAllocated) { +void DrawImage::create_collider() { using namespace SCollision; ColliderCollection strokeObjects; std::array newT = triangle_from_rect_points(d.p1, d.p2); @@ -89,12 +89,6 @@ void DrawImage::create_collider(bool colliderAllocated) { calculate_world_bounds(); } -void DrawImage::free_collider() { -} - -void DrawImage::allocate_collider() { -} - SCollision::AABB DrawImage::get_obj_coord_bounds() const { return collisionTree.objects.bounds; } diff --git a/src/DrawComponents/DrawImage.hpp b/src/DrawComponents/DrawImage.hpp index 43b0a15..778a639 100644 --- a/src/DrawComponents/DrawImage.hpp +++ b/src/DrawComponents/DrawImage.hpp @@ -28,14 +28,11 @@ class DrawImage : public DrawComponent { virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual void initialize_draw_data(DrawingProgram& drawP) override; virtual void update(DrawingProgram& drawP) override; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) override; + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) override; void create_draw_data(); - virtual void create_collider(bool colliderAllocated) override; + virtual void create_collider() override; virtual void update_from_delayed_ptr() override; - virtual void free_collider() override; - virtual void allocate_collider() override; - virtual SCollision::AABB get_obj_coord_bounds() const override; SkRect imRect; diff --git a/src/DrawComponents/DrawRectangle.cpp b/src/DrawComponents/DrawRectangle.cpp index 4dea0d7..eb07f7c 100644 --- a/src/DrawComponents/DrawRectangle.cpp +++ b/src/DrawComponents/DrawRectangle.cpp @@ -64,7 +64,7 @@ void DrawRectangle::initialize_draw_data(DrawingProgram& drawP) { create_draw_data(); } -bool DrawRectangle::collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) { +bool DrawRectangle::collides_within_coords(const SCollision::ColliderCollection& checkAgainst) { return collisionTree.is_collide(checkAgainst); } @@ -80,7 +80,7 @@ void DrawRectangle::create_draw_data() { } } -void DrawRectangle::create_collider(bool colliderAllocated) { +void DrawRectangle::create_collider() { using namespace SCollision; ColliderCollection strokeObjects; if(d.fillStrokeMode == 0) { @@ -111,12 +111,6 @@ void DrawRectangle::create_collider(bool colliderAllocated) { calculate_world_bounds(); } -void DrawRectangle::free_collider() { -} - -void DrawRectangle::allocate_collider() { -} - SCollision::AABB DrawRectangle::get_obj_coord_bounds() const { return collisionTree.objects.bounds; } diff --git a/src/DrawComponents/DrawRectangle.hpp b/src/DrawComponents/DrawRectangle.hpp index 5d7dacb..0822686 100644 --- a/src/DrawComponents/DrawRectangle.hpp +++ b/src/DrawComponents/DrawRectangle.hpp @@ -30,14 +30,11 @@ class DrawRectangle : public DrawComponent { virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual void initialize_draw_data(DrawingProgram& drawP) override; virtual void update(DrawingProgram& drawP) override; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) override; + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) override; void create_draw_data(); - virtual void create_collider(bool colliderAllocated) override; + virtual void create_collider() override; virtual void update_from_delayed_ptr() override; - virtual void free_collider() override; - virtual void allocate_collider() override; - virtual SCollision::AABB get_obj_coord_bounds() const override; SkPath rectPath; diff --git a/src/DrawComponents/DrawTextBox.cpp b/src/DrawComponents/DrawTextBox.cpp index 83cd927..ab53492 100644 --- a/src/DrawComponents/DrawTextBox.cpp +++ b/src/DrawComponents/DrawTextBox.cpp @@ -106,11 +106,11 @@ void DrawTextBox::initialize_draw_data(DrawingProgram& drawP) { init_text_box(drawP); } -bool DrawTextBox::collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) { +bool DrawTextBox::collides_within_coords(const SCollision::ColliderCollection& checkAgainst) { return collisionTree.is_collide(checkAgainst); } -void DrawTextBox::create_collider(bool colliderAllocated) { +void DrawTextBox::create_collider() { using namespace SCollision; ColliderCollection strokeObjects; std::array newT = triangle_from_rect_points(d.p1, d.p2); @@ -121,12 +121,6 @@ void DrawTextBox::create_collider(bool colliderAllocated) { calculate_world_bounds(); } -void DrawTextBox::free_collider() { -} - -void DrawTextBox::allocate_collider() { -} - SCollision::AABB DrawTextBox::get_obj_coord_bounds() const { return collisionTree.objects.bounds; } diff --git a/src/DrawComponents/DrawTextBox.hpp b/src/DrawComponents/DrawTextBox.hpp index af49911..0253a4c 100644 --- a/src/DrawComponents/DrawTextBox.hpp +++ b/src/DrawComponents/DrawTextBox.hpp @@ -31,18 +31,15 @@ class DrawTextBox : public DrawComponent { virtual std::shared_ptr copy() const override; virtual void draw(SkCanvas* canvas, const DrawData& drawData) override; virtual void initialize_draw_data(DrawingProgram& drawP) override; - virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst, bool colliderAllocated) override; + virtual bool collides_within_coords(const SCollision::ColliderCollection& checkAgainst) override; virtual void update(DrawingProgram& drawP) override; - virtual void create_collider(bool colliderAllocated) override; + virtual void create_collider() override; virtual void update_from_delayed_ptr() override; void init_text_box(DrawingProgram& drawP); void update_contained_string(DrawingProgram& drawP); void set_textbox_string(const std::string& str); Vector2f get_mouse_pos(DrawingProgram& drawP); - virtual void free_collider() override; - virtual void allocate_collider() override; - virtual SCollision::AABB get_obj_coord_bounds() const override; bool textboxUpdate = false; diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 81a939d..8d3903e 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -173,18 +173,6 @@ void DrawingProgram::check_updateable_components() { comp->update(*this); } -void DrawingProgram::free_collider_memory() { - for(auto& c : components.client_list()) - c->obj->free_collider(); - colliderAllocated = false; -} - -void DrawingProgram::allocate_collider_memory() { - for(auto& c : components.client_list()) - c->obj->allocate_collider(); - colliderAllocated = true; -} - void DrawingProgram::parallel_loop_all_components(std::function, ServerClientID>::ObjectInfo>&)> func) { parallel_loop_container(components.client_list(), func); } diff --git a/src/DrawingProgram/DrawingProgram.hpp b/src/DrawingProgram/DrawingProgram.hpp index e5a6d97..f9ff64b 100644 --- a/src/DrawingProgram/DrawingProgram.hpp +++ b/src/DrawingProgram/DrawingProgram.hpp @@ -40,9 +40,6 @@ class DrawingProgram { void write_to_file(cereal::PortableBinaryOutputArchive& a); World& world; - void free_collider_memory(); - void allocate_collider_memory(); - bool prevent_undo_or_redo(); void add_file_to_canvas_by_path(const std::string& filePath, Vector2f dropPos, bool addInSameThread); @@ -50,8 +47,6 @@ class DrawingProgram { void parallel_loop_all_components(std::function, ServerClientID>::ObjectInfo>&)> func); - bool colliderAllocated = false; - DrawingProgramCache compCache; CollabListType components; diff --git a/src/DrawingProgram/DrawingProgramSelection.cpp b/src/DrawingProgram/DrawingProgramSelection.cpp index a2fb5a1..ef6f34f 100644 --- a/src/DrawingProgram/DrawingProgramSelection.cpp +++ b/src/DrawingProgram/DrawingProgramSelection.cpp @@ -49,7 +49,7 @@ void DrawingProgramSelection::add_from_cam_coord_collider_to_selection(const SCo return true; } std::erase_if(comps, [&](auto& c) { - if(c->obj->collides_with(drawP.world.drawData.cam.c, cCWorld, cC, drawP.colliderAllocated)) { + if(c->obj->collides_with(drawP.world.drawData.cam.c, cCWorld, cC)) { selectedComponents.emplace(c); drawP.compCache.invalidate_cache_at_aabb_before_pos(c->obj->worldAABB.value(), c->obj->collabListInfo.lock()->pos); return true; diff --git a/src/DrawingProgram/EditTool.cpp b/src/DrawingProgram/EditTool.cpp index 7d066a0..b1854f0 100644 --- a/src/DrawingProgram/EditTool.cpp +++ b/src/DrawingProgram/EditTool.cpp @@ -135,7 +135,7 @@ void EditTool::tool_update() { drawP.compCache.traverse_bvh_run_function(mouseAABB, [&](const std::shared_ptr& bvhNode, const std::vector& components) { for(auto& c : components) { - if(c->pos > lastPos && c->obj->collides_with_world_coords(drawP.world.drawData.cam.c, cMouseAABB, drawP.colliderAllocated)) { + if(c->pos > lastPos && c->obj->collides_with_world_coords(drawP.world.drawData.cam.c, cMouseAABB)) { lastSelectedObj = c; lastPos = c->pos; } @@ -165,7 +165,7 @@ void EditTool::tool_update() { break; } } - if(!isMovingPoint && !a->collides_with_cam_coords(drawP.world.drawData.cam.c, cMouseCircle, drawP.colliderAllocated)) + if(!isMovingPoint && !a->collides_with_cam_coords(drawP.world.drawData.cam.c, cMouseCircle)) clickedAway = true; } else if(controls.pointDragging) { diff --git a/src/DrawingProgram/EraserTool.cpp b/src/DrawingProgram/EraserTool.cpp index c43c95b..0f5421e 100644 --- a/src/DrawingProgram/EraserTool.cpp +++ b/src/DrawingProgram/EraserTool.cpp @@ -46,7 +46,7 @@ void EraserTool::tool_update() { return true; } std::erase_if(comps, [&](auto& c) { - if(c->obj->collides_with(drawP.world.drawData.cam.c, cCWorld, cC, drawP.colliderAllocated)) { + if(c->obj->collides_with(drawP.world.drawData.cam.c, cCWorld, cC)) { erasedComponents.emplace(c); drawP.compCache.invalidate_cache_at_aabb_before_pos(c->obj->worldAABB.value(), c->obj->collabListInfo.lock()->pos); return true; diff --git a/src/DrawingProgram/TextBoxTool.cpp b/src/DrawingProgram/TextBoxTool.cpp index 139f755..ab84fbb 100644 --- a/src/DrawingProgram/TextBoxTool.cpp +++ b/src/DrawingProgram/TextBoxTool.cpp @@ -93,7 +93,7 @@ bool TextBoxTool::edit_update(const std::shared_ptr& a) { mousePointCollection.recalculate_bounds(); a->textBox.setWidth(std::abs(a->d.p2.x() - a->d.p1.x())); - a->create_collider(drawP.colliderAllocated); + a->create_collider(); InputManager& input = drawP.world.main.input; auto& textbox = a->textBox; @@ -103,7 +103,7 @@ bool TextBoxTool::edit_update(const std::shared_ptr& a) { bool movedHeld = false; bool collidesWithBox = false; - if(a->collides_with_cam_coords(drawP.world.drawData.cam.c, mousePointCollection, drawP.colliderAllocated)) { + if(a->collides_with_cam_coords(drawP.world.drawData.cam.c, mousePointCollection)) { //drawP.world.main.input.cursorIcon = InputManager::SystemCursorType::TEXT; collidesWithBox = true; }