1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-08 12:40:44 +00:00

Removed boolean return type from majority of method in Tween

This commit is contained in:
Yuri Roubinsky
2020-03-06 10:40:40 +03:00
parent da05ca6720
commit d5bff588c7
3 changed files with 129 additions and 147 deletions

View File

@@ -21,7 +21,7 @@
</tutorials> </tutorials>
<methods> <methods>
<method name="follow_method"> <method name="follow_method">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -47,7 +47,7 @@
</description> </description>
</method> </method>
<method name="follow_property"> <method name="follow_property">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -80,7 +80,7 @@
</description> </description>
</method> </method>
<method name="interpolate_callback"> <method name="interpolate_callback">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -103,7 +103,7 @@
</description> </description>
</method> </method>
<method name="interpolate_deferred_callback"> <method name="interpolate_deferred_callback">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -126,7 +126,7 @@
</description> </description>
</method> </method>
<method name="interpolate_method"> <method name="interpolate_method">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -150,7 +150,7 @@
</description> </description>
</method> </method>
<method name="interpolate_property"> <method name="interpolate_property">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -182,7 +182,7 @@
</description> </description>
</method> </method>
<method name="remove"> <method name="remove">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -193,14 +193,14 @@
</description> </description>
</method> </method>
<method name="remove_all"> <method name="remove_all">
<return type="bool"> <return type="void">
</return> </return>
<description> <description>
Stops animation and removes all tweens. Stops animation and removes all tweens.
</description> </description>
</method> </method>
<method name="reset"> <method name="reset">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -211,14 +211,14 @@
</description> </description>
</method> </method>
<method name="reset_all"> <method name="reset_all">
<return type="bool"> <return type="void">
</return> </return>
<description> <description>
Resets all tweens to their initial values (the ones given, not those before the tween). Resets all tweens to their initial values (the ones given, not those before the tween).
</description> </description>
</method> </method>
<method name="resume"> <method name="resume">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -229,14 +229,14 @@
</description> </description>
</method> </method>
<method name="resume_all"> <method name="resume_all">
<return type="bool"> <return type="void">
</return> </return>
<description> <description>
Continues animating all stopped tweens. Continues animating all stopped tweens.
</description> </description>
</method> </method>
<method name="seek"> <method name="seek">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="time" type="float"> <argument index="0" name="time" type="float">
</argument> </argument>
@@ -254,14 +254,14 @@
</description> </description>
</method> </method>
<method name="start"> <method name="start">
<return type="bool"> <return type="void">
</return> </return>
<description> <description>
Starts the tween. You can define animations both before and after this. Starts the tween. You can define animations both before and after this.
</description> </description>
</method> </method>
<method name="stop"> <method name="stop">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -272,14 +272,14 @@
</description> </description>
</method> </method>
<method name="stop_all"> <method name="stop_all">
<return type="bool"> <return type="void">
</return> </return>
<description> <description>
Stops animating all tweens. Stops animating all tweens.
</description> </description>
</method> </method>
<method name="targeting_method"> <method name="targeting_method">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>
@@ -305,7 +305,7 @@
</description> </description>
</method> </method>
<method name="targeting_property"> <method name="targeting_property">
<return type="bool"> <return type="void">
</return> </return>
<argument index="0" name="object" type="Object"> <argument index="0" name="object" type="Object">
</argument> </argument>

View File

