Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.x] Added a center_offset property to both plane primitive and quad primitive #48763

Merged
merged 1 commit into from
Jul 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions doc/classes/PlaneMesh.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
<methods>
</methods>
<members>
<member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3( 0, 0, 0 )">
Offset from the origin of the generated plane. Useful for particles.
</member>
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2( 2, 2 )">
Size of the generated plane.
</member>
Expand Down
3 changes: 3 additions & 0 deletions doc/classes/QuadMesh.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
<methods>
</methods>
<members>
<member name="center_offset" type="Vector3" setter="set_center_offset" getter="get_center_offset" default="Vector3( 0, 0, 0 )">
Offset of the generated Quad. Useful for particles.
</member>
<member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2( 1, 1 )">
Size on the X and Y axes.
</member>
Expand Down
39 changes: 33 additions & 6 deletions scene/resources/primitive_meshes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ PrimitiveMesh::~PrimitiveMesh() {
}

/**
CapsuleMesh
CapsuleMesh
*/

void CapsuleMesh::_create_mesh_array(Array &p_arr) const {
Expand Down Expand Up @@ -982,7 +982,7 @@ void PlaneMesh::_create_mesh_array(Array &p_arr) const {
u /= (subdivide_w + 1.0);
v /= (subdivide_d + 1.0);

points.push_back(Vector3(-x, 0.0, -z));
points.push_back(Vector3(-x, 0.0, -z) + center_offset);
normals.push_back(Vector3(0.0, 1.0, 0.0));
ADD_TANGENT(1.0, 0.0, 0.0, 1.0);
uvs.push_back(Vector2(1.0 - u, 1.0 - v)); /* 1.0 - uv to match orientation with Quad */
Expand Down Expand Up @@ -1020,10 +1020,13 @@ void PlaneMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_subdivide_width"), &PlaneMesh::get_subdivide_width);
ClassDB::bind_method(D_METHOD("set_subdivide_depth", "subdivide"), &PlaneMesh::set_subdivide_depth);
ClassDB::bind_method(D_METHOD("get_subdivide_depth"), &PlaneMesh::get_subdivide_depth);
ClassDB::bind_method(D_METHOD("set_center_offset", "offset"), &PlaneMesh::set_center_offset);
ClassDB::bind_method(D_METHOD("get_center_offset"), &PlaneMesh::get_center_offset);

ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size");
ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_width", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_width", "get_subdivide_width");
ADD_PROPERTY(PropertyInfo(Variant::INT, "subdivide_depth", PROPERTY_HINT_RANGE, "0,100,1,or_greater"), "set_subdivide_depth", "get_subdivide_depth");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_offset"), "set_center_offset", "get_center_offset");
}

void PlaneMesh::set_size(const Size2 &p_size) {
Expand Down Expand Up @@ -1053,11 +1056,21 @@ int PlaneMesh::get_subdivide_depth() const {
return subdivide_d;
}

void PlaneMesh::set_center_offset(const Vector3 p_offset) {
center_offset = p_offset;
_request_update();
}

Vector3 PlaneMesh::get_center_offset() const {
return center_offset;
}

PlaneMesh::PlaneMesh() {
// defaults
size = Size2(2.0, 2.0);
subdivide_w = 0;
subdivide_d = 0;
center_offset = Vector3(0.0, 0.0, 0.0);
}

/**
Expand Down Expand Up @@ -1365,10 +1378,10 @@ void QuadMesh::_create_mesh_array(Array &p_arr) const {
Vector2 _size = Vector2(size.x / 2.0f, size.y / 2.0f);

Vector3 quad_faces[4] = {
Vector3(-_size.x, -_size.y, 0),
Vector3(-_size.x, _size.y, 0),
Vector3(_size.x, _size.y, 0),
Vector3(_size.x, -_size.y, 0),
Vector3(-_size.x, -_size.y, 0) + center_offset,
Vector3(-_size.x, _size.y, 0) + center_offset,
Vector3(_size.x, _size.y, 0) + center_offset,
Vector3(_size.x, -_size.y, 0) + center_offset,
};

static const int indices[6] = {
Expand Down Expand Up @@ -1404,12 +1417,17 @@ void QuadMesh::_create_mesh_array(Array &p_arr) const {
void QuadMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_size", "size"), &QuadMesh::set_size);
ClassDB::bind_method(D_METHOD("get_size"), &QuadMesh::get_size);
ClassDB::bind_method(D_METHOD("set_center_offset", "center_offset"), &QuadMesh::set_center_offset);
ClassDB::bind_method(D_METHOD("get_center_offset"), &QuadMesh::get_center_offset);

ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "size"), "set_size", "get_size");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_offset"), "set_center_offset", "get_center_offset");
}

QuadMesh::QuadMesh() {
primitive_type = PRIMITIVE_TRIANGLES;
size = Size2(1.0, 1.0);
center_offset = Vector3(0.0, 0.0, 0.0);
}

void QuadMesh::set_size(const Size2 &p_size) {
Expand All @@ -1421,6 +1439,15 @@ Size2 QuadMesh::get_size() const {
return size;
}

void QuadMesh::set_center_offset(Vector3 p_center_offset) {
center_offset = p_center_offset;
_request_update();
}

Vector3 QuadMesh::get_center_offset() const {
return center_offset;
}

/**
SphereMesh
*/
Expand Down
8 changes: 8 additions & 0 deletions scene/resources/primitive_meshes.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class PlaneMesh : public PrimitiveMesh {
Size2 size;
int subdivide_w;
int subdivide_d;
Vector3 center_offset;

protected:
static void _bind_methods();
Expand All @@ -220,6 +221,9 @@ class PlaneMesh : public PrimitiveMesh {
void set_subdivide_depth(const int p_divisions);
int get_subdivide_depth() const;

void set_center_offset(const Vector3 p_offset);
Vector3 get_center_offset() const;

PlaneMesh();
};

Expand Down Expand Up @@ -268,6 +272,7 @@ class QuadMesh : public PrimitiveMesh {

private:
Size2 size;
Vector3 center_offset;

protected:
static void _bind_methods();
Expand All @@ -278,6 +283,9 @@ class QuadMesh : public PrimitiveMesh {

void set_size(const Size2 &p_size);
Size2 get_size() const;

void set_center_offset(const Vector3 p_offset);
Vector3 get_center_offset() const;
};

/**
Expand Down