summaryrefslogtreecommitdiffstats
path: root/scene/resources/multimesh.h
diff options
context:
space:
mode:
authorRicardo Buring <ricardo.buring@gmail.com>2024-05-11 01:22:50 +0200
committerRicardo Buring <ricardo.buring@gmail.com>2024-08-18 17:14:59 +0200
commit1728f80e7cd6d8ed4dd5068f7bd5da64b9c6edfa (patch)
tree1746729a8905252460f43a4392b4265b134c147e /scene/resources/multimesh.h
parenta7598679cff6daffbec8f16314b853d87268fff5 (diff)
downloadredot-engine-1728f80e7cd6d8ed4dd5068f7bd5da64b9c6edfa.tar.gz
Fixed Timestep Interpolation: MultiMesh
Adds fixed timestep interpolation to multimeshes. Co-authored-by: lawnjelly <lawnjelly@gmail.com>
Diffstat (limited to 'scene/resources/multimesh.h')
-rw-r--r--scene/resources/multimesh.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/scene/resources/multimesh.h b/scene/resources/multimesh.h
index d7bcb13162..03505bb4d1 100644
--- a/scene/resources/multimesh.h
+++ b/scene/resources/multimesh.h
@@ -44,6 +44,11 @@ public:
TRANSFORM_3D = RS::MULTIMESH_TRANSFORM_3D
};
+ enum PhysicsInterpolationQuality {
+ INTERP_QUALITY_FAST,
+ INTERP_QUALITY_HIGH,
+ };
+
private:
Ref<Mesh> mesh;
RID multimesh;
@@ -53,6 +58,7 @@ private:
bool use_custom_data = false;
int instance_count = 0;
int visible_instance_count = -1;
+ PhysicsInterpolationQuality _physics_interpolation_quality = INTERP_QUALITY_FAST;
protected:
static void _bind_methods();
@@ -74,6 +80,8 @@ protected:
void set_buffer(const Vector<float> &p_buffer);
Vector<float> get_buffer() const;
+ void set_buffer_interpolated(const Vector<float> &p_buffer_curr, const Vector<float> &p_buffer_prev);
+
public:
void set_mesh(const Ref<Mesh> &p_mesh);
Ref<Mesh> get_mesh() const;
@@ -93,6 +101,9 @@ public:
void set_visible_instance_count(int p_count);
int get_visible_instance_count() const;
+ void set_physics_interpolation_quality(PhysicsInterpolationQuality p_quality);
+ PhysicsInterpolationQuality get_physics_interpolation_quality() const { return _physics_interpolation_quality; }
+
void set_instance_transform(int p_instance, const Transform3D &p_transform);
void set_instance_transform_2d(int p_instance, const Transform2D &p_transform);
Transform3D get_instance_transform(int p_instance) const;
@@ -104,6 +115,10 @@ public:
void set_instance_custom_data(int p_instance, const Color &p_custom_data);
Color get_instance_custom_data(int p_instance) const;
+ void reset_instance_physics_interpolation(int p_instance);
+
+ void set_physics_interpolated(bool p_interpolated);
+
void set_custom_aabb(const AABB &p_custom);
AABB get_custom_aabb() const;
@@ -116,5 +131,6 @@ public:
};
VARIANT_ENUM_CAST(MultiMesh::TransformFormat);
+VARIANT_ENUM_CAST(MultiMesh::PhysicsInterpolationQuality);
#endif // MULTIMESH_H