diff options
| author | Marcel Admiraal <madmiraal@users.noreply.github.com> | 2020-12-07 18:54:12 +0000 | 
|---|---|---|
| committer | Marcel Admiraal <madmiraal@users.noreply.github.com> | 2020-12-08 11:58:30 +0000 | 
| commit | 4da4feed18f56a2bc5c88ffe5a4f73134e353c25 (patch) | |
| tree | 1aefe4088867e0a57dcf9bf2c37311fa4557f478 /modules | |
| parent | 43c910680620dd4c8b91bd96e4aa13cc98547def (diff) | |
Use Vector3 instead of 3 floats for CSGBox3D dimensions
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/csg/csg_gizmos.cpp | 68 | ||||
| -rw-r--r-- | modules/csg/csg_shape.cpp | 55 | ||||
| -rw-r--r-- | modules/csg/csg_shape.h | 16 | ||||
| -rw-r--r-- | modules/csg/doc_classes/CSGBox3D.xml | 10 | 
4 files changed, 31 insertions, 118 deletions
diff --git a/modules/csg/csg_gizmos.cpp b/modules/csg/csg_gizmos.cpp index f8c05761bb..e5bb547b5a 100644 --- a/modules/csg/csg_gizmos.cpp +++ b/modules/csg/csg_gizmos.cpp @@ -56,8 +56,7 @@ String CSGShape3DGizmoPlugin::get_handle_name(const EditorNode3DGizmo *p_gizmo,  	}  	if (Object::cast_to<CSGBox3D>(cs)) { -		static const char *hname[3] = { "Width", "Height", "Depth" }; -		return hname[p_idx]; +		return "Size";  	}  	if (Object::cast_to<CSGCylinder3D>(cs)) { @@ -81,14 +80,7 @@ Variant CSGShape3DGizmoPlugin::get_handle_value(EditorNode3DGizmo *p_gizmo, int  	if (Object::cast_to<CSGBox3D>(cs)) {  		CSGBox3D *s = Object::cast_to<CSGBox3D>(cs); -		switch (p_idx) { -			case 0: -				return s->get_width(); -			case 1: -				return s->get_height(); -			case 2: -				return s->get_depth(); -		} +		return s->get_size();  	}  	if (Object::cast_to<CSGCylinder3D>(cs)) { @@ -149,17 +141,9 @@ void CSGShape3DGizmoPlugin::set_handle(EditorNode3DGizmo *p_gizmo, int p_idx, Ca  			d = 0.001;  		} -		switch (p_idx) { -			case 0: -				s->set_width(d * 2); -				break; -			case 1: -				s->set_height(d * 2); -				break; -			case 2: -				s->set_depth(d * 2); -				break; -		} +		Vector3 h = s->get_size(); +		h[p_idx] = d * 2; +		s->set_size(h);  	}  	if (Object::cast_to<CSGCylinder3D>(cs)) { @@ -229,38 +213,14 @@ void CSGShape3DGizmoPlugin::commit_handle(EditorNode3DGizmo *p_gizmo, int p_idx,  	if (Object::cast_to<CSGBox3D>(cs)) {  		CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);  		if (p_cancel) { -			switch (p_idx) { -				case 0: -					s->set_width(p_restore); -					break; -				case 1: -					s->set_height(p_restore); -					break; -				case 2: -					s->set_depth(p_restore); -					break; -			} +			s->set_size(p_restore);  			return;  		}  		UndoRedo *ur = Node3DEditor::get_singleton()->get_undo_redo(); -		ur->create_action(TTR("Change Box Shape Extents")); -		static const char *method[3] = { "set_width", "set_height", "set_depth" }; -		float current = 0; -		switch (p_idx) { -			case 0: -				current = s->get_width(); -				break; -			case 1: -				current = s->get_height(); -				break; -			case 2: -				current = s->get_depth(); -				break; -		} - -		ur->add_do_method(s, method[p_idx], current); -		ur->add_undo_method(s, method[p_idx], p_restore); +		ur->create_action(TTR("Change Box Shape Size")); +		ur->add_do_method(s, "set_size", s->get_size()); +		ur->add_undo_method(s, "set_size", p_restore);  		ur->commit_action();  	} @@ -408,9 +368,13 @@ void CSGShape3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {  		CSGBox3D *s = Object::cast_to<CSGBox3D>(cs);  		Vector<Vector3> handles; -		handles.push_back(Vector3(s->get_width() * 0.5, 0, 0)); -		handles.push_back(Vector3(0, s->get_height() * 0.5, 0)); -		handles.push_back(Vector3(0, 0, s->get_depth() * 0.5)); + +		for (int i = 0; i < 3; i++) { +			Vector3 h; +			h[i] = s->get_size()[i] / 2; +			handles.push_back(h); +		} +  		p_gizmo->add_handles(handles, handles_material);  	} diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 8f2ebc7232..4edca90182 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -1125,7 +1125,7 @@ CSGBrush *CSGBox3D::_build_brush() {  		int face = 0; -		Vector3 vertex_mul(width * 0.5, height * 0.5, depth * 0.5); +		Vector3 vertex_mul = size / 2;  		{  			for (int i = 0; i < 6; i++) { @@ -1194,55 +1194,25 @@ CSGBrush *CSGBox3D::_build_brush() {  }  void CSGBox3D::_bind_methods() { -	ClassDB::bind_method(D_METHOD("set_width", "width"), &CSGBox3D::set_width); -	ClassDB::bind_method(D_METHOD("get_width"), &CSGBox3D::get_width); - -	ClassDB::bind_method(D_METHOD("set_height", "height"), &CSGBox3D::set_height); -	ClassDB::bind_method(D_METHOD("get_height"), &CSGBox3D::get_height); - -	ClassDB::bind_method(D_METHOD("set_depth", "depth"), &CSGBox3D::set_depth); -	ClassDB::bind_method(D_METHOD("get_depth"), &CSGBox3D::get_depth); +	ClassDB::bind_method(D_METHOD("set_size", "size"), &CSGBox3D::set_size); +	ClassDB::bind_method(D_METHOD("get_size"), &CSGBox3D::get_size);  	ClassDB::bind_method(D_METHOD("set_material", "material"), &CSGBox3D::set_material);  	ClassDB::bind_method(D_METHOD("get_material"), &CSGBox3D::get_material); -	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "width", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_width", "get_width"); -	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_height", "get_height"); -	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "depth", PROPERTY_HINT_EXP_RANGE, "0.001,1000.0,0.001,or_greater"), "set_depth", "get_depth"); +	ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size"), "set_size", "get_size");  	ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "StandardMaterial3D,ShaderMaterial"), "set_material", "get_material");  } -void CSGBox3D::set_width(const float p_width) { -	width = p_width; -	_make_dirty(); -	update_gizmo(); -	_change_notify("width"); -} - -float CSGBox3D::get_width() const { -	return width; -} - -void CSGBox3D::set_height(const float p_height) { -	height = p_height; -	_make_dirty(); -	update_gizmo(); -	_change_notify("height"); -} - -float CSGBox3D::get_height() const { -	return height; -} - -void CSGBox3D::set_depth(const float p_depth) { -	depth = p_depth; +void CSGBox3D::set_size(const Vector3 &p_size) { +	size = p_size;  	_make_dirty();  	update_gizmo(); -	_change_notify("depth"); +	_change_notify("size");  } -float CSGBox3D::get_depth() const { -	return depth; +Vector3 CSGBox3D::get_size() const { +	return size;  }  void CSGBox3D::set_material(const Ref<Material> &p_material) { @@ -1255,13 +1225,6 @@ Ref<Material> CSGBox3D::get_material() const {  	return material;  } -CSGBox3D::CSGBox3D() { -	// defaults -	width = 2.0; -	height = 2.0; -	depth = 2.0; -} -  ///////////////  CSGBrush *CSGCylinder3D::_build_brush() { diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h index d93693f145..be76cee543 100644 --- a/modules/csg/csg_shape.h +++ b/modules/csg/csg_shape.h @@ -240,27 +240,19 @@ class CSGBox3D : public CSGPrimitive3D {  	virtual CSGBrush *_build_brush() override;  	Ref<Material> material; -	float width; -	float height; -	float depth; +	Vector3 size = Vector3(2, 2, 2);  protected:  	static void _bind_methods();  public: -	void set_width(const float p_width); -	float get_width() const; - -	void set_height(const float p_height); -	float get_height() const; - -	void set_depth(const float p_depth); -	float get_depth() const; +	void set_size(const Vector3 &p_size); +	Vector3 get_size() const;  	void set_material(const Ref<Material> &p_material);  	Ref<Material> get_material() const; -	CSGBox3D(); +	CSGBox3D() {}  };  class CSGCylinder3D : public CSGPrimitive3D { diff --git a/modules/csg/doc_classes/CSGBox3D.xml b/modules/csg/doc_classes/CSGBox3D.xml index 492bf68c44..b1d0454b76 100644 --- a/modules/csg/doc_classes/CSGBox3D.xml +++ b/modules/csg/doc_classes/CSGBox3D.xml @@ -11,17 +11,11 @@  	<methods>  	</methods>  	<members> -		<member name="depth" type="float" setter="set_depth" getter="get_depth" default="2.0"> -			Depth of the box measured from the center of the box. -		</member> -		<member name="height" type="float" setter="set_height" getter="get_height" default="2.0"> -			Height of the box measured from the center of the box. -		</member>  		<member name="material" type="Material" setter="set_material" getter="get_material">  			The material used to render the box.  		</member> -		<member name="width" type="float" setter="set_width" getter="get_width" default="2.0"> -			Width of the box measured from the center of the box. +		<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3( 2, 2, 2 )"> +			The box's width, height and depth.  		</member>  	</members>  	<constants>  |