From 06cd0a9a9e26a80ef5b8b689f0802403d828c379 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 23 Feb 2022 10:04:52 +0100 Subject: [PATCH] Now tiled wall is editable in the editor with the rect selection thing. --- prop_2d_mesher.cpp | 18 ++++++++++++++++++ prop_2d_mesher.h | 2 ++ tiled_wall/tiled_wall_2d.cpp | 17 +++++++++++++++-- tiled_wall/tiled_wall_2d.h | 9 ++++++++- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/prop_2d_mesher.cpp b/prop_2d_mesher.cpp index 50bae00..59b9562 100644 --- a/prop_2d_mesher.cpp +++ b/prop_2d_mesher.cpp @@ -784,6 +784,24 @@ PoolVector Prop2DMesher::build_collider() const { return face_points; } +Rect2 Prop2DMesher::calculate_rect() { + int size = _vertices.size(); + + if (size == 0) { + return Rect2(); + } + + Rect2 rect; + + rect.position = _vertices[0].vertex; + + for (int i = 1; i < size; ++i) { + rect.expand_to(_vertices[i].vertex); + } + + return rect; +} + void Prop2DMesher::bake_colors() { if ((get_build_flags() & Prop2DMesher::BUILD_FLAG_USE_LIGHTING) == 0) { return; diff --git a/prop_2d_mesher.h b/prop_2d_mesher.h index 751b6ec..faab152 100644 --- a/prop_2d_mesher.h +++ b/prop_2d_mesher.h @@ -157,6 +157,8 @@ public: PoolVector build_collider() const; + Rect2 calculate_rect(); + void bake_colors(); void bake_colors_rao(); void bake_colors_lights_rao(); diff --git a/tiled_wall/tiled_wall_2d.cpp b/tiled_wall/tiled_wall_2d.cpp index 667d990..de010ca 100644 --- a/tiled_wall/tiled_wall_2d.cpp +++ b/tiled_wall/tiled_wall_2d.cpp @@ -64,8 +64,8 @@ void TiledWall2D::set_data(const Ref &data) { call_deferred("refresh"); } -AABB TiledWall2D::get_aabb() const { - return AABB(); +Rect2 TiledWall2D::get_rect() const { + return _rect; } PoolVector TiledWall2D::get_faces(uint32_t p_usage_flags) const { @@ -98,6 +98,17 @@ PoolVector TiledWall2D::get_faces(uint32_t p_usage_flags) const { return faces; } +#ifdef TOOLS_ENABLED +bool TiledWall2D::_edit_use_rect() const { + return true; +} + +Rect2 TiledWall2D::_edit_get_rect() const { + return get_rect(); +} + +#endif + void TiledWall2D::refresh() { if (!is_inside_tree()) { return; @@ -177,6 +188,8 @@ void TiledWall2D::generate_mesh() { _mesher->add_tiled_wall_simple(_width, _height, Transform2D(), _data, _cache); _mesher->bake_colors(); + _rect = _mesher->calculate_rect(); + _mesh_array = _mesher->build_mesh(); if (_mesh_array.size() != Mesh::ARRAY_MAX) { diff --git a/tiled_wall/tiled_wall_2d.h b/tiled_wall/tiled_wall_2d.h index cd4ccc8..6dc158c 100644 --- a/tiled_wall/tiled_wall_2d.h +++ b/tiled_wall/tiled_wall_2d.h @@ -51,9 +51,14 @@ public: Ref get_data(); void set_data(const Ref &data); - AABB get_aabb() const; + Rect2 get_rect() const; PoolVector get_faces(uint32_t p_usage_flags) const; +#ifdef TOOLS_ENABLED + virtual bool _edit_use_rect() const; + virtual Rect2 _edit_get_rect() const; +#endif + void refresh(); void generate_mesh(); void clear_mesh(); @@ -80,6 +85,8 @@ private: RID _mesh_rid; RID _texture_rid; + Rect2 _rect; + Array _mesh_array; };