Use fake audio playing property in editor
It appears that some time ago users were supposed to be able to include the playback of sound effects in their animations by placing keys on the "playing" property. Back then the key frame editor took the value of the checkbox in the property_editor.
Somewhere / Sometime this behaviour changed and the key frame editor is now reading the actual value from the object instead of relying on the property editor.
This commit introduces a fake active field that is returned when reading the playing property in the editor. While the actual active flag is changed when playback is finished the fake one will stay the same thus allowing the user to take their time with setting the key in the animation editor.
(cherry picked from commit bc1522e268
)
This commit is contained in:
parent
5917063192
commit
c2a8eb2081
6 changed files with 44 additions and 3 deletions
|
@ -233,7 +233,6 @@ void AudioStreamPlayer2D::_notification(int p_what) {
|
||||||
//stop playing if no longer active
|
//stop playing if no longer active
|
||||||
if (!active) {
|
if (!active) {
|
||||||
set_physics_process_internal(false);
|
set_physics_process_internal(false);
|
||||||
//do not update, this makes it easier to animate (will shut off otherwise)
|
|
||||||
//_change_notify("playing"); //update property in editor
|
//_change_notify("playing"); //update property in editor
|
||||||
emit_signal("finished");
|
emit_signal("finished");
|
||||||
}
|
}
|
||||||
|
@ -313,6 +312,11 @@ void AudioStreamPlayer2D::stop() {
|
||||||
|
|
||||||
bool AudioStreamPlayer2D::is_playing() const {
|
bool AudioStreamPlayer2D::is_playing() const {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (Engine::get_singleton()->is_editor_hint())
|
||||||
|
return fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (stream_playback.is_valid()) {
|
if (stream_playback.is_valid()) {
|
||||||
return active; // && stream_playback->is_playing();
|
return active; // && stream_playback->is_playing();
|
||||||
}
|
}
|
||||||
|
@ -357,11 +361,16 @@ bool AudioStreamPlayer2D::is_autoplay_enabled() {
|
||||||
|
|
||||||
void AudioStreamPlayer2D::_set_playing(bool p_enable) {
|
void AudioStreamPlayer2D::_set_playing(bool p_enable) {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
fake_active = p_enable;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (p_enable)
|
if (p_enable)
|
||||||
play();
|
play();
|
||||||
else
|
else
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioStreamPlayer2D::_is_active() const {
|
bool AudioStreamPlayer2D::_is_active() const {
|
||||||
|
|
||||||
return active;
|
return active;
|
||||||
|
|
|
@ -69,6 +69,10 @@ private:
|
||||||
volatile bool active;
|
volatile bool active;
|
||||||
volatile float setplay;
|
volatile float setplay;
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
volatile bool fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
float volume_db;
|
float volume_db;
|
||||||
float pitch_scale;
|
float pitch_scale;
|
||||||
bool autoplay;
|
bool autoplay;
|
||||||
|
|
|
@ -543,7 +543,6 @@ void AudioStreamPlayer3D::_notification(int p_what) {
|
||||||
//stop playing if no longer active
|
//stop playing if no longer active
|
||||||
if (!active) {
|
if (!active) {
|
||||||
set_physics_process_internal(false);
|
set_physics_process_internal(false);
|
||||||
//do not update, this makes it easier to animate (will shut off otherwise)
|
|
||||||
//_change_notify("playing"); //update property in editor
|
//_change_notify("playing"); //update property in editor
|
||||||
emit_signal("finished");
|
emit_signal("finished");
|
||||||
}
|
}
|
||||||
|
@ -641,6 +640,11 @@ void AudioStreamPlayer3D::stop() {
|
||||||
|
|
||||||
bool AudioStreamPlayer3D::is_playing() const {
|
bool AudioStreamPlayer3D::is_playing() const {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (Engine::get_singleton()->is_editor_hint())
|
||||||
|
return fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (stream_playback.is_valid()) {
|
if (stream_playback.is_valid()) {
|
||||||
return active; // && stream_playback->is_playing();
|
return active; // && stream_playback->is_playing();
|
||||||
}
|
}
|
||||||
|
@ -685,11 +689,16 @@ bool AudioStreamPlayer3D::is_autoplay_enabled() {
|
||||||
|
|
||||||
void AudioStreamPlayer3D::_set_playing(bool p_enable) {
|
void AudioStreamPlayer3D::_set_playing(bool p_enable) {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
fake_active = p_enable;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (p_enable)
|
if (p_enable)
|
||||||
play();
|
play();
|
||||||
else
|
else
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioStreamPlayer3D::_is_active() const {
|
bool AudioStreamPlayer3D::_is_active() const {
|
||||||
|
|
||||||
return active;
|
return active;
|
||||||
|
|
|
@ -102,6 +102,10 @@ private:
|
||||||
volatile bool active;
|
volatile bool active;
|
||||||
volatile float setplay;
|
volatile float setplay;
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
volatile bool fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
AttenuationModel attenuation_model;
|
AttenuationModel attenuation_model;
|
||||||
float unit_db;
|
float unit_db;
|
||||||
float unit_size;
|
float unit_size;
|
||||||
|
|
|
@ -127,6 +127,7 @@ void AudioStreamPlayer::_notification(int p_what) {
|
||||||
if (!active || (setseek < 0 && !stream_playback->is_playing())) {
|
if (!active || (setseek < 0 && !stream_playback->is_playing())) {
|
||||||
active = false;
|
active = false;
|
||||||
set_process_internal(false);
|
set_process_internal(false);
|
||||||
|
//_change_notify("playing"); //update property in editor
|
||||||
emit_signal("finished");
|
emit_signal("finished");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -211,8 +212,13 @@ void AudioStreamPlayer::stop() {
|
||||||
|
|
||||||
bool AudioStreamPlayer::is_playing() const {
|
bool AudioStreamPlayer::is_playing() const {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (Engine::get_singleton()->is_editor_hint())
|
||||||
|
return fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (stream_playback.is_valid()) {
|
if (stream_playback.is_valid()) {
|
||||||
return active; //&& stream_playback->is_playing();
|
return active; // && stream_playback->is_playing();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -265,11 +271,16 @@ AudioStreamPlayer::MixTarget AudioStreamPlayer::get_mix_target() const {
|
||||||
|
|
||||||
void AudioStreamPlayer::_set_playing(bool p_enable) {
|
void AudioStreamPlayer::_set_playing(bool p_enable) {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
fake_active = p_enable;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (p_enable)
|
if (p_enable)
|
||||||
play();
|
play();
|
||||||
else
|
else
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioStreamPlayer::_is_active() const {
|
bool AudioStreamPlayer::_is_active() const {
|
||||||
|
|
||||||
return active;
|
return active;
|
||||||
|
|
|
@ -53,6 +53,10 @@ private:
|
||||||
volatile float setseek;
|
volatile float setseek;
|
||||||
volatile bool active;
|
volatile bool active;
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
volatile bool fake_active;
|
||||||
|
#endif
|
||||||
|
|
||||||
float mix_volume_db;
|
float mix_volume_db;
|
||||||
float pitch_scale;
|
float pitch_scale;
|
||||||
float volume_db;
|
float volume_db;
|
||||||
|
|
Loading…
Reference in a new issue