| 
									
										
										
										
											2023-01-05 13:25:55 +01:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  multimesh.h                                                           */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*                         This file is part of:                          */ | 
					
						
							|  |  |  | /*                             GODOT ENGINE                               */ | 
					
						
							|  |  |  | /*                        https://godotengine.org                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining  */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the        */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including    */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,    */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to     */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to  */ | 
					
						
							|  |  |  | /* the following conditions:                                              */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be         */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.        */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #ifndef MULTIMESH_H
 | 
					
						
							|  |  |  | #define MULTIMESH_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "scene/resources/mesh.h"
 | 
					
						
							| 
									
										
										
										
											2020-03-27 15:21:27 -03:00
										 |  |  | #include "servers/rendering_server.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | class MultiMesh : public Resource { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(MultiMesh, Resource); | 
					
						
							| 
									
										
										
										
											2017-06-15 19:44:11 -03:00
										 |  |  | 	RES_BASE_EXTENSION("multimesh"); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 	enum TransformFormat { | 
					
						
							| 
									
										
										
										
											2020-03-27 15:21:27 -03:00
										 |  |  | 		TRANSFORM_2D = RS::MULTIMESH_TRANSFORM_2D, | 
					
						
							|  |  |  | 		TRANSFORM_3D = RS::MULTIMESH_TRANSFORM_3D | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | 	enum PhysicsInterpolationQuality { | 
					
						
							|  |  |  | 		INTERP_QUALITY_FAST, | 
					
						
							|  |  |  | 		INTERP_QUALITY_HIGH, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Ref<Mesh> mesh; | 
					
						
							|  |  |  | 	RID multimesh; | 
					
						
							| 
									
										
										
										
											2021-02-09 18:24:36 +01:00
										 |  |  | 	TransformFormat transform_format = TRANSFORM_2D; | 
					
						
							| 
									
										
										
										
											2023-07-22 20:53:39 -07:00
										 |  |  | 	AABB custom_aabb; | 
					
						
							| 
									
										
										
										
											2021-02-09 18:24:36 +01:00
										 |  |  | 	bool use_colors = false; | 
					
						
							|  |  |  | 	bool use_custom_data = false; | 
					
						
							|  |  |  | 	int instance_count = 0; | 
					
						
							|  |  |  | 	int visible_instance_count = -1; | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | 	PhysicsInterpolationQuality _physics_interpolation_quality = INTERP_QUALITY_FAST; | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-14 00:37:42 -03:00
										 |  |  | #ifndef DISABLE_DEPRECATED
 | 
					
						
							| 
									
										
										
										
											2020-02-13 11:37:37 +01:00
										 |  |  | 	// Kept for compatibility from 3.x to 4.0.
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void _set_transform_array(const Vector<Vector3> &p_array); | 
					
						
							|  |  |  | 	Vector<Vector3> _get_transform_array() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void _set_transform_2d_array(const Vector<Vector2> &p_array); | 
					
						
							|  |  |  | 	Vector<Vector2> _get_transform_2d_array() const; | 
					
						
							| 
									
										
										
										
											2019-04-24 00:01:54 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void _set_color_array(const Vector<Color> &p_array); | 
					
						
							|  |  |  | 	Vector<Color> _get_color_array() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void _set_custom_data_array(const Vector<Color> &p_array); | 
					
						
							|  |  |  | 	Vector<Color> _get_custom_data_array() const; | 
					
						
							| 
									
										
										
										
											2019-09-14 00:37:42 -03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	void set_buffer(const Vector<float> &p_buffer); | 
					
						
							|  |  |  | 	Vector<float> get_buffer() const; | 
					
						
							| 
									
										
										
										
											2018-09-05 19:14:39 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | 	void set_buffer_interpolated(const Vector<float> &p_buffer_curr, const Vector<float> &p_buffer_prev); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_mesh(const Ref<Mesh> &p_mesh); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Ref<Mesh> get_mesh() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-14 00:37:42 -03:00
										 |  |  | 	void set_use_colors(bool p_enable); | 
					
						
							|  |  |  | 	bool is_using_colors() const; | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-14 00:37:42 -03:00
										 |  |  | 	void set_use_custom_data(bool p_enable); | 
					
						
							|  |  |  | 	bool is_using_custom_data() const; | 
					
						
							| 
									
										
										
										
											2018-09-05 19:14:39 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 	void set_transform_format(TransformFormat p_transform_format); | 
					
						
							|  |  |  | 	TransformFormat get_transform_format() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void set_instance_count(int p_count); | 
					
						
							|  |  |  | 	int get_instance_count() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-22 18:38:30 -03:00
										 |  |  | 	void set_visible_instance_count(int p_count); | 
					
						
							|  |  |  | 	int get_visible_instance_count() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | 	void set_physics_interpolation_quality(PhysicsInterpolationQuality p_quality); | 
					
						
							|  |  |  | 	PhysicsInterpolationQuality get_physics_interpolation_quality() const { return _physics_interpolation_quality; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-17 01:08:21 -04:00
										 |  |  | 	void set_instance_transform(int p_instance, const Transform3D &p_transform); | 
					
						
							| 
									
										
										
										
											2019-02-08 20:59:09 -08:00
										 |  |  | 	void set_instance_transform_2d(int p_instance, const Transform2D &p_transform); | 
					
						
							| 
									
										
										
										
											2020-10-17 01:08:21 -04:00
										 |  |  | 	Transform3D get_instance_transform(int p_instance) const; | 
					
						
							| 
									
										
										
										
											2019-02-08 20:59:09 -08:00
										 |  |  | 	Transform2D get_instance_transform_2d(int p_instance) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_instance_color(int p_instance, const Color &p_color); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Color get_instance_color(int p_instance) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-05 19:14:39 -03:00
										 |  |  | 	void set_instance_custom_data(int p_instance, const Color &p_custom_data); | 
					
						
							|  |  |  | 	Color get_instance_custom_data(int p_instance) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | 	void reset_instance_physics_interpolation(int p_instance); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_physics_interpolated(bool p_interpolated); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-22 20:53:39 -07:00
										 |  |  | 	void set_custom_aabb(const AABB &p_custom); | 
					
						
							|  |  |  | 	AABB get_custom_aabb() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 21:09:00 -05:00
										 |  |  | 	virtual AABB get_aabb() const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-10 11:34:39 +01:00
										 |  |  | 	virtual RID get_rid() const override; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	MultiMesh(); | 
					
						
							|  |  |  | 	~MultiMesh(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | VARIANT_ENUM_CAST(MultiMesh::TransformFormat); | 
					
						
							| 
									
										
										
										
											2024-05-11 01:22:50 +02:00
										 |  |  | VARIANT_ENUM_CAST(MultiMesh::PhysicsInterpolationQuality); | 
					
						
							| 
									
										
										
										
											2016-10-03 16:33:42 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-23 23:41:51 +02:00
										 |  |  | #endif // MULTIMESH_H
 |