@@ -838,23 +838,22 @@ float Tween::get_speed_scale() const {
return speed_scale; return speed_scale;
} }
bool Tween::start() { void Tween::start() {
ERR_FAIL_COND_V_MSG(!is_inside_tree(), false, "Tween was not added to the SceneTree!"); ERR_FAIL_COND_MSG(!is_inside_tree(), "Tween was not added to the SceneTree!");
// Are there any pending updates? // Are there any pending updates?
if (pending_update != 0) { if (pending_update != 0) {
// Start the tweens after deferring // Start the tweens after deferring
call_deferred("start"); call_deferred("start");
return true; return;
} }
// We want to be activated // We want to be activated
set_active(true); set_active(true);
return true;
} }
bool Tween::reset(Object *p_object, StringName p_key) { void Tween::reset(Object *p_object, StringName p_key) {
// Find all interpolations that use the same object and target string // Find all interpolations that use the same object and target string
pending_update++; pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) { for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -876,10 +875,9 @@ bool Tween::reset(Object *p_object, StringName p_key) {
} }
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::reset_all() { void Tween::reset_all() {
// Go through all interpolations // Go through all interpolations
pending_update++; pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) { for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -893,10 +891,9 @@ bool Tween::reset_all() {
_apply_tween_value(data, data.initial_val); _apply_tween_value(data, data.initial_val);
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::stop(Object *p_object, StringName p_key) { void Tween::stop(Object *p_object, StringName p_key) {
// Find the tween that has the given target object and string key // Find the tween that has the given target object and string key
pending_update++; pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) { for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -913,10 +910,9 @@ bool Tween::stop(Object *p_object, StringName p_key) {
data.active = false; data.active = false;
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::stop_all() { void Tween::stop_all() {
// We no longer need to be active since all tweens have been stopped // We no longer need to be active since all tweens have been stopped
set_active(false); set_active(false);
@@ -928,10 +924,9 @@ bool Tween::stop_all() {
data.active = false; data.active = false;
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::resume(Object *p_object, StringName p_key) { void Tween::resume(Object *p_object, StringName p_key) {
// We need to be activated // We need to be activated
// TODO: What if no tween is found?? // TODO: What if no tween is found??
set_active(true); set_active(true);
@@ -950,10 +945,9 @@ bool Tween::resume(Object *p_object, StringName p_key) {
data.active = true; data.active = true;
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::resume_all() { void Tween::resume_all() {
// Set ourselves active so we can process tweens // Set ourselves active so we can process tweens
// TODO: What if there are no tweens? We get set to active for no reason! // TODO: What if there are no tweens? We get set to active for no reason!
set_active(true); set_active(true);
@@ -966,14 +960,13 @@ bool Tween::resume_all() {
data.active = true; data.active = true;
} }
pending_update--; pending_update--;
return true;
} }
bool Tween::remove(Object *p_object, StringName p_key) { void Tween::remove(Object *p_object, StringName p_key) {
// If we are still updating, call this function again later // If we are still updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
call_deferred("remove", p_object, p_key); call_deferred("remove", p_object, p_key);
return true; return;
} }
// For each interpolation... // For each interpolation...
@@ -996,7 +989,6 @@ bool Tween::remove(Object *p_object, StringName p_key) {
// Erase it // Erase it
interpolates.erase(E->get()); interpolates.erase(E->get());
} }
return true;
} }
void Tween::_remove_by_uid(int uid) { void Tween::_remove_by_uid(int uid) {
@@ -1026,11 +1018,11 @@ void Tween::_push_interpolate_data(InterpolateData &p_data) {
pending_update--; pending_update--;
} }
bool Tween::remove_all() { void Tween::remove_all() {
// If we are still updating, call this function again later // If we are still updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
call_deferred("remove_all"); call_deferred("remove_all");
return true; return;
} }
// We no longer need to be active // We no longer need to be active
set_active(false); set_active(false);
@@ -1038,11 +1030,9 @@ bool Tween::remove_all() {
// Clear out all interpolations and reset the uid // Clear out all interpolations and reset the uid
interpolates.clear(); interpolates.clear();
uid = 0; uid = 0;
return true;
} }
bool Tween::seek(real_t p_time) { void Tween::seek(real_t p_time) {
// Go through each interpolation... // Go through each interpolation...
pending_update++; pending_update++;
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) { for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
@@ -1076,7 +1066,6 @@ bool Tween::seek(real_t p_time) {
_apply_tween_value(data, result); _apply_tween_value(data, result);
} }
pending_update--; pending_update--;
return true;
} }
real_t Tween::tell() const { real_t Tween::tell() const {
@@ -1260,7 +1249,7 @@ bool Tween::_calc_delta_val(const Variant &p_initial_val, const Variant &p_final
return true; return true;
} }
bool Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p_object, NodePath *p_property, StringName *p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p_object, NodePath *p_property, StringName *p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// TODO: Add initialization+implementation for remaining interpolation types // TODO: Add initialization+implementation for remaining interpolation types
// TODO: Fix this method's organization to take advantage of the type // TODO: Fix this method's organization to take advantage of the type
@@ -1275,28 +1264,28 @@ bool Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p
// Validate and apply interpolation data // Validate and apply interpolation data
// Give it the object // Give it the object
ERR_FAIL_COND_V_MSG(p_object == NULL, false, "Invalid object provided to Tween."); ERR_FAIL_COND_MSG(p_object == NULL, "Invalid object provided to Tween.");
data.id = p_object->get_instance_id(); data.id = p_object->get_instance_id();
// Validate the initial and final values // Validate the initial and final values
ERR_FAIL_COND_V_MSG(p_initial_val.get_type() != p_final_val.get_type(), false, "Initial value type '" + Variant::get_type_name(p_initial_val.get_type()) + "' does not match final value type '" + Variant::get_type_name(p_final_val.get_type()) + "'."); ERR_FAIL_COND_MSG(p_initial_val.get_type() != p_final_val.get_type(), "Initial value type '" + Variant::get_type_name(p_initial_val.get_type()) + "' does not match final value type '" + Variant::get_type_name(p_final_val.get_type()) + "'.");
data.initial_val = p_initial_val; data.initial_val = p_initial_val;
data.final_val = p_final_val; data.final_val = p_final_val;
// Check the Duration // Check the Duration
ERR_FAIL_COND_V_MSG(p_duration < 0, false, "Only non-negative duration values allowed in Tweens."); ERR_FAIL_COND_MSG(p_duration < 0, "Only non-negative duration values allowed in Tweens.");
data.duration = p_duration; data.duration = p_duration;
// Tween Delay // Tween Delay
ERR_FAIL_COND_V_MSG(p_delay < 0, false, "Only non-negative delay values allowed in Tweens."); ERR_FAIL_COND_MSG(p_delay < 0, "Only non-negative delay values allowed in Tweens.");
data.delay = p_delay; data.delay = p_delay;
// Transition type // Transition type
ERR_FAIL_COND_V_MSG(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, false, "Invalid transition type provided to Tween."); ERR_FAIL_COND_MSG(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, "Invalid transition type provided to Tween.");
data.trans_type = p_trans_type; data.trans_type = p_trans_type;
// Easing type // Easing type
ERR_FAIL_COND_V_MSG(p_ease_type < 0 || p_ease_type >= EASE_COUNT, false, "Invalid easing type provided to Tween."); ERR_FAIL_COND_MSG(p_ease_type < 0 || p_ease_type >= EASE_COUNT, "Invalid easing type provided to Tween.");
data.ease_type = p_ease_type; data.ease_type = p_ease_type;
// Is the property defined? // Is the property defined?
@@ -1304,7 +1293,7 @@ bool Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p
// Check that the object actually contains the given property // Check that the object actually contains the given property
bool prop_valid = false; bool prop_valid = false;
p_object->get_indexed(p_property->get_subnames(), &prop_valid); p_object->get_indexed(p_property->get_subnames(), &prop_valid);
ERR_FAIL_COND_V_MSG(!prop_valid, false, "Tween target object has no property named: " + p_property->get_concatenated_subnames() + "."); ERR_FAIL_COND_MSG(!prop_valid, "Tween target object has no property named: " + p_property->get_concatenated_subnames() + ".");
data.key = p_property->get_subnames(); data.key = p_property->get_subnames();
data.concatenated_key = p_property->get_concatenated_subnames(); data.concatenated_key = p_property->get_concatenated_subnames();
@@ -1313,7 +1302,7 @@ bool Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p
// Is the method defined? // Is the method defined?
if (p_method) { if (p_method) {
// Does the object even have the requested method? // Does the object even have the requested method?
ERR_FAIL_COND_V_MSG(!p_object->has_method(*p_method), false, "Tween target object has no method named: " + *p_method + "."); ERR_FAIL_COND_MSG(!p_object->has_method(*p_method), "Tween target object has no method named: " + *p_method + ".");
data.key.push_back(*p_method); data.key.push_back(*p_method);
data.concatenated_key = *p_method; data.concatenated_key = *p_method;
@@ -1321,18 +1310,17 @@ bool Tween::_build_interpolation(InterpolateType p_interpolation_type, Object *p
// Is there not a valid delta? // Is there not a valid delta?
if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val)) if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val))
return false; return;
// Add this interpolation to the total // Add this interpolation to the total
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are busy updating, call this function again later // If we are busy updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("interpolate_property", p_object, p_property, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("interpolate_property", p_object, p_property, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Get the property from the node path // Get the property from the node path
@@ -1347,15 +1335,14 @@ bool Tween::interpolate_property(Object *p_object, NodePath p_property, Variant
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t(); if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
// Build the interpolation data // Build the interpolation data
bool result = _build_interpolation(INTER_PROPERTY, p_object, &p_property, NULL, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _build_interpolation(INTER_PROPERTY, p_object, &p_property, NULL, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return result;
} }
bool Tween::interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are busy updating, call this function again later // If we are busy updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("interpolate_method", p_object, p_method, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("interpolate_method", p_object, p_method, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Convert any integers into REALs as they are better for interpolation // Convert any integers into REALs as they are better for interpolation
@@ -1363,25 +1350,24 @@ bool Tween::interpolate_method(Object *p_object, StringName p_method, Variant p_
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t(); if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
// Build the interpolation data // Build the interpolation data
bool result = _build_interpolation(INTER_METHOD, p_object, NULL, &p_method, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _build_interpolation(INTER_METHOD, p_object, NULL, &p_method, p_initial_val, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return result;
} }
bool Tween::interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE) { void Tween::interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE) {
// If we are already updating, call this function again later // If we are already updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("interpolate_callback", p_object, p_duration, p_callback, p_arg1, p_arg2, p_arg3, p_arg4, p_arg5); _add_pending_command("interpolate_callback", p_object, p_duration, p_callback, p_arg1, p_arg2, p_arg3, p_arg4, p_arg5);
return true; return;
} }
// Check that the target object is valid // Check that the target object is valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
// Duration cannot be negative // Duration cannot be negative
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Check whether the object even has the callback // Check whether the object even has the callback
ERR_FAIL_COND_V_MSG(!p_object->has_method(p_callback), false, "Object has no callback named: " + p_callback + "."); ERR_FAIL_COND_MSG(!p_object->has_method(p_callback), "Object has no callback named: " + p_callback + ".");
// Build a new InterpolationData // Build a new InterpolationData
InterpolateData data; InterpolateData data;
@@ -1422,24 +1408,23 @@ bool Tween::interpolate_callback(Object *p_object, real_t p_duration, String p_c
// Add the new interpolation // Add the new interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE) { void Tween::interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE) {
// If we are already updating, call this function again later // If we are already updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("interpolate_deferred_callback", p_object, p_duration, p_callback, p_arg1, p_arg2, p_arg3, p_arg4, p_arg5); _add_pending_command("interpolate_deferred_callback", p_object, p_duration, p_callback, p_arg1, p_arg2, p_arg3, p_arg4, p_arg5);
return true; return;
} }
// Check that the target object is valid // Check that the target object is valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
// No negative durations allowed // No negative durations allowed
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Confirm the callback exists on the object // Confirm the callback exists on the object
ERR_FAIL_COND_V_MSG(!p_object->has_method(p_callback), false, "Object has no callback named: " + p_callback + "."); ERR_FAIL_COND_MSG(!p_object->has_method(p_callback), "Object has no callback named: " + p_callback + ".");
// Create a new InterpolateData for the callback // Create a new InterpolateData for the callback
InterpolateData data; InterpolateData data;
@@ -1480,14 +1465,13 @@ bool Tween::interpolate_deferred_callback(Object *p_object, real_t p_duration, S
// Add the new interpolation // Add the new interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are already updating, call this function again later // If we are already updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("follow_property", p_object, p_property, p_initial_val, p_target, p_target_property, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("follow_property", p_object, p_property, p_initial_val, p_target, p_target_property, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Get the two properties from their paths // Get the two properties from their paths
@@ -1502,33 +1486,33 @@ bool Tween::follow_property(Object *p_object, NodePath p_property, Variant p_ini
if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t(); if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t();
// Confirm the source and target objects are valid // Confirm the source and target objects are valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
ERR_FAIL_COND_V(p_target == NULL, false); ERR_FAIL_COND(p_target == NULL);
// No negative durations // No negative durations
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Ensure transition and easing types are valid // Ensure transition and easing types are valid
ERR_FAIL_COND_V(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, false); ERR_FAIL_COND(p_trans_type < 0 || p_trans_type >= TRANS_COUNT);
ERR_FAIL_COND_V(p_ease_type < 0 || p_ease_type >= EASE_COUNT, false); ERR_FAIL_COND(p_ease_type < 0 || p_ease_type >= EASE_COUNT);
// No negative delays // No negative delays
ERR_FAIL_COND_V(p_delay < 0, false); ERR_FAIL_COND(p_delay < 0);
// Confirm the source and target objects have the desired properties // Confirm the source and target objects have the desired properties
bool prop_valid = false; bool prop_valid = false;
p_object->get_indexed(p_property.get_subnames(), &prop_valid); p_object->get_indexed(p_property.get_subnames(), &prop_valid);
ERR_FAIL_COND_V(!prop_valid, false); ERR_FAIL_COND(!prop_valid);
bool target_prop_valid = false; bool target_prop_valid = false;
Variant target_val = p_target->get_indexed(p_target_property.get_subnames(), &target_prop_valid); Variant target_val = p_target->get_indexed(p_target_property.get_subnames(), &target_prop_valid);
ERR_FAIL_COND_V(!target_prop_valid, false); ERR_FAIL_COND(!target_prop_valid);
// Convert target INT to FLOAT since it is better for interpolation // Convert target INT to FLOAT since it is better for interpolation
if (target_val.get_type() == Variant::INT) target_val = target_val.operator real_t(); if (target_val.get_type() == Variant::INT) target_val = target_val.operator real_t();
// Verify that the target value and initial value are the same type // Verify that the target value and initial value are the same type
ERR_FAIL_COND_V(target_val.get_type() != p_initial_val.get_type(), false); ERR_FAIL_COND(target_val.get_type() != p_initial_val.get_type());
// Create a new InterpolateData // Create a new InterpolateData
InterpolateData data; InterpolateData data;
@@ -1551,44 +1535,43 @@ bool Tween::follow_property(Object *p_object, NodePath p_property, Variant p_ini
// Add the interpolation // Add the interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are currently updating, call this function again later // If we are currently updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("follow_method", p_object, p_method, p_initial_val, p_target, p_target_method, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("follow_method", p_object, p_method, p_initial_val, p_target, p_target_method, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Convert initial INT values to FLOAT as they are better for interpolation // Convert initial INT values to FLOAT as they are better for interpolation
if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t(); if (p_initial_val.get_type() == Variant::INT) p_initial_val = p_initial_val.operator real_t();
// Verify the source and target objects are valid // Verify the source and target objects are valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
ERR_FAIL_COND_V(p_target == NULL, false); ERR_FAIL_COND(p_target == NULL);
// No negative durations // No negative durations
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Ensure that the transition and ease types are valid // Ensure that the transition and ease types are valid
ERR_FAIL_COND_V(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, false); ERR_FAIL_COND(p_trans_type < 0 || p_trans_type >= TRANS_COUNT);
ERR_FAIL_COND_V(p_ease_type < 0 || p_ease_type >= EASE_COUNT, false); ERR_FAIL_COND(p_ease_type < 0 || p_ease_type >= EASE_COUNT);
// No negative delays // No negative delays
ERR_FAIL_COND_V(p_delay < 0, false); ERR_FAIL_COND(p_delay < 0);
// Confirm both objects have the target methods // Confirm both objects have the target methods
ERR_FAIL_COND_V_MSG(!p_object->has_method(p_method), false, "Object has no method named: " + p_method + "."); ERR_FAIL_COND_MSG(!p_object->has_method(p_method), "Object has no method named: " + p_method + ".");
ERR_FAIL_COND_V_MSG(!p_target->has_method(p_target_method), false, "Target has no method named: " + p_target_method + "."); ERR_FAIL_COND_MSG(!p_target->has_method(p_target_method), "Target has no method named: " + p_target_method + ".");
// Call the method to get the target value // Call the method to get the target value
Callable::CallError error; Callable::CallError error;
Variant target_val = p_target->call(p_target_method, NULL, 0, error); Variant target_val = p_target->call(p_target_method, NULL, 0, error);
ERR_FAIL_COND_V(error.error != Callable::CallError::CALL_OK, false); ERR_FAIL_COND(error.error != Callable::CallError::CALL_OK);
// Convert target INT values to FLOAT as they are better for interpolation // Convert target INT values to FLOAT as they are better for interpolation
if (target_val.get_type() == Variant::INT) target_val = target_val.operator real_t(); if (target_val.get_type() == Variant::INT) target_val = target_val.operator real_t();
ERR_FAIL_COND_V(target_val.get_type() != p_initial_val.get_type(), false); ERR_FAIL_COND(target_val.get_type() != p_initial_val.get_type());
// Make the new InterpolateData for the method follow // Make the new InterpolateData for the method follow
InterpolateData data; InterpolateData data;
@@ -1611,14 +1594,13 @@ bool Tween::follow_method(Object *p_object, StringName p_method, Variant p_initi
// Add the new interpolation // Add the new interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are currently updating, call this function again later // If we are currently updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("targeting_property", p_object, p_property, p_initial, p_initial_property, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("targeting_property", p_object, p_property, p_initial, p_initial_property, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Grab the target property and the target property // Grab the target property and the target property
p_property = p_property.get_as_property_path(); p_property = p_property.get_as_property_path();
@@ -1628,31 +1610,31 @@ bool Tween::targeting_property(Object *p_object, NodePath p_property, Object *p_
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t(); if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
// Verify both objects are valid // Verify both objects are valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
ERR_FAIL_COND_V(p_initial == NULL, false); ERR_FAIL_COND(p_initial == NULL);
// No negative durations // No negative durations
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Ensure transition and easing types are valid // Ensure transition and easing types are valid
ERR_FAIL_COND_V(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, false); ERR_FAIL_COND(p_trans_type < 0 || p_trans_type >= TRANS_COUNT);
ERR_FAIL_COND_V(p_ease_type < 0 || p_ease_type >= EASE_COUNT, false); ERR_FAIL_COND(p_ease_type < 0 || p_ease_type >= EASE_COUNT);
// No negative delays // No negative delays
ERR_FAIL_COND_V(p_delay < 0, false); ERR_FAIL_COND(p_delay < 0);
// Ensure the initial and target properties exist on their objects // Ensure the initial and target properties exist on their objects
bool prop_valid = false; bool prop_valid = false;
p_object->get_indexed(p_property.get_subnames(), &prop_valid); p_object->get_indexed(p_property.get_subnames(), &prop_valid);
ERR_FAIL_COND_V(!prop_valid, false); ERR_FAIL_COND(!prop_valid);
bool initial_prop_valid = false; bool initial_prop_valid = false;
Variant initial_val = p_initial->get_indexed(p_initial_property.get_subnames(), &initial_prop_valid); Variant initial_val = p_initial->get_indexed(p_initial_property.get_subnames(), &initial_prop_valid);
ERR_FAIL_COND_V(!initial_prop_valid, false); ERR_FAIL_COND(!initial_prop_valid);
// Convert the initial INT value to FLOAT as it is better for interpolation // Convert the initial INT value to FLOAT as it is better for interpolation
if (initial_val.get_type() == Variant::INT) initial_val = initial_val.operator real_t(); if (initial_val.get_type() == Variant::INT) initial_val = initial_val.operator real_t();
ERR_FAIL_COND_V(initial_val.get_type() != p_final_val.get_type(), false); ERR_FAIL_COND(initial_val.get_type() != p_final_val.get_type());
// Build the InterpolateData object // Build the InterpolateData object
InterpolateData data; InterpolateData data;
@@ -1675,50 +1657,50 @@ bool Tween::targeting_property(Object *p_object, NodePath p_property, Object *p_
data.delay = p_delay; data.delay = p_delay;
// Ensure there is a valid delta // Ensure there is a valid delta
if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val)) if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val)) {
return false; return;
}
// Add the interpolation // Add the interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
bool Tween::targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) { void Tween::targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay) {
// If we are currently updating, call this function again later // If we are currently updating, call this function again later
if (pending_update != 0) { if (pending_update != 0) {
_add_pending_command("targeting_method", p_object, p_method, p_initial, p_initial_method, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay); _add_pending_command("targeting_method", p_object, p_method, p_initial, p_initial_method, p_final_val, p_duration, p_trans_type, p_ease_type, p_delay);
return true; return;
} }
// Convert final INT values to FLOAT as they are better for interpolation // Convert final INT values to FLOAT as they are better for interpolation
if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t(); if (p_final_val.get_type() == Variant::INT) p_final_val = p_final_val.operator real_t();
// Make sure the given objects are valid // Make sure the given objects are valid
ERR_FAIL_COND_V(p_object == NULL, false); ERR_FAIL_COND(p_object == NULL);
ERR_FAIL_COND_V(p_initial == NULL, false); ERR_FAIL_COND(p_initial == NULL);
// No negative durations // No negative durations
ERR_FAIL_COND_V(p_duration < 0, false); ERR_FAIL_COND(p_duration < 0);
// Ensure transition and easing types are valid // Ensure transition and easing types are valid
ERR_FAIL_COND_V(p_trans_type < 0 || p_trans_type >= TRANS_COUNT, false); ERR_FAIL_COND(p_trans_type < 0 || p_trans_type >= TRANS_COUNT);
ERR_FAIL_COND_V(p_ease_type < 0 || p_ease_type >= EASE_COUNT, false); ERR_FAIL_COND(p_ease_type < 0 || p_ease_type >= EASE_COUNT);
// No negative delays // No negative delays
ERR_FAIL_COND_V(p_delay < 0, false); ERR_FAIL_COND(p_delay < 0);
// Make sure both objects have the given method // Make sure both objects have the given method
ERR_FAIL_COND_V_MSG(!p_object->has_method(p_method), false, "Object has no method named: " + p_method + "."); ERR_FAIL_COND_MSG(!p_object->has_method(p_method), "Object has no method named: " + p_method + ".");
ERR_FAIL_COND_V_MSG(!p_initial->has_method(p_initial_method), false, "Initial Object has no method named: " + p_initial_method + "."); ERR_FAIL_COND_MSG(!p_initial->has_method(p_initial_method), "Initial Object has no method named: " + p_initial_method + ".");
// Call the method to get the initial value // Call the method to get the initial value
Callable::CallError error; Callable::CallError error;
Variant initial_val = p_initial->call(p_initial_method, NULL, 0, error); Variant initial_val = p_initial->call(p_initial_method, NULL, 0, error);
ERR_FAIL_COND_V(error.error != Callable::CallError::CALL_OK, false); ERR_FAIL_COND(error.error != Callable::CallError::CALL_OK);
// Convert initial INT values to FLOAT as they aer better for interpolation // Convert initial INT values to FLOAT as they aer better for interpolation
if (initial_val.get_type() == Variant::INT) initial_val = initial_val.operator real_t(); if (initial_val.get_type() == Variant::INT) initial_val = initial_val.operator real_t();
ERR_FAIL_COND_V(initial_val.get_type() != p_final_val.get_type(), false); ERR_FAIL_COND(initial_val.get_type() != p_final_val.get_type());
// Build the new InterpolateData object // Build the new InterpolateData object
InterpolateData data; InterpolateData data;
@@ -1741,12 +1723,12 @@ bool Tween::targeting_method(Object *p_object, StringName p_method, Object *p_in
data.delay = p_delay; data.delay = p_delay;
// Ensure there is a valid delta // Ensure there is a valid delta
if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val)) if (!_calc_delta_val(data.initial_val, data.final_val, data.delta_val)) {
return false; return;
}
// Add the interpolation // Add the interpolation
_push_interpolate_data(data); _push_interpolate_data(data);
return true;
} }
Tween::Tween() { Tween::Tween() {

View File

@@ -142,7 +142,7 @@ private:
void _tween_process(float p_delta); void _tween_process(float p_delta);
void _remove_by_uid(int uid); void _remove_by_uid(int uid);
void _push_interpolate_data(InterpolateData &p_data); void _push_interpolate_data(InterpolateData &p_data);
bool _build_interpolation(InterpolateType p_interpolation_type, Object *p_object, NodePath *p_property, StringName *p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay); void _build_interpolation(InterpolateType p_interpolation_type, Object *p_object, NodePath *p_property, StringName *p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay);
protected: protected:
bool _set(const StringName &p_name, const Variant &p_value); bool _set(const StringName &p_name, const Variant &p_value);
@@ -165,28 +165,28 @@ public:
void set_speed_scale(float p_speed); void set_speed_scale(float p_speed);
float get_speed_scale() const; float get_speed_scale() const;
bool start(); void start();
bool reset(Object *p_object, StringName p_key); void reset(Object *p_object, StringName p_key);
bool reset_all(); void reset_all();
bool stop(Object *p_object, StringName p_key); void stop(Object *p_object, StringName p_key);
bool stop_all(); void stop_all();
bool resume(Object *p_object, StringName p_key); void resume(Object *p_object, StringName p_key);
bool resume_all(); void resume_all();
bool remove(Object *p_object, StringName p_key); void remove(Object *p_object, StringName p_key);
bool remove_all(); void remove_all();
bool seek(real_t p_time); void seek(real_t p_time);
real_t tell() const; real_t tell() const;
real_t get_runtime() const; real_t get_runtime() const;
bool interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
bool interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
bool interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE); void interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE);
bool interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE); void interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE);
bool follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
bool follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
bool targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
bool targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); void targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0);
Tween(); Tween();
~Tween(); ~Tween();