Merge pull request #96496 from aXu-AP/lerp-transform
Add support for Transform2D/3D in `lerp()`
This commit is contained in:
commit
4629f7d040
|
@ -452,12 +452,14 @@ Variant VariantUtilityFunctions::lerp(const Variant &from, const Variant &to, do
|
||||||
case Variant::QUATERNION:
|
case Variant::QUATERNION:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
case Variant::COLOR:
|
case Variant::COLOR:
|
||||||
|
case Variant::TRANSFORM2D:
|
||||||
|
case Variant::TRANSFORM3D:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||||
r_error.argument = 0;
|
r_error.argument = 0;
|
||||||
r_error.expected = Variant::NIL;
|
r_error.expected = Variant::NIL;
|
||||||
return R"(Argument "from" must be "int", "float", "Vector2", "Vector3", "Vector4", "Quaternion", "Basis, or "Color".)";
|
return R"(Argument "from" must be "int", "float", "Vector2", "Vector3", "Vector4", "Color", "Quaternion", "Basis", "Transform2D", or "Transform3D".)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (from.get_type() != to.get_type()) {
|
if (from.get_type() != to.get_type()) {
|
||||||
|
@ -490,6 +492,12 @@ Variant VariantUtilityFunctions::lerp(const Variant &from, const Variant &to, do
|
||||||
case Variant::BASIS: {
|
case Variant::BASIS: {
|
||||||
return VariantInternalAccessor<Basis>::get(&from).slerp(VariantInternalAccessor<Basis>::get(&to), weight);
|
return VariantInternalAccessor<Basis>::get(&from).slerp(VariantInternalAccessor<Basis>::get(&to), weight);
|
||||||
} break;
|
} break;
|
||||||
|
case Variant::TRANSFORM2D: {
|
||||||
|
return VariantInternalAccessor<Transform2D>::get(&from).interpolate_with(VariantInternalAccessor<Transform2D>::get(&to), weight);
|
||||||
|
} break;
|
||||||
|
case Variant::TRANSFORM3D: {
|
||||||
|
return VariantInternalAccessor<Transform3D>::get(&from).interpolate_with(VariantInternalAccessor<Transform3D>::get(&to), weight);
|
||||||
|
} break;
|
||||||
case Variant::COLOR: {
|
case Variant::COLOR: {
|
||||||
return VariantInternalAccessor<Color>::get(&from).lerp(VariantInternalAccessor<Color>::get(&to), weight);
|
return VariantInternalAccessor<Color>::get(&from).lerp(VariantInternalAccessor<Color>::get(&to), weight);
|
||||||
} break;
|
} break;
|
||||||
|
|
|
@ -621,13 +621,13 @@
|
||||||
<param index="1" name="to" type="Variant" />
|
<param index="1" name="to" type="Variant" />
|
||||||
<param index="2" name="weight" type="Variant" />
|
<param index="2" name="weight" type="Variant" />
|
||||||
<description>
|
<description>
|
||||||
Linearly interpolates between two values by the factor defined in [param weight]. To perform interpolation, [param weight] should be between [code]0.0[/code] and [code]1.0[/code] (inclusive). However, values outside this range are allowed and can be used to perform [i]extrapolation[/i]. If this is not desired, use [method clamp] on the result of this function.
|
Linearly interpolates between two values by the factor defined in [param weight]. To perform interpolation, [param weight] should be between [code]0.0[/code] and [code]1.0[/code] (inclusive). However, values outside this range are allowed and can be used to perform [i]extrapolation[/i]. If this is not desired, use [method clampf] to limit [param weight].
|
||||||
Both [param from] and [param to] must be the same type. Supported types: [int], [float], [Vector2], [Vector3], [Vector4], [Color], [Quaternion], [Basis].
|
Both [param from] and [param to] must be the same type. Supported types: [int], [float], [Vector2], [Vector3], [Vector4], [Color], [Quaternion], [Basis], [Transform2D], [Transform3D].
|
||||||
[codeblock]
|
[codeblock]
|
||||||
lerp(0, 4, 0.75) # Returns 3.0
|
lerp(0, 4, 0.75) # Returns 3.0
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
See also [method inverse_lerp] which performs the reverse of this operation. To perform eased interpolation with [method lerp], combine it with [method ease] or [method smoothstep]. See also [method remap] to map a continuous series of values to another.
|
See also [method inverse_lerp] which performs the reverse of this operation. To perform eased interpolation with [method lerp], combine it with [method ease] or [method smoothstep]. See also [method remap] to map a continuous series of values to another.
|
||||||
[b]Note:[/b] For better type safety, use [method lerpf], [method Vector2.lerp], [method Vector3.lerp], [method Vector4.lerp], [method Color.lerp], [method Quaternion.slerp] or [method Basis.slerp].
|
[b]Note:[/b] For better type safety, use [method lerpf], [method Vector2.lerp], [method Vector3.lerp], [method Vector4.lerp], [method Color.lerp], [method Quaternion.slerp], [method Basis.slerp], [method Transform2D.interpolate_with], or [method Transform3D.interpolate_with].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="lerp_angle" keywords="interpolate">
|
<method name="lerp_angle" keywords="interpolate">
|
||||||
|
|
Loading…
Reference in New Issue