summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gdnative/register_types.cpp2
-rw-r--r--modules/gdscript/gd_editor.cpp6
-rw-r--r--modules/gdscript/gd_functions.cpp14
-rw-r--r--modules/gridmap/grid_map.cpp19
-rw-r--r--modules/gridmap/grid_map.h1
-rw-r--r--modules/stb_vorbis/audio_stream_ogg_vorbis.cpp6
-rw-r--r--modules/theora/video_stream_theora.cpp3
7 files changed, 43 insertions, 8 deletions
diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp
index d809109987..559e9fa455 100644
--- a/modules/gdnative/register_types.cpp
+++ b/modules/gdnative/register_types.cpp
@@ -248,7 +248,7 @@ void unregister_gdnative_types() {
memdelete(GDNativeCallRegistry::singleton);
#ifdef TOOLS_ENABLED
- if (Engine::get_singleton()->is_editor_hint()) {
+ if (Engine::get_singleton()->is_editor_hint() && discoverer != NULL) {
memdelete(discoverer);
}
#endif
diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp
index 70e7da5748..bc51b84047 100644
--- a/modules/gdscript/gd_editor.cpp
+++ b/modules/gdscript/gd_editor.cpp
@@ -866,7 +866,7 @@ static bool _guess_expression_type(GDCompletionContext &context, const GDParser:
MethodBind *mb = ClassDB::get_method(base_type, getter);
if (mb) {
PropertyInfo rt = mb->get_return_info();
- if (rt.usage & PROPERTY_USAGE_CLASS_IS_ENUM && t == Variant::INT) {
+ if ((rt.usage & PROPERTY_USAGE_CLASS_IS_ENUM) && t == Variant::INT) {
r_type.enumeration = rt.class_name;
} else if (t == Variant::OBJECT) {
@@ -1903,11 +1903,11 @@ static void _find_call_arguments(GDCompletionContext &context, const GDParser::N
arghint += ", ";
else
arghint += " ";
- if (i == p_argidx || (mi.flags & METHOD_FLAG_VARARG && i > p_argidx)) {
+ if (i == p_argidx || ((mi.flags & METHOD_FLAG_VARARG) && i > p_argidx)) {
arghint += String::chr(0xFFFF);
}
arghint += _get_visual_datatype(mi.arguments[i]) + " " + mi.arguments[i].name;
- if (i == p_argidx || (mi.flags & METHOD_FLAG_VARARG && i > p_argidx)) {
+ if (i == p_argidx || ((mi.flags & METHOD_FLAG_VARARG) && i > p_argidx)) {
arghint += String::chr(0xFFFF);
}
}
diff --git a/modules/gdscript/gd_functions.cpp b/modules/gdscript/gd_functions.cpp
index f0cfdd6258..04752dc71a 100644
--- a/modules/gdscript/gd_functions.cpp
+++ b/modules/gdscript/gd_functions.cpp
@@ -1177,20 +1177,28 @@ void GDFunctions::call(Function p_func, const Variant **p_args, int p_arg_count,
VALIDATE_ARG_COUNT(1);
switch (p_args[0]->get_type()) {
+ case Variant::STRING: {
+
+ String d = *p_args[0];
+ r_ret = d.length();
+ } break;
case Variant::DICTIONARY: {
+
Dictionary d = *p_args[0];
r_ret = d.size();
} break;
case Variant::ARRAY: {
+
Array d = *p_args[0];
r_ret = d.size();
} break;
case Variant::POOL_BYTE_ARRAY: {
+
PoolVector<uint8_t> d = *p_args[0];
r_ret = d.size();
-
} break;
case Variant::POOL_INT_ARRAY: {
+
PoolVector<int> d = *p_args[0];
r_ret = d.size();
} break;
@@ -1200,14 +1208,14 @@ void GDFunctions::call(Function p_func, const Variant **p_args, int p_arg_count,
r_ret = d.size();
} break;
case Variant::POOL_STRING_ARRAY: {
+
PoolVector<String> d = *p_args[0];
r_ret = d.size();
-
} break;
case Variant::POOL_VECTOR2_ARRAY: {
+
PoolVector<Vector2> d = *p_args[0];
r_ret = d.size();
-
} break;
case Variant::POOL_VECTOR3_ARRAY: {
diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp
index ced1c3ca12..4f7545a11d 100644
--- a/modules/gridmap/grid_map.cpp
+++ b/modules/gridmap/grid_map.cpp
@@ -652,6 +652,24 @@ void GridMap::_notification(int p_what) {
//_update_area_instances();
} break;
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ _update_visibility();
+ } break;
+ }
+}
+
+void GridMap::_update_visibility() {
+ if (!is_inside_tree())
+ return;
+
+ _change_notify("visible");
+
+ for (Map<OctantKey, Octant *>::Element *e = octant_map.front(); e; e = e->next()) {
+ Octant *octant = e->value();
+ for (int i = 0; i < octant->multimesh_instances.size(); i++) {
+ Octant::MultimeshInstance &mi = octant->multimesh_instances[i];
+ VS::get_singleton()->instance_set_visible(mi.instance, is_visible());
+ }
}
}
@@ -717,6 +735,7 @@ void GridMap::_update_octants_callback() {
to_delete.pop_back();
}
+ _update_visibility();
awaiting_update = false;
}
diff --git a/modules/gridmap/grid_map.h b/modules/gridmap/grid_map.h
index 9e1d250680..eb1b215696 100644
--- a/modules/gridmap/grid_map.h
+++ b/modules/gridmap/grid_map.h
@@ -190,6 +190,7 @@ protected:
void _get_property_list(List<PropertyInfo> *p_list) const;
void _notification(int p_what);
+ void _update_visibility();
static void _bind_methods();
public:
diff --git a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
index df427907f8..9457fbfaf6 100644
--- a/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/stb_vorbis/audio_stream_ogg_vorbis.cpp
@@ -45,6 +45,12 @@ void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fra
while (todo && active) {
int mixed = stb_vorbis_get_samples_float_interleaved(ogg_stream, 2, (float *)p_buffer, todo * 2);
+ if (vorbis_stream->channels == 1 && mixed > 0) {
+ //mix mono to stereo
+ for (int i = 0; i < mixed; i++) {
+ p_buffer[i].r = p_buffer[i].l;
+ }
+ }
todo -= mixed;
frames_mixed += mixed;
diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp
index 2a24f8d4d1..02b994f8db 100644
--- a/modules/theora/video_stream_theora.cpp
+++ b/modules/theora/video_stream_theora.cpp
@@ -414,7 +414,8 @@ void VideoStreamPlaybackTheora::update(float p_delta) {
bool buffer_full = false;
/* if there's pending, decoded audio, grab it */
- if ((ret = vorbis_synthesis_pcmout(&vd, &pcm)) > 0) {
+ ret = vorbis_synthesis_pcmout(&vd, &pcm);
+ if (ret > 0) {
const int AUXBUF_LEN = 4096;
int to_read = ret;