diff options
-rw-r--r-- | .travis.yml | 30 | ||||
-rw-r--r-- | core/bind/core_bind.cpp | 10 | ||||
-rw-r--r-- | core/bind/core_bind.h | 1 | ||||
-rw-r--r-- | core/input_map.cpp | 5 | ||||
-rw-r--r-- | doc/base/classes.xml | 10 | ||||
-rw-r--r-- | drivers/gles2/rasterizer_gles2.cpp | 13 | ||||
-rw-r--r-- | drivers/gles2/rasterizer_gles2.h | 2 | ||||
-rw-r--r-- | drivers/png/SCsub | 11 | ||||
-rw-r--r-- | platform/osx/os_osx.mm | 2 | ||||
-rw-r--r-- | scene/3d/visual_instance.cpp | 42 | ||||
-rw-r--r-- | scene/3d/visual_instance.h | 12 | ||||
-rw-r--r-- | scene/gui/text_edit.cpp | 27 | ||||
-rw-r--r-- | scene/gui/text_edit.h | 5 | ||||
-rw-r--r-- | servers/visual/rasterizer.h | 1 | ||||
-rw-r--r-- | servers/visual/visual_server_raster.cpp | 48 | ||||
-rw-r--r-- | servers/visual/visual_server_raster.h | 6 | ||||
-rw-r--r-- | servers/visual/visual_server_wrap_mt.h | 3 | ||||
-rw-r--r-- | servers/visual_server.h | 10 | ||||
-rwxr-xr-x | tools/Godot.app/Contents/Info.plist | 4 | ||||
-rw-r--r-- | tools/editor/editor_settings.cpp | 2 | ||||
-rw-r--r-- | tools/editor/plugins/script_editor_plugin.cpp | 2 | ||||
-rw-r--r-- | tools/editor/plugins/spatial_editor_plugin.cpp | 14 | ||||
-rw-r--r-- | tools/editor/spatial_editor_gizmos.cpp | 2 |
23 files changed, 220 insertions, 42 deletions
diff --git a/.travis.yml b/.travis.yml index 032e6aa0b8..11dcdf447c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: cpp -sudo: required -dist: trusty +sudo: false compiler: - gcc @@ -41,10 +40,33 @@ matrix: - compiler: clang env: GODOT_TARGET=x11 +addons: + apt: + packages: + - build-essential + - scons + - pkg-config + - libx11-dev + - libxcursor-dev + - libasound2-dev + - libfreetype6-dev + - libgl1-mesa-dev + - libglu1-mesa-dev + - libssl-dev + - libxinerama-dev + - libudev-dev + + # For cross-compiling to Windows. + - binutils-mingw-w64-i686 + - binutils-mingw-w64-x86-64 + - gcc-mingw-w64-i686 + - gcc-mingw-w64-x86-64 + - g++-mingw-w64-i686 + - g++-mingw-w64-x86-64 + - mingw-w64 + before_script: - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get update -qq; sudo apt-get install -y scons pkg-config libx11-dev libxcursor-dev build-essential libasound2-dev libfreetype6-dev libgl1-mesa-dev libglu-dev libssl-dev libxinerama-dev libudev-dev; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$GODOT_TARGET" = "windows" ]; then sudo apt-get update -qq; sudo apt-get install -y mingw32 mingw-w64; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew install scons; fi - if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$GODOT_TARGET" = "android" ]; then brew update; brew install android-sdk android-ndk; export ANDROID_HOME=/usr/local/opt/android-sdk; export ANDROID_NDK_ROOT=/usr/local/opt/android-ndk; fi diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index aff047177c..9d380aa33a 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -1325,6 +1325,15 @@ String _File::get_as_text() const { } + + +String _File::get_md5(const String& p_path) const { + + return FileAccess::get_md5(p_path); + +} + + String _File::get_line() const{ ERR_FAIL_COND_V(!f,String()); @@ -1513,6 +1522,7 @@ void _File::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_buffer","len"),&_File::get_buffer); ObjectTypeDB::bind_method(_MD("get_line"),&_File::get_line); ObjectTypeDB::bind_method(_MD("get_as_text"),&_File::get_as_text); + ObjectTypeDB::bind_method(_MD("get_md5","path"),&_File::get_md5); ObjectTypeDB::bind_method(_MD("get_endian_swap"),&_File::get_endian_swap); ObjectTypeDB::bind_method(_MD("set_endian_swap","enable"),&_File::set_endian_swap); ObjectTypeDB::bind_method(_MD("get_error:Error"),&_File::get_error); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 2c43390d3c..64a4e94aec 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -368,6 +368,7 @@ public: DVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes String get_line() const; String get_as_text() const; + String get_md5(const String& p_path) const; /**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac) * It's not about the current CPU type but file formats. diff --git a/core/input_map.cpp b/core/input_map.cpp index d4560a1e1b..874ce1c424 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -156,10 +156,7 @@ void InputMap::action_erase_event(const StringName& p_action,const InputEvent& p List<InputEvent>::Element *E=_find_event(input_map[p_action].inputs,p_event); if (E) - return; //already gots - - input_map[p_action].inputs.erase(E); - + input_map[p_action].inputs.erase(E); } diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 1b5e2d85af..d111569a60 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -11475,6 +11475,16 @@ Returns an empty String "" at the end of the list. <description> </description> </method> + <method name="get_md5" qualifiers="const"> + <return type="String"> + </return> + <argument index="0" name="path" type="String"> + </argument> + <description> + Returns on success, a md5 String representing the file of the given path. + else, empty String "". + </description> + </method> <method name="get_endian_swap"> <return type="bool"> </return> diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index 9076d352b6..0aff730916 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -4781,9 +4781,12 @@ void RasterizerGLES2::_add_geometry( const Geometry* p_geometry, const InstanceD if (has_blend_alpha || (has_base_alpha && m->depth_draw_mode!=VS::MATERIAL_DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA)) return; //bye - if (m->shader_cache && !m->shader_cache->writes_vertex && !m->shader_cache->uses_discard && m->depth_draw_mode!=VS::MATERIAL_DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA) { + if (!m->shader_cache || (!m->shader_cache->writes_vertex && !m->shader_cache->uses_discard && m->depth_draw_mode!=VS::MATERIAL_DEPTH_DRAW_OPAQUE_PRE_PASS_ALPHA)) { //shader does not use discard and does not write a vertex position, use generic material - m = shadow_mat_ptr; + if (p_instance->cast_shadows == VS::SHADOW_CASTING_SETTING_DOUBLE_SIDED) + m = shadow_mat_double_sided_ptr; + else + m = shadow_mat_ptr; if (m->last_pass!=frame) { if (m->shader.is_valid()) { @@ -10969,6 +10972,12 @@ void RasterizerGLES2::init() { shadow_material = material_create(); //empty with nothing shadow_mat_ptr = material_owner.get(shadow_material); + + // Now create a second shadow material for double-sided shadow instances + shadow_material_double_sided = material_create(); + shadow_mat_double_sided_ptr = material_owner.get(shadow_material_double_sided); + shadow_mat_double_sided_ptr->flags[VS::MATERIAL_FLAG_DOUBLE_SIDED] = true; + overdraw_material = create_overdraw_debug_material(); copy_shader.set_conditional(CopyShaderGLES2::USE_8BIT_HDR,!use_fp16_fb); canvas_shader.set_conditional(CanvasShaderGLES2::USE_DEPTH_SHADOWS,read_depth_supported); diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h index 0f70ceaa97..2a2f587f11 100644 --- a/drivers/gles2/rasterizer_gles2.h +++ b/drivers/gles2/rasterizer_gles2.h @@ -829,7 +829,9 @@ class RasterizerGLES2 : public Rasterizer { bool fragment_lighting; RID shadow_material; + RID shadow_material_double_sided; Material *shadow_mat_ptr; + Material *shadow_mat_double_sided_ptr; int max_texture_units; GLuint base_framebuffer; diff --git a/drivers/png/SCsub b/drivers/png/SCsub index 5532e28ade..df521de3eb 100644 --- a/drivers/png/SCsub +++ b/drivers/png/SCsub @@ -22,17 +22,16 @@ png_sources = [ "png/image_loader_png.cpp" ] -if ("neon_enabled" in env and env["neon_enabled"]): +# Currently .ASM filter_neon.S does not compile on NT. +import os +if ("neon_enabled" in env and env["neon_enabled"]) and os.name!="nt": env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=2"]) env_neon = env.Clone(); if "S_compiler" in env: env_neon['CC'] = env['S_compiler'] #env_neon.Append(CPPFLAGS=["-DPNG_ARM_NEON"]) - import os - # Currently .ASM filter_neon.S does not compile on NT. - if (os.name!="nt"): - png_sources.append(env_neon.Object("#drivers/png/arm/arm_init.c")) - png_sources.append(env_neon.Object("#drivers/png/arm/filter_neon.S")) + png_sources.append(env_neon.Object("#drivers/png/arm/arm_init.c")) + png_sources.append(env_neon.Object("#drivers/png/arm/filter_neon.S")) else: env.Append(CPPFLAGS=["-DPNG_ARM_NEON_OPT=0"]) diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index bb99e6ade7..4b339af6d4 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -813,7 +813,7 @@ static int translateKey(unsigned int key) InputEvent ev; ev.type=InputEvent::MOUSE_BUTTON; - ev.mouse_button.button_index=deltaX >0 ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_LEFT; + ev.mouse_button.button_index=deltaX < 0 ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_LEFT; ev.mouse_button.pressed=true; ev.mouse_button.x=mouse_x; ev.mouse_button.y=mouse_y; diff --git a/scene/3d/visual_instance.cpp b/scene/3d/visual_instance.cpp index 723b0a9af5..b15226cce3 100644 --- a/scene/3d/visual_instance.cpp +++ b/scene/3d/visual_instance.cpp @@ -267,6 +267,15 @@ void GeometryInstance::_update_visibility() { void GeometryInstance::set_flag(Flags p_flag,bool p_value) { ERR_FAIL_INDEX(p_flag,FLAG_MAX); + if (p_flag==FLAG_CAST_SHADOW) { + if (p_value == true) { + set_cast_shadows_setting(SHADOW_CASTING_SETTING_ON); + } + else { + set_cast_shadows_setting(SHADOW_CASTING_SETTING_OFF); + } + } + if (flags[p_flag]==p_value) return; @@ -294,10 +303,32 @@ void GeometryInstance::set_flag(Flags p_flag,bool p_value) { bool GeometryInstance::get_flag(Flags p_flag) const{ ERR_FAIL_INDEX_V(p_flag,FLAG_MAX,false); + + if (p_flag == FLAG_CAST_SHADOW) { + if (shadow_casting_setting == SHADOW_CASTING_SETTING_OFF) { + return false; + } + else { + return true; + } + } + return flags[p_flag]; } +void GeometryInstance::set_cast_shadows_setting(ShadowCastingSetting p_shadow_casting_setting) { + + shadow_casting_setting = p_shadow_casting_setting; + + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(get_instance(), (VS::ShadowCastingSetting)p_shadow_casting_setting); +} + +GeometryInstance::ShadowCastingSetting GeometryInstance::get_cast_shadows_setting() const { + + return shadow_casting_setting; +} + void GeometryInstance::set_baked_light_texture_id(int p_id) { baked_light_texture_id=p_id; @@ -330,6 +361,9 @@ void GeometryInstance::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_flag","flag","value"), &GeometryInstance::set_flag); ObjectTypeDB::bind_method(_MD("get_flag","flag"), &GeometryInstance::get_flag); + ObjectTypeDB::bind_method(_MD("set_cast_shadows_setting", "shadow_casting_setting"), &GeometryInstance::set_cast_shadows_setting); + ObjectTypeDB::bind_method(_MD("get_cast_shadows_setting"), &GeometryInstance::get_cast_shadows_setting); + ObjectTypeDB::bind_method(_MD("set_draw_range_begin","mode"), &GeometryInstance::set_draw_range_begin); ObjectTypeDB::bind_method(_MD("get_draw_range_begin"), &GeometryInstance::get_draw_range_begin); @@ -346,7 +380,7 @@ void GeometryInstance::_bind_methods() { ADD_PROPERTYI( PropertyInfo( Variant::BOOL, "geometry/visible"), _SCS("set_flag"), _SCS("get_flag"),FLAG_VISIBLE); ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "geometry/material_override",PROPERTY_HINT_RESOURCE_TYPE,"Material"), _SCS("set_material_override"), _SCS("get_material_override")); - ADD_PROPERTYI( PropertyInfo( Variant::BOOL, "geometry/cast_shadow"), _SCS("set_flag"), _SCS("get_flag"),FLAG_CAST_SHADOW); + ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry/cast_shadow", PROPERTY_HINT_ENUM, "Off,On,Double-Sided,Shadows Only"), _SCS("set_cast_shadows_setting"), _SCS("get_cast_shadows_setting")); ADD_PROPERTYI( PropertyInfo( Variant::BOOL, "geometry/receive_shadows"), _SCS("set_flag"), _SCS("get_flag"),FLAG_RECEIVE_SHADOWS); ADD_PROPERTY( PropertyInfo( Variant::INT, "geometry/range_begin",PROPERTY_HINT_RANGE,"0,32768,0.01"), _SCS("set_draw_range_begin"), _SCS("get_draw_range_begin")); ADD_PROPERTY( PropertyInfo( Variant::INT, "geometry/range_end",PROPERTY_HINT_RANGE,"0,32768,0.01"), _SCS("set_draw_range_end"), _SCS("get_draw_range_end")); @@ -369,6 +403,11 @@ void GeometryInstance::_bind_methods() { BIND_CONSTANT(FLAG_VISIBLE_IN_ALL_ROOMS ); BIND_CONSTANT(FLAG_MAX ); + BIND_CONSTANT(SHADOW_CASTING_SETTING_OFF); + BIND_CONSTANT(SHADOW_CASTING_SETTING_ON); + BIND_CONSTANT(SHADOW_CASTING_SETTING_DOUBLE_SIDED); + BIND_CONSTANT(SHADOW_CASTING_SETTING_SHADOWS_ONLY); + } GeometryInstance::GeometryInstance() { @@ -381,6 +420,7 @@ GeometryInstance::GeometryInstance() { flags[FLAG_VISIBLE]=true; flags[FLAG_CAST_SHADOW]=true; flags[FLAG_RECEIVE_SHADOWS]=true; + shadow_casting_setting=SHADOW_CASTING_SETTING_ON; baked_light_instance=NULL; baked_light_texture_id=0; extra_cull_margin=0; diff --git a/scene/3d/visual_instance.h b/scene/3d/visual_instance.h index e49f4fb82f..2b8292261b 100644 --- a/scene/3d/visual_instance.h +++ b/scene/3d/visual_instance.h @@ -98,10 +98,17 @@ public: FLAG_MAX=VS::INSTANCE_FLAG_MAX, }; + enum ShadowCastingSetting { + SHADOW_CASTING_SETTING_OFF=VS::SHADOW_CASTING_SETTING_OFF, + SHADOW_CASTING_SETTING_ON = VS::SHADOW_CASTING_SETTING_ON, + SHADOW_CASTING_SETTING_DOUBLE_SIDED=VS::SHADOW_CASTING_SETTING_DOUBLE_SIDED, + SHADOW_CASTING_SETTING_SHADOWS_ONLY=VS::SHADOW_CASTING_SETTING_SHADOWS_ONLY + }; private: bool flags[FLAG_MAX]; + ShadowCastingSetting shadow_casting_setting; Ref<Material> material_override; float draw_begin; float draw_end; @@ -121,6 +128,9 @@ public: void set_flag(Flags p_flag,bool p_value); bool get_flag(Flags p_flag) const; + void set_cast_shadows_setting(ShadowCastingSetting p_shadow_casting_setting); + ShadowCastingSetting get_cast_shadows_setting() const; + void set_draw_range_begin(float p_dist); float get_draw_range_begin() const; @@ -140,5 +150,7 @@ public: }; VARIANT_ENUM_CAST( GeometryInstance::Flags ); +VARIANT_ENUM_CAST( GeometryInstance::ShadowCastingSetting ); + #endif diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 5d7436517f..96c3d28650 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -290,7 +290,10 @@ void TextEdit::_update_scrollbars() { int hscroll_rows = ((hmin.height-1)/get_row_height())+1; int visible_rows = get_visible_rows(); int total_rows = text.size(); - + if (scroll_past_end_of_file_enabled) { + total_rows += get_visible_rows() - 1; + } + int vscroll_pixels = v_scroll->get_combined_minimum_size().width; int visible_width = size.width - cache.style_normal->get_minimum_size().width; int total_width = text.get_max_width() + vmin.x; @@ -1677,9 +1680,30 @@ void TextEdit::_input_event(const InputEvent& p_input_event) { ins+="\t"; } } + + bool first_line = false; + if (k.mod.command) { + if (k.mod.shift) { + if (cursor.line > 0) { + cursor_set_line(cursor.line - 1); + cursor_set_column(text[cursor.line].length()); + } + else { + cursor_set_column(0); + first_line = true; + } + } + else { + cursor_set_column(text[cursor.line].length()); + } + } _insert_text_at_cursor(ins); _push_current_op(); + + if (first_line) { + cursor_set_line(0); + } } break; case KEY_ESCAPE: { @@ -3969,6 +3993,7 @@ TextEdit::TextEdit() { tooltip_obj=NULL; line_numbers=false; next_operation_is_complex=false; + scroll_past_end_of_file_enabled=false; auto_brace_completion_enabled=false; brace_matching_enabled=false; auto_indent=false; diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 44e780aaf3..8d0efc406a 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -211,6 +211,7 @@ class TextEdit : public Control { bool undo_enabled; bool line_numbers; + bool scroll_past_end_of_file_enabled; bool auto_brace_completion_enabled; bool brace_matching_enabled; bool auto_indent; @@ -322,6 +323,10 @@ public: void set_line(int line, String new_text); void backspace_at_cursor(); + inline void set_scroll_pass_end_of_file(bool p_enabled) { + scroll_past_end_of_file_enabled = p_enabled; + update(); + } inline void set_auto_brace_completion(bool p_enabled) { auto_brace_completion_enabled = p_enabled; } diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index b84e83cb0c..345c8bb32e 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -539,6 +539,7 @@ public: Vector<RID> light_instances; Vector<float> morph_values; BakedLightData *baked_light; + VS::ShadowCastingSetting cast_shadows; Transform *baked_light_octree_xform; int baked_lightmap_id; bool mirror :8; diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp index 3675194325..ec468b5e04 100644 --- a/servers/visual/visual_server_raster.cpp +++ b/servers/visual/visual_server_raster.cpp @@ -2724,7 +2724,12 @@ void VisualServerRaster::instance_geometry_set_flag(RID p_instance,InstanceFlags } break; case INSTANCE_FLAG_CAST_SHADOW: { - instance->cast_shadows=p_enabled; + if (p_enabled == true) { + instance->data.cast_shadows = SHADOW_CASTING_SETTING_ON; + } + else { + instance->data.cast_shadows = SHADOW_CASTING_SETTING_OFF; + } } break; case INSTANCE_FLAG_RECEIVE_SHADOWS: { @@ -2771,7 +2776,12 @@ bool VisualServerRaster::instance_geometry_get_flag(RID p_instance,InstanceFlags } break; case INSTANCE_FLAG_CAST_SHADOW: { - return instance->cast_shadows; + if(instance->data.cast_shadows == SHADOW_CASTING_SETTING_OFF) { + return false; + } + else { + return true; + } } break; case INSTANCE_FLAG_RECEIVE_SHADOWS: { @@ -2795,6 +2805,22 @@ bool VisualServerRaster::instance_geometry_get_flag(RID p_instance,InstanceFlags return false; } +void VisualServerRaster::instance_geometry_set_cast_shadows_setting(RID p_instance, VS::ShadowCastingSetting p_shadow_casting_setting) { + + Instance *instance = instance_owner.get( p_instance ); + ERR_FAIL_COND( !instance ); + + instance->data.cast_shadows = p_shadow_casting_setting; +} + +VS::ShadowCastingSetting VisualServerRaster::instance_geometry_get_cast_shadows_setting(RID p_instance) const{ + + const Instance *instance = instance_owner.get( p_instance ); + ERR_FAIL_COND_V( !instance, SHADOW_CASTING_SETTING_OFF ); + + return instance->data.cast_shadows; +} + void VisualServerRaster::instance_geometry_set_material_override(RID p_instance, RID p_material) { @@ -5019,7 +5045,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc float min,max; Instance *ins=instance_shadow_cull_result[j]; - if (!ins->visible || !ins->cast_shadows) + if (!ins->visible || ins->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) continue; ins->transformed_aabb.project_range_in_plane(Plane(z_vec,0),min,max); @@ -5047,7 +5073,7 @@ void VisualServerRaster::_light_instance_update_pssm_shadow(Instance *p_light,Sc for (int j=0;j<caster_cull_count;j++) { Instance *instance = instance_shadow_cull_result[j]; - if (!instance->visible || !instance->cast_shadows) + if (!instance->visible || instance->data.cast_shadows==VS::SHADOW_CASTING_SETTING_OFF) continue; _instance_draw(instance); } @@ -5130,7 +5156,7 @@ void VisualServerRaster::_light_instance_update_lispsm_shadow(Instance *p_light, for(int i=0;i<caster_count;i++) { Instance *ins = instance_shadow_cull_result[i]; - if (!ins->visible || !ins->cast_shadows) + if (!ins->visible || ins->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) continue; for(int j=0;j<8;j++) { @@ -5281,7 +5307,7 @@ void VisualServerRaster::_light_instance_update_lispsm_shadow(Instance *p_light, Instance *instance = instance_shadow_cull_result[i]; - if (!instance->visible || !instance->cast_shadows) + if (!instance->visible || instance->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) continue; _instance_draw(instance); } @@ -5378,7 +5404,7 @@ void VisualServerRaster::_light_instance_update_lispsm_shadow(Instance *p_light, for(int i=0;i<caster_count;i++) { Instance *ins=instance_shadow_cull_result[i]; - if (!ins->visible || !ins->cast_shadows) + if (!ins->visible || ins->cast_shadows==VS::SHADOW_CASTING_SETTING_OFF) continue; //@TODO optimize using support mapping @@ -5468,7 +5494,7 @@ void VisualServerRaster::_light_instance_update_lispsm_shadow(Instance *p_light, Instance *instance = instance_shadow_cull_result[i]; - if (!instance->visible || !instance->cast_shadows) + if (!instance->visible || instance->cast_shadows==VS::SHADOW_CASTING_SETTING_OFF) continue; _instance_draw(instance); } @@ -5516,7 +5542,7 @@ void VisualServerRaster::_light_instance_update_shadow(Instance *p_light,Scenari for (int i=0;i<cull_count;i++) { Instance *instance = instance_shadow_cull_result[i]; - if (!instance->visible || !instance->cast_shadows) + if (!instance->visible || instance->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) continue; _instance_draw(instance); } @@ -5557,7 +5583,7 @@ void VisualServerRaster::_light_instance_update_shadow(Instance *p_light,Scenari for (int j=0;j<cull_count;j++) { Instance *instance = instance_shadow_cull_result[j]; - if (!instance->visible || !instance->cast_shadows) + if (!instance->visible || instance->data.cast_shadows == VS::SHADOW_CASTING_SETTING_OFF) continue; _instance_draw(instance); @@ -6511,7 +6537,7 @@ void VisualServerRaster::_render_camera(Viewport *p_viewport,Camera *p_camera, S } } - } else if ((1<<ins->base_type)&INSTANCE_GEOMETRY_MASK && ins->visible) { + } else if ((1<<ins->base_type)&INSTANCE_GEOMETRY_MASK && ins->visible && ins->data.cast_shadows!=VS::SHADOW_CASTING_SETTING_SHADOWS_ONLY) { bool discarded=false; diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index 459dc60e81..4456843c79 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -169,7 +169,6 @@ class VisualServerRaster : public VisualServer { AABB transformed_aabb; uint32_t object_ID; bool visible; - bool cast_shadows; bool receive_shadows; bool visible_in_all_rooms; uint32_t layer_mask; @@ -300,7 +299,7 @@ class VisualServerRaster : public VisualServer { update_next=NULL; update=false; visible=true; - cast_shadows=true; + data.cast_shadows=SHADOW_CASTING_SETTING_ON; receive_shadows=true; data.depth_scale=false; data.billboard=false; @@ -1093,6 +1092,9 @@ public: virtual void instance_geometry_set_flag(RID p_instance,InstanceFlags p_flags,bool p_enabled); virtual bool instance_geometry_get_flag(RID p_instance,InstanceFlags p_flags) const; + virtual void instance_geometry_set_cast_shadows_setting(RID p_instance, VS::ShadowCastingSetting p_shadow_casting_setting); + virtual VS::ShadowCastingSetting instance_geometry_get_cast_shadows_setting(RID p_instance) const; + virtual void instance_geometry_set_material_override(RID p_instance, RID p_material); virtual RID instance_geometry_get_material_override(RID p_instance) const; diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index fb502d8a6e..74630d67ef 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -534,6 +534,9 @@ public: FUNC3(instance_geometry_set_flag,RID,InstanceFlags ,bool ); FUNC2RC(bool,instance_geometry_get_flag,RID,InstanceFlags ); + FUNC2(instance_geometry_set_cast_shadows_setting, RID, ShadowCastingSetting); + FUNC1RC(ShadowCastingSetting, instance_geometry_get_cast_shadows_setting, RID); + FUNC2(instance_geometry_set_material_override,RID, RID ); FUNC1RC(RID,instance_geometry_get_material_override,RID); diff --git a/servers/visual_server.h b/servers/visual_server.h index 4841720f41..bf689bd0a6 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -937,9 +937,19 @@ public: INSTANCE_FLAG_MAX }; + enum ShadowCastingSetting { + SHADOW_CASTING_SETTING_OFF, + SHADOW_CASTING_SETTING_ON, + SHADOW_CASTING_SETTING_DOUBLE_SIDED, + SHADOW_CASTING_SETTING_SHADOWS_ONLY, + }; + virtual void instance_geometry_set_flag(RID p_instance,InstanceFlags p_flags,bool p_enabled)=0; virtual bool instance_geometry_get_flag(RID p_instance,InstanceFlags p_flags) const=0; + virtual void instance_geometry_set_cast_shadows_setting(RID p_instance, ShadowCastingSetting p_shadow_casting_setting) = 0; + virtual ShadowCastingSetting instance_geometry_get_cast_shadows_setting(RID p_instance) const = 0; + virtual void instance_geometry_set_material_override(RID p_instance, RID p_material)=0; virtual RID instance_geometry_get_material_override(RID p_instance) const=0; diff --git a/tools/Godot.app/Contents/Info.plist b/tools/Godot.app/Contents/Info.plist index cb2db17807..e2a6489782 100755 --- a/tools/Godot.app/Contents/Info.plist +++ b/tools/Godot.app/Contents/Info.plist @@ -19,11 +19,11 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.0.0</string> + <string>2.0.1</string> <key>CFBundleSignature</key> <string>godot</string> <key>CFBundleVersion</key> - <string>1.0.0</string> + <string>2.0.1</string> <key>NSHumanReadableCopyright</key> <string>© 2007-2016 Juan Linietsky, Ariel Manzur</string> <key>LSMinimumSystemVersion</key> diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp index 47ef87cfb1..fda51423d2 100644 --- a/tools/editor/editor_settings.cpp +++ b/tools/editor/editor_settings.cpp @@ -404,6 +404,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { set("text_editor/brace_mismatch_color",Color(1,0.2,0.2)); set("text_editor/current_line_color",Color(0.3,0.5,0.8,0.15)); + set("text_editor/scroll_past_end_of_file", false); + set("text_editor/idle_parse_delay",2); set("text_editor/create_signal_callbacks",true); set("text_editor/autosave_interval_secs",0); diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp index e3dce0b36a..4be8b3f95c 100644 --- a/tools/editor/plugins/script_editor_plugin.cpp +++ b/tools/editor/plugins/script_editor_plugin.cpp @@ -1927,6 +1927,7 @@ void ScriptEditor::edit(const Ref<Script>& p_script) { ScriptTextEditor *ste = memnew( ScriptTextEditor ); ste->set_edited_script(p_script); ste->get_text_edit()->set_tooltip_request_func(this,"_get_debug_tooltip",ste); + ste->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); ste->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); ste->get_text_edit()->set_callhint_settings( EditorSettings::get_singleton()->get("text_editor/put_callhint_tooltip_below_current_line"), @@ -2064,6 +2065,7 @@ void ScriptEditor::_editor_settings_changed() { continue; ste->get_text_edit()->set_auto_brace_completion(EditorSettings::get_singleton()->get("text_editor/auto_brace_complete")); + ste->get_text_edit()->set_scroll_pass_end_of_file(EditorSettings::get_singleton()->get("text_editor/scroll_past_end_of_file")); } } diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp index 1f264a2337..522da24ea6 100644 --- a/tools/editor/plugins/spatial_editor_plugin.cpp +++ b/tools/editor/plugins/spatial_editor_plugin.cpp @@ -2196,7 +2196,7 @@ void SpatialEditorViewport::_init_gizmo_instance(int p_idx) { VS::get_singleton()->instance_set_scenario(move_gizmo_instance[i],get_tree()->get_root()->get_world()->get_scenario()); VS::get_singleton()->instance_geometry_set_flag(move_gizmo_instance[i],VS::INSTANCE_FLAG_VISIBLE,false); //VS::get_singleton()->instance_geometry_set_flag(move_gizmo_instance[i],VS::INSTANCE_FLAG_DEPH_SCALE,true); - VS::get_singleton()->instance_geometry_set_flag(move_gizmo_instance[i],VS::INSTANCE_FLAG_CAST_SHADOW,false); + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(move_gizmo_instance[i], VS::SHADOW_CASTING_SETTING_OFF); VS::get_singleton()->instance_set_layer_mask(move_gizmo_instance[i],layer); rotate_gizmo_instance[i]=VS::get_singleton()->instance_create(); @@ -2204,7 +2204,7 @@ void SpatialEditorViewport::_init_gizmo_instance(int p_idx) { VS::get_singleton()->instance_set_scenario(rotate_gizmo_instance[i],get_tree()->get_root()->get_world()->get_scenario()); VS::get_singleton()->instance_geometry_set_flag(rotate_gizmo_instance[i],VS::INSTANCE_FLAG_VISIBLE,false); //VS::get_singleton()->instance_geometry_set_flag(rotate_gizmo_instance[i],VS::INSTANCE_FLAG_DEPH_SCALE,true); - VS::get_singleton()->instance_geometry_set_flag(rotate_gizmo_instance[i],VS::INSTANCE_FLAG_CAST_SHADOW,false); + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(rotate_gizmo_instance[i], VS::SHADOW_CASTING_SETTING_OFF); VS::get_singleton()->instance_set_layer_mask(rotate_gizmo_instance[i],layer); } @@ -2585,7 +2585,7 @@ Object *SpatialEditor::_get_editor_data(Object *p_what) { si->sp=sp; si->sbox_instance=VisualServer::get_singleton()->instance_create2(selection_box->get_rid(),sp->get_world()->get_scenario()); - VS::get_singleton()->instance_geometry_set_flag(si->sbox_instance,VS::INSTANCE_FLAG_CAST_SHADOW,false); + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(si->sbox_instance, VS::SHADOW_CASTING_SETTING_OFF); RID inst = sp->call("_get_visual_instance_rid"); @@ -3272,8 +3272,8 @@ void SpatialEditor::_init_indicators() { grid_visible[i]=false; grid_enable[i]=false; VisualServer::get_singleton()->instance_geometry_set_flag(grid_instance[i],VS::INSTANCE_FLAG_VISIBLE,false); - VisualServer::get_singleton()->instance_geometry_set_flag(grid_instance[i],VS::INSTANCE_FLAG_CAST_SHADOW,false); - VS::get_singleton()->instance_set_layer_mask(grid_instance[i],1<<SpatialEditorViewport::GIZMO_GRID_LAYER); + VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(grid_instance[i], VS::SHADOW_CASTING_SETTING_OFF); + VS::get_singleton()->instance_set_layer_mask(grid_instance[i], 1 << SpatialEditorViewport::GIZMO_GRID_LAYER); } @@ -3294,7 +3294,7 @@ void SpatialEditor::_init_indicators() { origin_instance = VisualServer::get_singleton()->instance_create2(origin,get_tree()->get_root()->get_world()->get_scenario()); VS::get_singleton()->instance_set_layer_mask(origin_instance,1<<SpatialEditorViewport::GIZMO_GRID_LAYER); - VisualServer::get_singleton()->instance_geometry_set_flag(origin_instance,VS::INSTANCE_FLAG_CAST_SHADOW,false); + VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(origin_instance, VS::SHADOW_CASTING_SETTING_OFF); @@ -3331,7 +3331,7 @@ void SpatialEditor::_init_indicators() { cursor_instance = VisualServer::get_singleton()->instance_create2(cursor_mesh,get_tree()->get_root()->get_world()->get_scenario()); VS::get_singleton()->instance_set_layer_mask(cursor_instance,1<<SpatialEditorViewport::GIZMO_GRID_LAYER); - VisualServer::get_singleton()->instance_geometry_set_flag(cursor_instance,VS::INSTANCE_FLAG_CAST_SHADOW,false); + VisualServer::get_singleton()->instance_geometry_set_cast_shadows_setting(cursor_instance, VS::SHADOW_CASTING_SETTING_OFF); } diff --git a/tools/editor/spatial_editor_gizmos.cpp b/tools/editor/spatial_editor_gizmos.cpp index de35672278..d4bc701dad 100644 --- a/tools/editor/spatial_editor_gizmos.cpp +++ b/tools/editor/spatial_editor_gizmos.cpp @@ -81,7 +81,7 @@ void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base) { VS::get_singleton()->instance_attach_skeleton(instance,skeleton); if (extra_margin) VS::get_singleton()->instance_set_extra_visibility_margin(instance,1); - VS::get_singleton()->instance_geometry_set_flag(instance,VS::INSTANCE_FLAG_CAST_SHADOW,false); + VS::get_singleton()->instance_geometry_set_cast_shadows_setting(instance,VS::SHADOW_CASTING_SETTING_OFF); VS::get_singleton()->instance_geometry_set_flag(instance,VS::INSTANCE_FLAG_RECEIVE_SHADOWS,false); VS::get_singleton()->instance_set_layer_mask(instance,1<<SpatialEditorViewport::GIZMO_EDIT_LAYER); //gizmos are 26 } |