summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
Diffstat (limited to 'servers')
-rw-r--r--servers/audio/audio_stream.cpp67
-rw-r--r--servers/audio/audio_stream.h14
2 files changed, 19 insertions, 62 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 3e3a7d2381..b5333d91c6 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -676,63 +676,6 @@ bool AudioStreamRandomizer::is_monophonic() const {
return false;
}
-bool AudioStreamRandomizer::_get(const StringName &p_name, Variant &r_ret) const {
- if (AudioStream::_get(p_name, r_ret)) {
- return true;
- }
- Vector<String> components = String(p_name).split("/", true, 2);
- if (components.size() == 2 && components[0].begins_with("stream_") && components[0].trim_prefix("stream_").is_valid_int()) {
- int index = components[0].trim_prefix("stream_").to_int();
- if (index < 0 || index >= (int)audio_stream_pool.size()) {
- return false;
- }
-
- if (components[1] == "stream") {
- r_ret = get_stream(index);
- return true;
- } else if (components[1] == "weight") {
- r_ret = get_stream_probability_weight(index);
- return true;
- } else {
- return false;
- }
- }
- return false;
-}
-
-bool AudioStreamRandomizer::_set(const StringName &p_name, const Variant &p_value) {
- if (AudioStream::_set(p_name, p_value)) {
- return true;
- }
- Vector<String> components = String(p_name).split("/", true, 2);
- if (components.size() == 2 && components[0].begins_with("stream_") && components[0].trim_prefix("stream_").is_valid_int()) {
- int index = components[0].trim_prefix("stream_").to_int();
- if (index < 0 || index >= (int)audio_stream_pool.size()) {
- return false;
- }
-
- if (components[1] == "stream") {
- set_stream(index, p_value);
- return true;
- } else if (components[1] == "weight") {
- set_stream_probability_weight(index, p_value);
- return true;
- } else {
- return false;
- }
- }
- return false;
-}
-
-void AudioStreamRandomizer::_get_property_list(List<PropertyInfo> *p_list) const {
- AudioStream::_get_property_list(p_list); // Define the trivial scalar properties.
- p_list->push_back(PropertyInfo(Variant::NIL, "Streams", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP));
- for (int i = 0; i < audio_stream_pool.size(); i++) {
- p_list->push_back(PropertyInfo(Variant::OBJECT, vformat("stream_%d/stream", i), PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"));
- p_list->push_back(PropertyInfo(Variant::FLOAT, vformat("stream_%d/weight", i), PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"));
- }
-}
-
void AudioStreamRandomizer::_bind_methods() {
ClassDB::bind_method(D_METHOD("add_stream", "index", "stream", "weight"), &AudioStreamRandomizer::add_stream, DEFVAL(1.0));
ClassDB::bind_method(D_METHOD("move_stream", "index_from", "index_to"), &AudioStreamRandomizer::move_stream);
@@ -764,9 +707,17 @@ void AudioStreamRandomizer::_bind_methods() {
BIND_ENUM_CONSTANT(PLAYBACK_RANDOM_NO_REPEATS);
BIND_ENUM_CONSTANT(PLAYBACK_RANDOM);
BIND_ENUM_CONSTANT(PLAYBACK_SEQUENTIAL);
+
+ PoolEntry defaults;
+
+ base_property_helper.set_prefix("stream_");
+ base_property_helper.register_property(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), defaults.stream, &AudioStreamRandomizer::set_stream, &AudioStreamRandomizer::get_stream);
+ base_property_helper.register_property(PropertyInfo(Variant::FLOAT, "weight", PROPERTY_HINT_RANGE, "0,100,0.001,or_greater"), defaults.weight, &AudioStreamRandomizer::set_stream_probability_weight, &AudioStreamRandomizer::get_stream_probability_weight);
}
-AudioStreamRandomizer::AudioStreamRandomizer() {}
+AudioStreamRandomizer::AudioStreamRandomizer() {
+ property_helper.setup_for_instance(base_property_helper, this);
+}
void AudioStreamPlaybackRandomizer::start(double p_from_pos) {
playing = playback;
diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h
index f8123fbe15..01a4a09942 100644
--- a/servers/audio/audio_stream.h
+++ b/servers/audio/audio_stream.h
@@ -33,6 +33,7 @@
#include "core/io/image.h"
#include "core/io/resource.h"
+#include "scene/property_list_helper.h"
#include "servers/audio/audio_filter_sw.h"
#include "servers/audio_server.h"
@@ -236,9 +237,12 @@ private:
struct PoolEntry {
Ref<AudioStream> stream;
- float weight;
+ float weight = 1.0;
};
+ static inline PropertyListHelper base_property_helper;
+ PropertyListHelper property_helper;
+
HashSet<AudioStreamPlaybackRandomizer *> playbacks;
Vector<PoolEntry> audio_stream_pool;
float random_pitch_scale = 1.0f;
@@ -254,9 +258,11 @@ private:
protected:
static void _bind_methods();
- bool _set(const StringName &p_name, const Variant &p_value);
- bool _get(const StringName &p_name, Variant &r_ret) const;
- void _get_property_list(List<PropertyInfo> *p_list) const;
+ bool _set(const StringName &p_name, const Variant &p_value) { return property_helper.property_set_value(p_name, p_value); }
+ bool _get(const StringName &p_name, Variant &r_ret) const { return property_helper.property_get_value(p_name, r_ret); }
+ void _get_property_list(List<PropertyInfo> *p_list) const { property_helper.get_property_list(p_list, audio_stream_pool.size()); }
+ bool _property_can_revert(const StringName &p_name) const { return property_helper.property_can_revert(p_name); }
+ bool _property_get_revert(const StringName &p_name, Variant &r_property) const { return property_helper.property_get_revert(p_name, r_property); }
public:
void add_stream(int p_index, Ref<AudioStream> p_stream, float p_weight = 1.0);