Browse Source

Merge pull request #38659 from akien-mga/3.2-cherrypicks

Cherry-picks for the 3.2 branch (future 3.2.2) - 5th batch
Rémi Verschelde 5 years ago
parent
commit
a9bcd8ba26
100 changed files with 474 additions and 250 deletions
  1. 8 0
      .appveyor.yml
  2. 1 1
      COPYRIGHT.txt
  3. 2 0
      core/variant_call.cpp
  4. 2 2
      doc/classes/Engine.xml
  5. 1 1
      doc/classes/Node.xml
  6. 1 1
      doc/classes/Vector3.xml
  7. 3 0
      doc/classes/VisualShaderNodeInput.xml
  8. 5 0
      doc/classes/VisualShaderNodeIs.xml
  9. 2 0
      doc/classes/VisualShaderNodeOuterProduct.xml
  10. 2 0
      doc/classes/VisualShaderNodeOutput.xml
  11. 2 0
      doc/classes/VisualShaderNodeScalarClamp.xml
  12. 6 0
      doc/classes/VisualShaderNodeScalarDerivativeFunc.xml
  13. 2 0
      doc/classes/VisualShaderNodeScalarInterp.xml
  14. 3 0
      doc/classes/VisualShaderNodeScalarSmoothStep.xml
  15. 2 0
      doc/classes/VisualShaderNodeScalarSwitch.xml
  16. 2 0
      doc/classes/VisualShaderNodeSwitch.xml
  17. 14 0
      doc/classes/VisualShaderNodeTexture.xml
  18. 10 0
      doc/classes/VisualShaderNodeTextureUniform.xml
  19. 2 0
      doc/classes/VisualShaderNodeTextureUniformTriplanar.xml
  20. 2 0
      doc/classes/VisualShaderNodeTransformCompose.xml
  21. 3 0
      doc/classes/VisualShaderNodeTransformConstant.xml
  22. 2 0
      doc/classes/VisualShaderNodeTransformDecompose.xml
  23. 5 0
      doc/classes/VisualShaderNodeTransformFunc.xml
  24. 7 0
      doc/classes/VisualShaderNodeTransformMult.xml
  25. 2 0
      doc/classes/VisualShaderNodeTransformUniform.xml
  26. 7 0
      doc/classes/VisualShaderNodeTransformVecMult.xml
  27. 3 0
      doc/classes/VisualShaderNodeUniform.xml
  28. 3 0
      doc/classes/VisualShaderNodeVec3Constant.xml
  29. 2 0
      doc/classes/VisualShaderNodeVec3Uniform.xml
  30. 2 0
      doc/classes/VisualShaderNodeVectorClamp.xml
  31. 2 0
      doc/classes/VisualShaderNodeVectorCompose.xml
  32. 2 0
      doc/classes/VisualShaderNodeVectorDecompose.xml
  33. 6 0
      doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
  34. 3 0
      doc/classes/VisualShaderNodeVectorDistance.xml
  35. 38 0
      doc/classes/VisualShaderNodeVectorFunc.xml
  36. 2 0
      doc/classes/VisualShaderNodeVectorInterp.xml
  37. 2 0
      doc/classes/VisualShaderNodeVectorLen.xml
  38. 15 0
      doc/classes/VisualShaderNodeVectorOp.xml
  39. 2 0
      doc/classes/VisualShaderNodeVectorRefract.xml
  40. 2 0
      doc/classes/VisualShaderNodeVectorScalarMix.xml
  41. 3 0
      doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml
  42. 3 0
      doc/classes/VisualShaderNodeVectorScalarStep.xml
  43. 3 0
      doc/classes/VisualShaderNodeVectorSmoothStep.xml
  44. 2 0
      editor/editor_log.cpp
  45. 1 0
      editor/icons/ErrorWarning.svg
  46. 12 2
      editor/plugins/spatial_editor_plugin.cpp
  47. 1 0
      editor/plugins/spatial_editor_plugin.h
  48. 22 22
      editor/scene_tree_dock.cpp
  49. 2 2
      editor/scene_tree_dock.h
  50. 7 4
      editor/script_editor_debugger.cpp
  51. 6 0
      main/godotcontrollerdb.txt
  52. 26 3
      modules/gdscript/gdscript.cpp
  53. 1 1
      modules/gdscript/gdscript.h
  54. 1 1
      modules/gdscript/gdscript_editor.cpp
  55. 5 0
      modules/gdscript/gdscript_functions.cpp
  56. 34 12
      modules/gdscript/gdscript_parser.cpp
  57. 1 0
      modules/gdscript/gdscript_parser.h
  58. 2 5
      modules/mono/build_scripts/godot_tools_build.py
  59. 15 99
      modules/mono/build_scripts/solution_builder.py
  60. 15 5
      modules/mono/config.py
  61. 1 1
      modules/mono/csharp_script.cpp
  62. 11 23
      modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj
  63. 16 2
      modules/mono/mono_gd/gd_mono_class.cpp
  64. 4 3
      modules/mono/mono_gd/gd_mono_class.h
  65. 1 1
      platform/windows/key_mapping_windows.cpp
  66. 1 1
      platform/windows/os_windows.cpp
  67. 13 4
      scene/2d/visibility_notifier_2d.cpp
  68. 1 1
      scene/debugger/script_debugger_remote.cpp
  69. 4 0
      scene/gui/line_edit.cpp
  70. 3 0
      scene/resources/capsule_shape_2d.cpp
  71. 1 1
      thirdparty/README.md
  72. 1 1
      thirdparty/freetype/include/freetype/config/ftconfig.h
  73. 1 1
      thirdparty/freetype/include/freetype/config/ftheader.h
  74. 20 2
      thirdparty/freetype/include/freetype/config/ftoption.h
  75. 1 1
      thirdparty/freetype/include/freetype/config/ftstdlib.h
  76. 18 17
      thirdparty/freetype/include/freetype/freetype.h
  77. 1 1
      thirdparty/freetype/include/freetype/ftadvanc.h
  78. 1 1
      thirdparty/freetype/include/freetype/ftbbox.h
  79. 1 1
      thirdparty/freetype/include/freetype/ftbdf.h
  80. 1 1
      thirdparty/freetype/include/freetype/ftbitmap.h
  81. 1 1
      thirdparty/freetype/include/freetype/ftbzip2.h
  82. 1 1
      thirdparty/freetype/include/freetype/ftcache.h
  83. 1 1
      thirdparty/freetype/include/freetype/ftcid.h
  84. 10 7
      thirdparty/freetype/include/freetype/ftcolor.h
  85. 1 1
      thirdparty/freetype/include/freetype/ftdriver.h
  86. 1 1
      thirdparty/freetype/include/freetype/fterrdef.h
  87. 1 1
      thirdparty/freetype/include/freetype/fterrors.h
  88. 1 1
      thirdparty/freetype/include/freetype/ftfntfmt.h
  89. 1 1
      thirdparty/freetype/include/freetype/ftgasp.h
  90. 1 1
      thirdparty/freetype/include/freetype/ftglyph.h
  91. 1 1
      thirdparty/freetype/include/freetype/ftgxval.h
  92. 1 1
      thirdparty/freetype/include/freetype/ftgzip.h
  93. 1 1
      thirdparty/freetype/include/freetype/ftimage.h
  94. 1 1
      thirdparty/freetype/include/freetype/ftincrem.h
  95. 1 1
      thirdparty/freetype/include/freetype/ftlcdfil.h
  96. 1 1
      thirdparty/freetype/include/freetype/ftlist.h
  97. 1 1
      thirdparty/freetype/include/freetype/ftlzw.h
  98. 1 1
      thirdparty/freetype/include/freetype/ftmac.h
  99. 1 1
      thirdparty/freetype/include/freetype/ftmm.h
  100. 1 1
      thirdparty/freetype/include/freetype/ftmodapi.h

+ 8 - 0
.appveyor.yml

@@ -30,3 +30,11 @@ before_build:
 
 
 build_script:
 build_script:
   - scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% debug_symbols=no verbose=yes progress=no gdnative_wrapper=yes
   - scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% debug_symbols=no verbose=yes progress=no gdnative_wrapper=yes
+
+after_build:
+  - 7z a godot_build.zip bin\*.exe
+
+artifacts:
+  - path: godot_build.zip
+    name: Build
+    type: zip

+ 1 - 1
COPYRIGHT.txt

@@ -159,7 +159,7 @@ License: Expat and Bitstream Vera Fonts Copyright
 
 
 Files: ./thirdparty/freetype/
 Files: ./thirdparty/freetype/
 Comment: The FreeType Project
 Comment: The FreeType Project
-Copyright: 1996-2019, David Turner, Robert Wilhelm, and Werner Lemberg.
+Copyright: 1996-2020, David Turner, Robert Wilhelm, and Werner Lemberg.
 License: FTL
 License: FTL
 
 
 Files: ./thirdparty/glad/
 Files: ./thirdparty/glad/

+ 2 - 0
core/variant_call.cpp

@@ -1211,6 +1211,8 @@ Variant Variant::construct(const Variant::Type p_type, const Variant **p_args, i
 			}
 			}
 			case RECT2: return (Rect2(*p_args[0]));
 			case RECT2: return (Rect2(*p_args[0]));
 			case VECTOR3: return (Vector3(*p_args[0]));
 			case VECTOR3: return (Vector3(*p_args[0]));
+			case TRANSFORM2D:
+				return (Transform2D(p_args[0]->operator Transform2D()));
 			case PLANE: return (Plane(*p_args[0]));
 			case PLANE: return (Plane(*p_args[0]));
 			case QUAT: return (p_args[0]->operator Quat());
 			case QUAT: return (p_args[0]->operator Quat());
 			case AABB:
 			case AABB:

+ 2 - 2
doc/classes/Engine.xml

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="Engine" inherits="Object" version="3.2">
 <class name="Engine" inherits="Object" version="3.2">
 	<brief_description>
 	<brief_description>
-		Access to basic engine properties.
+		Access to engine properties.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
-		The [Engine] class allows you to query and modify the project's run-time parameters, such as frames per second, time scale, and others.
+		The [Engine] singleton allows you to query and modify the project's run-time parameters, such as frames per second, time scale, and others.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 1 - 1
doc/classes/Node.xml

@@ -303,7 +303,7 @@
 			<return type="Node">
 			<return type="Node">
 			</return>
 			</return>
 			<description>
 			<description>
-				Returns the parent node of the current node, or an empty [Node] if the node lacks a parent.
+				Returns the parent node of the current node, or a [code]null instance[/code] if the node lacks a parent.
 			</description>
 			</description>
 		</method>
 		</method>
 		<method name="get_path" qualifiers="const">
 		<method name="get_path" qualifiers="const">

+ 1 - 1
doc/classes/Vector3.xml

@@ -299,7 +299,7 @@
 			<argument index="0" name="by" type="Vector3">
 			<argument index="0" name="by" type="Vector3">
 			</argument>
 			</argument>
 			<description>
 			<description>
-				Returns a copy of the vector snapped to the lowest neared multiple.
+				Returns the vector snapped to a grid with the given size.
 			</description>
 			</description>
 		</method>
 		</method>
 		<method name="to_diagonal_matrix">
 		<method name="to_diagonal_matrix">

+ 3 - 0
doc/classes/VisualShaderNodeInput.xml

@@ -3,8 +3,10 @@
 	<brief_description>
 	<brief_description>
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Gives access to input variables (built-ins) available for the shader. See the shading reference for the list of available built-ins for each shader type (check [code]Tutorials[/code] section for link).
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
+		<link>https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/index.html</link>
 	</tutorials>
 	</tutorials>
 	<methods>
 	<methods>
 		<method name="get_input_real_name" qualifiers="const">
 		<method name="get_input_real_name" qualifiers="const">
@@ -16,6 +18,7 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="input_name" type="String" setter="set_input_name" getter="get_input_name" default="&quot;[None]&quot;">
 		<member name="input_name" type="String" setter="set_input_name" getter="get_input_name" default="&quot;[None]&quot;">
+			One of the several input constants in lower-case style like: "vertex"([code]VERTEX[/code]) or "point_size"([code]POINT_SIZE[/code]).
 		</member>
 		</member>
 	</members>
 	</members>
 	<signals>
 	<signals>

+ 5 - 0
doc/classes/VisualShaderNodeIs.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeIs" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeIs" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A boolean comparison operator to be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Returns the boolean result of the comparison between [code]INF[/code] or [code]NaN[/code] and a scalar parameter.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,12 +12,15 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIs.Function" default="0">
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIs.Function" default="0">
+			The comparison function. See [enum Function] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="FUNC_IS_INF" value="0" enum="Function">
 		<constant name="FUNC_IS_INF" value="0" enum="Function">
+			Comparison with [code]INF[/code] (Infinity).
 		</constant>
 		</constant>
 		<constant name="FUNC_IS_NAN" value="1" enum="Function">
 		<constant name="FUNC_IS_NAN" value="1" enum="Function">
+			Comparison with [code]NaN[/code] (Not a Number; denotes invalid numeric results, e.g. division by zero).
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeOuterProduct.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeOuterProduct" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeOuterProduct" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates an outer product of two vectors within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		[code]OuterProduct[/code] treats the first parameter [code]c[/code] as a column vector (matrix with one column) and the second parameter [code]r[/code] as a row vector (matrix with one row) and does a linear algebraic matrix multiply [code]c * r[/code], yielding a matrix whose number of rows is the number of components in [code]c[/code] and whose number of columns is the number of components in [code]r[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeOutput.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeOutput" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeOutput" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Represents the output shader parameters within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		This visual shader node is present in all shader graphs in form of "Output" block with mutliple output value ports.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeScalarClamp.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeScalarClamp" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeScalarClamp" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Clamps a scalar value within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Constrains a value to lie between [code]min[/code] and [code]max[/code] values.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 6 - 0
doc/classes/VisualShaderNodeScalarDerivativeFunc.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeScalarDerivativeFunc" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeScalarDerivativeFunc" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a scalar derivative within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,14 +12,18 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0">
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0">
+			The derivative type. See [enum Function] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="FUNC_SUM" value="0" enum="Function">
 		<constant name="FUNC_SUM" value="0" enum="Function">
+			Sum of absolute derivative in [code]x[/code] and [code]y[/code].
 		</constant>
 		</constant>
 		<constant name="FUNC_X" value="1" enum="Function">
 		<constant name="FUNC_X" value="1" enum="Function">
+			Derivative in [code]x[/code] using local differencing.
 		</constant>
 		</constant>
 		<constant name="FUNC_Y" value="2" enum="Function">
 		<constant name="FUNC_Y" value="2" enum="Function">
+			Derivative in [code]y[/code] using local differencing.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeScalarInterp.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeScalarInterp" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeScalarInterp" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Linearly interpolates between two scalars within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]mix(a, b, weight)[/code] in the shader language.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 3 - 0
doc/classes/VisualShaderNodeScalarSmoothStep.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a scalar SmoothStep function within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader language.
+		Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/code]. Otherwise the return value is interpolated between [code]0.0[/code] and [code]1.0[/code] using Hermite polynomials.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeScalarSwitch.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeScalarSwitch" inherits="VisualShaderNodeSwitch" version="3.2">
 <class name="VisualShaderNodeScalarSwitch" inherits="VisualShaderNodeSwitch" version="3.2">
 	<brief_description>
 	<brief_description>
+		A boolean/scalar function for use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Returns an associated scalar if the provided boolean value is [code]true[/code] or [code]false[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeSwitch.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeSwitch" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeSwitch" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A boolean/vector function for use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Returns an associated vector if the provided boolean value is [code]true[/code] or [code]false[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 14 - 0
doc/classes/VisualShaderNodeTexture.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTexture" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTexture" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Performs a texture lookup within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Performs a lookup operation on the provided texture, with support for multiple texture sources to choose from.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,30 +12,42 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeTexture.Source" default="0">
 		<member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeTexture.Source" default="0">
+			Determines the source for the lookup. See [enum Source] for options.
 		</member>
 		</member>
 		<member name="texture" type="Texture" setter="set_texture" getter="get_texture">
 		<member name="texture" type="Texture" setter="set_texture" getter="get_texture">
+			The source texture, if needed for the selected [member source].
 		</member>
 		</member>
 		<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="VisualShaderNodeTexture.TextureType" default="0">
 		<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="VisualShaderNodeTexture.TextureType" default="0">
+			Specifies the type of the texture if [member source] is set to [constant SOURCE_TEXTURE]. See [enum TextureType] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="SOURCE_TEXTURE" value="0" enum="Source">
 		<constant name="SOURCE_TEXTURE" value="0" enum="Source">
+			Use the texture given as an argument for this function.
 		</constant>
 		</constant>
 		<constant name="SOURCE_SCREEN" value="1" enum="Source">
 		<constant name="SOURCE_SCREEN" value="1" enum="Source">
+			Use the current viewport's texture as the source.
 		</constant>
 		</constant>
 		<constant name="SOURCE_2D_TEXTURE" value="2" enum="Source">
 		<constant name="SOURCE_2D_TEXTURE" value="2" enum="Source">
+			Use the texture from this shader's texture built-in (e.g. a texture of a [Sprite]).
 		</constant>
 		</constant>
 		<constant name="SOURCE_2D_NORMAL" value="3" enum="Source">
 		<constant name="SOURCE_2D_NORMAL" value="3" enum="Source">
+			Use the texture from this shader's normal map built-in.
 		</constant>
 		</constant>
 		<constant name="SOURCE_DEPTH" value="4" enum="Source">
 		<constant name="SOURCE_DEPTH" value="4" enum="Source">
+			Use the depth texture available for this shader.
 		</constant>
 		</constant>
 		<constant name="SOURCE_PORT" value="5" enum="Source">
 		<constant name="SOURCE_PORT" value="5" enum="Source">
+			Use the texture provided in the input port for this function.
 		</constant>
 		</constant>
 		<constant name="TYPE_DATA" value="0" enum="TextureType">
 		<constant name="TYPE_DATA" value="0" enum="TextureType">
+			No hints are added to the uniform declaration.
 		</constant>
 		</constant>
 		<constant name="TYPE_COLOR" value="1" enum="TextureType">
 		<constant name="TYPE_COLOR" value="1" enum="TextureType">
+			Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper sRGB to linear conversion.
 		</constant>
 		</constant>
 		<constant name="TYPE_NORMALMAP" value="2" enum="TextureType">
 		<constant name="TYPE_NORMALMAP" value="2" enum="TextureType">
+			Adds [code]hint_normal[/code] as hint to the uniform declaration, which internally converts the texture for proper usage as normal map.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 10 - 0
doc/classes/VisualShaderNodeTextureUniform.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTextureUniform" inherits="VisualShaderNodeUniform" version="3.2">
 <class name="VisualShaderNodeTextureUniform" inherits="VisualShaderNodeUniform" version="3.2">
 	<brief_description>
 	<brief_description>
+		Performs a uniform texture lookup within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Performs a lookup operation on the texture provided as a uniform for the shader.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,22 +12,30 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="color_default" type="int" setter="set_color_default" getter="get_color_default" enum="VisualShaderNodeTextureUniform.ColorDefault" default="0">
 		<member name="color_default" type="int" setter="set_color_default" getter="get_color_default" enum="VisualShaderNodeTextureUniform.ColorDefault" default="0">
+			Sets the default color if no texture is assigned to the uniform.
 		</member>
 		</member>
 		<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="VisualShaderNodeTextureUniform.TextureType" default="0">
 		<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="VisualShaderNodeTextureUniform.TextureType" default="0">
+			Defines the type of data provided by the source texture. See [enum TextureType] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="TYPE_DATA" value="0" enum="TextureType">
 		<constant name="TYPE_DATA" value="0" enum="TextureType">
+			No hints are added to the uniform declaration.
 		</constant>
 		</constant>
 		<constant name="TYPE_COLOR" value="1" enum="TextureType">
 		<constant name="TYPE_COLOR" value="1" enum="TextureType">
+			Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper sRGB to linear conversion.
 		</constant>
 		</constant>
 		<constant name="TYPE_NORMALMAP" value="2" enum="TextureType">
 		<constant name="TYPE_NORMALMAP" value="2" enum="TextureType">
+			Adds [code]hint_normal[/code] as hint to the uniform declaration, which internally converts the texture for proper usage as normal map.
 		</constant>
 		</constant>
 		<constant name="TYPE_ANISO" value="3" enum="TextureType">
 		<constant name="TYPE_ANISO" value="3" enum="TextureType">
+			Adds [code]hint_aniso[/code] as hint to the uniform declaration to use for a flowmap.
 		</constant>
 		</constant>
 		<constant name="COLOR_DEFAULT_WHITE" value="0" enum="ColorDefault">
 		<constant name="COLOR_DEFAULT_WHITE" value="0" enum="ColorDefault">
+			Defaults to white color.
 		</constant>
 		</constant>
 		<constant name="COLOR_DEFAULT_BLACK" value="1" enum="ColorDefault">
 		<constant name="COLOR_DEFAULT_BLACK" value="1" enum="ColorDefault">
+			Defaults to black color.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeTextureUniformTriplanar.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTextureUniformTriplanar" inherits="VisualShaderNodeTextureUniform" version="3.2">
 <class name="VisualShaderNodeTextureUniformTriplanar" inherits="VisualShaderNodeTextureUniform" version="3.2">
 	<brief_description>
 	<brief_description>
+		Performs a uniform texture lookup with triplanar within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Performs a lookup operation on the texture provided as a uniform for the shader, with support for triplanar mapping.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeTransformCompose.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformCompose" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformCompose" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Composes a [Transform] from four [Vector3]s within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Creates a 4x4 transform matrix using four vectors of type [code]vec3[/code]. Each vector is one row in the matrix and the last column is a [code]vec4(0, 0, 0, 1)[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 3 - 0
doc/classes/VisualShaderNodeTransformConstant.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformConstant" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformConstant" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A [Transform] constant for use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A constant [Transform], which can be used as an input node.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,6 +12,7 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="constant" type="Transform" setter="set_constant" getter="get_constant" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )">
 		<member name="constant" type="Transform" setter="set_constant" getter="get_constant" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )">
+			A [Transform] constant which represents the state of this node.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>

+ 2 - 0
doc/classes/VisualShaderNodeTransformDecompose.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformDecompose" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformDecompose" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Decomposes a [Transform] into four [Vector3]s within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Takes a 4x4 transform matrix and decomposes it into four [code]vec3[/code] values, one from each row of the matrix.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 5 - 0
doc/classes/VisualShaderNodeTransformFunc.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformFunc" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformFunc" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Computes a [Transform] function within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Computes an inverse or transpose function on the provided [Transform].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,12 +12,15 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeTransformFunc.Function" default="0">
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeTransformFunc.Function" default="0">
+			The function to be computed. See [enum Function] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="FUNC_INVERSE" value="0" enum="Function">
 		<constant name="FUNC_INVERSE" value="0" enum="Function">
+			Perform the inverse operation on the [Transform] matrix.
 		</constant>
 		</constant>
 		<constant name="FUNC_TRANSPOSE" value="1" enum="Function">
 		<constant name="FUNC_TRANSPOSE" value="1" enum="Function">
+			Perform the transpose operation on the [Transform] matrix.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 7 - 0
doc/classes/VisualShaderNodeTransformMult.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformMult" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformMult" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Multiplies [Transform] by [Transform] within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A multiplication operation on two transforms (4x4 matrices), with support for different multiplication operators.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,16 +12,21 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformMult.Operator" default="0">
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformMult.Operator" default="0">
+			The multiplication type to be performed on the transforms. See [enum Operator] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="OP_AxB" value="0" enum="Operator">
 		<constant name="OP_AxB" value="0" enum="Operator">
+			Multiplies transform [code]a[/code] by the transform [code]b[/code].
 		</constant>
 		</constant>
 		<constant name="OP_BxA" value="1" enum="Operator">
 		<constant name="OP_BxA" value="1" enum="Operator">
+			Multiplies transform [code]b[/code] by the transform [code]a[/code].
 		</constant>
 		</constant>
 		<constant name="OP_AxB_COMP" value="2" enum="Operator">
 		<constant name="OP_AxB_COMP" value="2" enum="Operator">
+			Performs a component-wise multiplication of transform [code]a[/code] by the transform [code]b[/code].
 		</constant>
 		</constant>
 		<constant name="OP_BxA_COMP" value="3" enum="Operator">
 		<constant name="OP_BxA_COMP" value="3" enum="Operator">
+			Performs a component-wise multiplication of transform [code]b[/code] by the transform [code]a[/code].
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeTransformUniform.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformUniform" inherits="VisualShaderNodeUniform" version="3.2">
 <class name="VisualShaderNodeTransformUniform" inherits="VisualShaderNodeUniform" version="3.2">
 	<brief_description>
 	<brief_description>
+		A [Transform] uniform for use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translated to [code]uniform mat4[/code] in the shader language.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 7 - 0
doc/classes/VisualShaderNodeTransformVecMult.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeTransformVecMult" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeTransformVecMult" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Multiplies a [Transform] and a [Vector3] within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A multiplication operation on a transform (4x4 matrix) and a vector, with support for different multiplication operators.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,16 +12,21 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformVecMult.Operator" default="0">
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformVecMult.Operator" default="0">
+			The multiplication type to be performed. See [enum Operator] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="OP_AxB" value="0" enum="Operator">
 		<constant name="OP_AxB" value="0" enum="Operator">
+			Multiplies transform [code]a[/code] by the vector [code]b[/code].
 		</constant>
 		</constant>
 		<constant name="OP_BxA" value="1" enum="Operator">
 		<constant name="OP_BxA" value="1" enum="Operator">
+			Multiplies vector [code]b[/code] by the transform [code]a[/code].
 		</constant>
 		</constant>
 		<constant name="OP_3x3_AxB" value="2" enum="Operator">
 		<constant name="OP_3x3_AxB" value="2" enum="Operator">
+			Multiplies transform [code]a[/code] by the vector [code]b[/code], skipping the last row and column of the transform.
 		</constant>
 		</constant>
 		<constant name="OP_3x3_BxA" value="3" enum="Operator">
 		<constant name="OP_3x3_BxA" value="3" enum="Operator">
+			Multiplies vector [code]b[/code] by the transform [code]a[/code], skipping the last row and column of the transform.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 3 - 0
doc/classes/VisualShaderNodeUniform.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeUniform" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeUniform" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A base type for the uniforms within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A uniform represents a variable in the shader which is set externally, i.e. from the [ShaderMaterial]. Uniforms are exposed as properties in the [ShaderMaterial] and can be assigned from the inspector or from a script.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,6 +12,7 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default="&quot;&quot;">
 		<member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default="&quot;&quot;">
+			Name of the uniform, by which it can be accessed through the [ShaderMaterial] properties.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>

+ 3 - 0
doc/classes/VisualShaderNodeVec3Constant.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVec3Constant" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVec3Constant" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A [Vector3] constant to be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A constant [Vector3], which can be used as an input node.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,6 +12,7 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="constant" type="Vector3" setter="set_constant" getter="get_constant" default="Vector3( 0, 0, 0 )">
 		<member name="constant" type="Vector3" setter="set_constant" getter="get_constant" default="Vector3( 0, 0, 0 )">
+			A [Vector3] constant which represents the state of this node.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>

+ 2 - 0
doc/classes/VisualShaderNodeVec3Uniform.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVec3Uniform" inherits="VisualShaderNodeUniform" version="3.2">
 <class name="VisualShaderNodeVec3Uniform" inherits="VisualShaderNodeUniform" version="3.2">
 	<brief_description>
 	<brief_description>
+		A [Vector3] uniform to be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translated to [code]uniform vec3[/code] in the shader language.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeVectorClamp.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorClamp" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorClamp" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Clamps a vector value within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Constrains a value to lie between [code]min[/code] and [code]max[/code] values. The operation is performed on each component of the vector individually.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeVectorCompose.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorCompose" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorCompose" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Composes a [Vector3] from three scalars within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Creates a [code]vec3[/code] using three scalar values that can be provided from separate inputs.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeVectorDecompose.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorDecompose" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorDecompose" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Decomposes a [Vector3] into three scalars within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Takes a [code]vec3[/code] and decomposes it into three scalar values that can be used as separate inputs.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 6 - 0
doc/classes/VisualShaderNodeVectorDerivativeFunc.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorDerivativeFunc" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorDerivativeFunc" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a vector derivative within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,14 +12,18 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorDerivativeFunc.Function" default="0">
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorDerivativeFunc.Function" default="0">
+			A derivative type. See [enum Function] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="FUNC_SUM" value="0" enum="Function">
 		<constant name="FUNC_SUM" value="0" enum="Function">
+			Sum of absolute derivative in [code]x[/code] and [code]y[/code].
 		</constant>
 		</constant>
 		<constant name="FUNC_X" value="1" enum="Function">
 		<constant name="FUNC_X" value="1" enum="Function">
+			Derivative in [code]x[/code] using local differencing.
 		</constant>
 		</constant>
 		<constant name="FUNC_Y" value="2" enum="Function">
 		<constant name="FUNC_Y" value="2" enum="Function">
+			Derivative in [code]y[/code] using local differencing.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 3 - 0
doc/classes/VisualShaderNodeVectorDistance.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorDistance" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorDistance" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Returns the distance between two points. To be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Calculates distance from point represented by vector [code]p0[/code] to vector [code]p1[/code].
+		Translated to [code]distance(p0, p1)[/code] in the shader language.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 38 - 0
doc/classes/VisualShaderNodeVectorFunc.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorFunc" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorFunc" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A vector function to be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A visual shader node able to perform different functions using vectors.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,78 +12,114 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorFunc.Function" default="0">
 		<member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeVectorFunc.Function" default="0">
+			The function to be performed. See [enum Function] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="FUNC_NORMALIZE" value="0" enum="Function">
 		<constant name="FUNC_NORMALIZE" value="0" enum="Function">
+			Normalizes the vector so that it has a length of [code]1[/code] but points in the same direction.
 		</constant>
 		</constant>
 		<constant name="FUNC_SATURATE" value="1" enum="Function">
 		<constant name="FUNC_SATURATE" value="1" enum="Function">
+			Clamps the value between [code]0.0[/code] and [code]1.0[/code].
 		</constant>
 		</constant>
 		<constant name="FUNC_NEGATE" value="2" enum="Function">
 		<constant name="FUNC_NEGATE" value="2" enum="Function">
+			Returns the opposite value of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_RECIPROCAL" value="3" enum="Function">
 		<constant name="FUNC_RECIPROCAL" value="3" enum="Function">
+			Returns [code]1/vector[/code].
 		</constant>
 		</constant>
 		<constant name="FUNC_RGB2HSV" value="4" enum="Function">
 		<constant name="FUNC_RGB2HSV" value="4" enum="Function">
+			Converts RGB vector to HSV equivalent.
 		</constant>
 		</constant>
 		<constant name="FUNC_HSV2RGB" value="5" enum="Function">
 		<constant name="FUNC_HSV2RGB" value="5" enum="Function">
+			Converts HSV vector to RGB equivalent.
 		</constant>
 		</constant>
 		<constant name="FUNC_ABS" value="6" enum="Function">
 		<constant name="FUNC_ABS" value="6" enum="Function">
+			Returns the absolute value of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ACOS" value="7" enum="Function">
 		<constant name="FUNC_ACOS" value="7" enum="Function">
+			Returns the arc-cosine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ACOSH" value="8" enum="Function">
 		<constant name="FUNC_ACOSH" value="8" enum="Function">
+			Returns the inverse hyperbolic cosine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ASIN" value="9" enum="Function">
 		<constant name="FUNC_ASIN" value="9" enum="Function">
+			Returns the arc-sine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ASINH" value="10" enum="Function">
 		<constant name="FUNC_ASINH" value="10" enum="Function">
+			Returns the inverse hyperbolic sine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ATAN" value="11" enum="Function">
 		<constant name="FUNC_ATAN" value="11" enum="Function">
+			Returns the arc-tangent of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ATANH" value="12" enum="Function">
 		<constant name="FUNC_ATANH" value="12" enum="Function">
+			Returns the inverse hyperbolic tangent of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_CEIL" value="13" enum="Function">
 		<constant name="FUNC_CEIL" value="13" enum="Function">
+			Finds the nearest integer that is greater than or equal to the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_COS" value="14" enum="Function">
 		<constant name="FUNC_COS" value="14" enum="Function">
+			Returns the cosine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_COSH" value="15" enum="Function">
 		<constant name="FUNC_COSH" value="15" enum="Function">
+			Returns the hyperbolic cosine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_DEGREES" value="16" enum="Function">
 		<constant name="FUNC_DEGREES" value="16" enum="Function">
+			Converts a quantity in radians to degrees.
 		</constant>
 		</constant>
 		<constant name="FUNC_EXP" value="17" enum="Function">
 		<constant name="FUNC_EXP" value="17" enum="Function">
+			Base-e Exponential.
 		</constant>
 		</constant>
 		<constant name="FUNC_EXP2" value="18" enum="Function">
 		<constant name="FUNC_EXP2" value="18" enum="Function">
+			Base-2 Exponential.
 		</constant>
 		</constant>
 		<constant name="FUNC_FLOOR" value="19" enum="Function">
 		<constant name="FUNC_FLOOR" value="19" enum="Function">
+			Finds the nearest integer less than or equal to the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_FRAC" value="20" enum="Function">
 		<constant name="FUNC_FRAC" value="20" enum="Function">
+			Computes the fractional part of the argument.
 		</constant>
 		</constant>
 		<constant name="FUNC_INVERSE_SQRT" value="21" enum="Function">
 		<constant name="FUNC_INVERSE_SQRT" value="21" enum="Function">
+			Returns the inverse of the square root of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_LOG" value="22" enum="Function">
 		<constant name="FUNC_LOG" value="22" enum="Function">
+			Natural logarithm.
 		</constant>
 		</constant>
 		<constant name="FUNC_LOG2" value="23" enum="Function">
 		<constant name="FUNC_LOG2" value="23" enum="Function">
+			Base-2 logarithm.
 		</constant>
 		</constant>
 		<constant name="FUNC_RADIANS" value="24" enum="Function">
 		<constant name="FUNC_RADIANS" value="24" enum="Function">
+			Converts a quantity in degrees to radians.
 		</constant>
 		</constant>
 		<constant name="FUNC_ROUND" value="25" enum="Function">
 		<constant name="FUNC_ROUND" value="25" enum="Function">
+			Finds the nearest integer to the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ROUNDEVEN" value="26" enum="Function">
 		<constant name="FUNC_ROUNDEVEN" value="26" enum="Function">
+			Finds the nearest even integer to the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_SIGN" value="27" enum="Function">
 		<constant name="FUNC_SIGN" value="27" enum="Function">
+			Extracts the sign of the parameter, i.e. returns [code]-1[/code] if the parameter is negative, [code]1[/code] if it's positive and [code]0[/code] otherwise.
 		</constant>
 		</constant>
 		<constant name="FUNC_SIN" value="28" enum="Function">
 		<constant name="FUNC_SIN" value="28" enum="Function">
+			Returns the sine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_SINH" value="29" enum="Function">
 		<constant name="FUNC_SINH" value="29" enum="Function">
+			Returns the hyperbolic sine of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_SQRT" value="30" enum="Function">
 		<constant name="FUNC_SQRT" value="30" enum="Function">
+			Returns the square root of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_TAN" value="31" enum="Function">
 		<constant name="FUNC_TAN" value="31" enum="Function">
+			Returns the tangent of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_TANH" value="32" enum="Function">
 		<constant name="FUNC_TANH" value="32" enum="Function">
+			Returns the hyperbolic tangent of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_TRUNC" value="33" enum="Function">
 		<constant name="FUNC_TRUNC" value="33" enum="Function">
+			Returns a value equal to the nearest integer to the parameter whose absolute value is not larger than the absolute value of the parameter.
 		</constant>
 		</constant>
 		<constant name="FUNC_ONEMINUS" value="34" enum="Function">
 		<constant name="FUNC_ONEMINUS" value="34" enum="Function">
+			Returns [code]1.0 - vector[/code].
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeVectorInterp.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorInterp" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorInterp" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Linearly interpolates between two vectors within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]mix(a, b, weight)[/code] in the shader language, where [code]weight[/code] is a [Vector3] with weights for each component.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeVectorLen.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorLen" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorLen" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Returns the length of a [Vector3] within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translated to [code]length(p0)[/code] in the shader language.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 15 - 0
doc/classes/VisualShaderNodeVectorOp.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorOp" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorOp" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		A vector operator to be used within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		A visual shader node for use of vector operators. Operates on vector [code]a[/code] and vector [code]b[/code].
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>
@@ -10,32 +12,45 @@
 	</methods>
 	</methods>
 	<members>
 	<members>
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeVectorOp.Operator" default="0">
 		<member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeVectorOp.Operator" default="0">
+			The operator to be used. See [enum Operator] for options.
 		</member>
 		</member>
 	</members>
 	</members>
 	<constants>
 	<constants>
 		<constant name="OP_ADD" value="0" enum="Operator">
 		<constant name="OP_ADD" value="0" enum="Operator">
+			Adds two vectors.
 		</constant>
 		</constant>
 		<constant name="OP_SUB" value="1" enum="Operator">
 		<constant name="OP_SUB" value="1" enum="Operator">
+			Subtracts a vector from a vector.
 		</constant>
 		</constant>
 		<constant name="OP_MUL" value="2" enum="Operator">
 		<constant name="OP_MUL" value="2" enum="Operator">
+			Multiplies two vectors.
 		</constant>
 		</constant>
 		<constant name="OP_DIV" value="3" enum="Operator">
 		<constant name="OP_DIV" value="3" enum="Operator">
+			Divides vector by vector.
 		</constant>
 		</constant>
 		<constant name="OP_MOD" value="4" enum="Operator">
 		<constant name="OP_MOD" value="4" enum="Operator">
+			Returns the remainder of the two vectors.
 		</constant>
 		</constant>
 		<constant name="OP_POW" value="5" enum="Operator">
 		<constant name="OP_POW" value="5" enum="Operator">
+			Returns the value of the first parameter raised to the power of the second, for each component of the vectors.
 		</constant>
 		</constant>
 		<constant name="OP_MAX" value="6" enum="Operator">
 		<constant name="OP_MAX" value="6" enum="Operator">
+			Returns the greater of two values, for each component of the vectors.
 		</constant>
 		</constant>
 		<constant name="OP_MIN" value="7" enum="Operator">
 		<constant name="OP_MIN" value="7" enum="Operator">
+			Returns the lesser of two values, for each component of the vectors.
 		</constant>
 		</constant>
 		<constant name="OP_CROSS" value="8" enum="Operator">
 		<constant name="OP_CROSS" value="8" enum="Operator">
+			Calculates the cross product of two vectors.
 		</constant>
 		</constant>
 		<constant name="OP_ATAN2" value="9" enum="Operator">
 		<constant name="OP_ATAN2" value="9" enum="Operator">
+			Returns the arc-tangent of the parameters.
 		</constant>
 		</constant>
 		<constant name="OP_REFLECT" value="10" enum="Operator">
 		<constant name="OP_REFLECT" value="10" enum="Operator">
+			Returns the vector that points in the direction of reflection. [code]a[/code] is incident vector and [code]b[/code] is the normal vector.
 		</constant>
 		</constant>
 		<constant name="OP_STEP" value="11" enum="Operator">
 		<constant name="OP_STEP" value="11" enum="Operator">
+			Vector step operator. Returns [code]0.0[/code] if [code]a[/code] is smaller than [code]b[/code] and [code]1.0[/code] otherwise.
 		</constant>
 		</constant>
 	</constants>
 	</constants>
 </class>
 </class>

+ 2 - 0
doc/classes/VisualShaderNodeVectorRefract.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorRefract" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorRefract" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Returns the [Vector3] that points in the direction of refraction. For use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translated to [code]refract(I, N, eta)[/code] in the shader language, where [code]I[/code] is the incident vector, [code]N[/code] is the normal vector and [code]eta[/code] is the ratio of the indicies of the refraction.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
doc/classes/VisualShaderNodeVectorScalarMix.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorScalarMix" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorScalarMix" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Linearly interpolates between two vectors using a scalar. For use within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]mix(a, b, weight)[/code] in the shader language, where [code]a[/code] and [code]b[/code] are vectors and [code]weight[/code] is a scalar.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 3 - 0
doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a vector SmoothStep function using scalar within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader language, where [code]x[/code] is a scalar.
+		Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/code]. Otherwise the return value is interpolated between [code]0.0[/code] and [code]1.0[/code] using Hermite polynomials.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 3 - 0
doc/classes/VisualShaderNodeVectorScalarStep.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorScalarStep" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorScalarStep" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a vector Step function within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]step(edge, x)[/code] in the shader language.
+		Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge[/code] and [code]1.0[/code] otherwise.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 3 - 0
doc/classes/VisualShaderNodeVectorSmoothStep.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="VisualShaderNodeVectorSmoothStep" inherits="VisualShaderNode" version="3.2">
 <class name="VisualShaderNodeVectorSmoothStep" inherits="VisualShaderNode" version="3.2">
 	<brief_description>
 	<brief_description>
+		Calculates a vector SmoothStep function within the visual shader graph.
 	</brief_description>
 	</brief_description>
 	<description>
 	<description>
+		Translates to [code]smoothstep(edge0, edge1, x)[/code] in the shader language, where [code]x[/code] is a vector.
+		Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge0[/code] and [code]1.0[/code] if [code]x[/code] is larger than [code]edge1[/code]. Otherwise the return value is interpolated between [code]0.0[/code] and [code]1.0[/code] using Hermite polynomials.
 	</description>
 	</description>
 	<tutorials>
 	<tutorials>
 	</tutorials>
 	</tutorials>

+ 2 - 0
editor/editor_log.cpp

@@ -63,11 +63,13 @@ void EditorLog::_notification(int p_what) {
 
 
 		//button->set_icon(get_icon("Console","EditorIcons"));
 		//button->set_icon(get_icon("Console","EditorIcons"));
 		log->add_font_override("normal_font", get_font("output_source", "EditorFonts"));
 		log->add_font_override("normal_font", get_font("output_source", "EditorFonts"));
+		log->add_color_override("selection_color", get_color("accent_color", "Editor") * Color(1, 1, 1, 0.4));
 	} else if (p_what == NOTIFICATION_THEME_CHANGED) {
 	} else if (p_what == NOTIFICATION_THEME_CHANGED) {
 		Ref<DynamicFont> df_output_code = get_font("output_source", "EditorFonts");
 		Ref<DynamicFont> df_output_code = get_font("output_source", "EditorFonts");
 		if (df_output_code.is_valid()) {
 		if (df_output_code.is_valid()) {
 			if (log != NULL) {
 			if (log != NULL) {
 				log->add_font_override("normal_font", get_font("output_source", "EditorFonts"));
 				log->add_font_override("normal_font", get_font("output_source", "EditorFonts"));
+				log->add_color_override("selection_color", get_color("accent_color", "Editor") * Color(1, 1, 1, 0.4));
 			}
 			}
 		}
 		}
 	}
 	}

+ 1 - 0
editor/icons/ErrorWarning.svg

@@ -0,0 +1 @@
+<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m4 0c-2.216 0-4 1.784-4 4s1.784 4 4 4z" fill="#ff5d5d"/><path d="m4 .00000003c2.216 0 4 1.78399997 4 3.99999997s-1.784 4-4 4z" fill="#ffdd65"/></svg>

+ 12 - 2
editor/plugins/spatial_editor_plugin.cpp

@@ -195,12 +195,20 @@ void ViewportRotationControl::_gui_input(Ref<InputEvent> p_event) {
 				_update_focus();
 				_update_focus();
 			}
 			}
 			orbiting = false;
 			orbiting = false;
+			if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_CAPTURED) {
+				Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
+				Input::get_singleton()->warp_mouse_position(orbiting_mouse_start);
+			}
 		}
 		}
 	}
 	}
 
 
 	const Ref<InputEventMouseMotion> mm = p_event;
 	const Ref<InputEventMouseMotion> mm = p_event;
 	if (mm.is_valid()) {
 	if (mm.is_valid()) {
 		if (orbiting) {
 		if (orbiting) {
+			if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_VISIBLE) {
+				Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
+				orbiting_mouse_start = mm->get_global_position();
+			}
 			viewport->_nav_orbit(mm, viewport->_get_warped_mouse_motion(mm));
 			viewport->_nav_orbit(mm, viewport->_get_warped_mouse_motion(mm));
 			focused_axis = -1;
 			focused_axis = -1;
 		} else {
 		} else {
@@ -2182,14 +2190,14 @@ void SpatialEditorViewport::set_freelook_active(bool active_now) {
 		}
 		}
 
 
 		// Hide mouse like in an FPS (warping doesn't work)
 		// Hide mouse like in an FPS (warping doesn't work)
-		OS::get_singleton()->set_mouse_mode(OS::MOUSE_MODE_CAPTURED);
+		Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
 
 
 	} else if (freelook_active && !active_now) {
 	} else if (freelook_active && !active_now) {
 		// Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential
 		// Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential
 		cursor = camera_cursor;
 		cursor = camera_cursor;
 
 
 		// Restore mouse
 		// Restore mouse
-		OS::get_singleton()->set_mouse_mode(OS::MOUSE_MODE_VISIBLE);
+		Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
 	}
 	}
 
 
 	freelook_active = active_now;
 	freelook_active = active_now;
@@ -3090,6 +3098,8 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) {
 	ERR_FAIL_COND(p_activate && !preview);
 	ERR_FAIL_COND(p_activate && !preview);
 	ERR_FAIL_COND(!p_activate && !previewing);
 	ERR_FAIL_COND(!p_activate && !previewing);
 
 
+	rotation_control->set_visible(!p_activate);
+
 	if (!p_activate) {
 	if (!p_activate) {
 
 
 		previewing->disconnect("tree_exiting", this, "_preview_exited_scene");
 		previewing->disconnect("tree_exiting", this, "_preview_exited_scene");

+ 1 - 0
editor/plugins/spatial_editor_plugin.h

@@ -158,6 +158,7 @@ class ViewportRotationControl : public Control {
 	SpatialEditorViewport *viewport = nullptr;
 	SpatialEditorViewport *viewport = nullptr;
 	Vector<Color> axis_colors;
 	Vector<Color> axis_colors;
 	Vector<int> axis_menu_options;
 	Vector<int> axis_menu_options;
+	Vector2i orbiting_mouse_start;
 	bool orbiting = false;
 	bool orbiting = false;
 	int focused_axis = -2;
 	int focused_axis = -2;
 
 

+ 22 - 22
editor/scene_tree_dock.cpp

@@ -99,8 +99,8 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) {
 		_tool_selected(TOOL_DUPLICATE);
 		_tool_selected(TOOL_DUPLICATE);
 	} else if (ED_IS_SHORTCUT("scene_tree/attach_script", p_event)) {
 	} else if (ED_IS_SHORTCUT("scene_tree/attach_script", p_event)) {
 		_tool_selected(TOOL_ATTACH_SCRIPT);
 		_tool_selected(TOOL_ATTACH_SCRIPT);
-	} else if (ED_IS_SHORTCUT("scene_tree/clear_script", p_event)) {
-		_tool_selected(TOOL_CLEAR_SCRIPT);
+	} else if (ED_IS_SHORTCUT("scene_tree/detach_script", p_event)) {
+		_tool_selected(TOOL_DETACH_SCRIPT);
 	} else if (ED_IS_SHORTCUT("scene_tree/move_up", p_event)) {
 	} else if (ED_IS_SHORTCUT("scene_tree/move_up", p_event)) {
 		_tool_selected(TOOL_MOVE_UP);
 		_tool_selected(TOOL_MOVE_UP);
 	} else if (ED_IS_SHORTCUT("scene_tree/move_down", p_event)) {
 	} else if (ED_IS_SHORTCUT("scene_tree/move_down", p_event)) {
@@ -428,7 +428,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 		case TOOL_ATTACH_SCRIPT: {
 		case TOOL_ATTACH_SCRIPT: {
 			attach_script_to_selected(false);
 			attach_script_to_selected(false);
 		} break;
 		} break;
-		case TOOL_CLEAR_SCRIPT: {
+		case TOOL_DETACH_SCRIPT: {
 
 
 			if (!profile_allow_script_editing) {
 			if (!profile_allow_script_editing) {
 				break;
 				break;
@@ -439,7 +439,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 			if (selection.empty())
 			if (selection.empty())
 				return;
 				return;
 
 
-			editor_data->get_undo_redo().create_action(TTR("Clear Script"));
+			editor_data->get_undo_redo().create_action(TTR("Detach Script"));
 			editor_data->get_undo_redo().add_do_method(editor, "push_item", (Script *)NULL);
 			editor_data->get_undo_redo().add_do_method(editor, "push_item", (Script *)NULL);
 
 
 			for (int i = 0; i < selection.size(); i++) {
 			for (int i = 0; i < selection.size(); i++) {
@@ -1065,7 +1065,7 @@ void SceneTreeDock::_notification(int p_what) {
 			button_add->set_icon(get_icon("Add", "EditorIcons"));
 			button_add->set_icon(get_icon("Add", "EditorIcons"));
 			button_instance->set_icon(get_icon("Instance", "EditorIcons"));
 			button_instance->set_icon(get_icon("Instance", "EditorIcons"));
 			button_create_script->set_icon(get_icon("ScriptCreate", "EditorIcons"));
 			button_create_script->set_icon(get_icon("ScriptCreate", "EditorIcons"));
-			button_clear_script->set_icon(get_icon("ScriptRemove", "EditorIcons"));
+			button_detach_script->set_icon(get_icon("ScriptRemove", "EditorIcons"));
 
 
 			filter->set_right_icon(get_icon("Search", "EditorIcons"));
 			filter->set_right_icon(get_icon("Search", "EditorIcons"));
 			filter->set_clear_button_enabled(true);
 			filter->set_clear_button_enabled(true);
@@ -1141,7 +1141,7 @@ void SceneTreeDock::_notification(int p_what) {
 			button_add->set_icon(get_icon("Add", "EditorIcons"));
 			button_add->set_icon(get_icon("Add", "EditorIcons"));
 			button_instance->set_icon(get_icon("Instance", "EditorIcons"));
 			button_instance->set_icon(get_icon("Instance", "EditorIcons"));
 			button_create_script->set_icon(get_icon("ScriptCreate", "EditorIcons"));
 			button_create_script->set_icon(get_icon("ScriptCreate", "EditorIcons"));
-			button_clear_script->set_icon(get_icon("ScriptRemove", "EditorIcons"));
+			button_detach_script->set_icon(get_icon("ScriptRemove", "EditorIcons"));
 
 
 			filter->set_right_icon(get_icon("Search", "EditorIcons"));
 			filter->set_right_icon(get_icon("Search", "EditorIcons"));
 			filter->set_clear_button_enabled(true);
 			filter->set_clear_button_enabled(true);
@@ -1876,18 +1876,18 @@ void SceneTreeDock::_update_script_button() {
 	if (!profile_allow_script_editing) {
 	if (!profile_allow_script_editing) {
 
 
 		button_create_script->hide();
 		button_create_script->hide();
-		button_clear_script->hide();
+		button_detach_script->hide();
 	} else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 0) {
 	} else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 0) {
 		button_create_script->hide();
 		button_create_script->hide();
-		button_clear_script->hide();
+		button_detach_script->hide();
 	} else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) {
 	} else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 1) {
 		Node *n = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list()[0];
 		Node *n = EditorNode::get_singleton()->get_editor_selection()->get_selected_node_list()[0];
 		if (n->get_script().is_null()) {
 		if (n->get_script().is_null()) {
 			button_create_script->show();
 			button_create_script->show();
-			button_clear_script->hide();
+			button_detach_script->hide();
 		} else {
 		} else {
 			button_create_script->hide();
 			button_create_script->hide();
-			button_clear_script->show();
+			button_detach_script->show();
 		}
 		}
 	} else {
 	} else {
 		button_create_script->hide();
 		button_create_script->hide();
@@ -1895,11 +1895,11 @@ void SceneTreeDock::_update_script_button() {
 		for (int i = 0; i < selection.size(); i++) {
 		for (int i = 0; i < selection.size(); i++) {
 			Node *n = Object::cast_to<Node>(selection[i]);
 			Node *n = Object::cast_to<Node>(selection[i]);
 			if (!n->get_script().is_null()) {
 			if (!n->get_script().is_null()) {
-				button_clear_script->show();
+				button_detach_script->show();
 				return;
 				return;
 			}
 			}
 		}
 		}
-		button_clear_script->hide();
+		button_detach_script->hide();
 	}
 	}
 }
 }
 
 
@@ -2451,7 +2451,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
 		}
 		}
 		if (existing_script.is_valid() && exisiting_script_removable) {
 		if (existing_script.is_valid() && exisiting_script_removable) {
 			add_separator = true;
 			add_separator = true;
-			menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT);
+			menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/detach_script"), TOOL_DETACH_SCRIPT);
 		} else if (full_selection.size() > 1) {
 		} else if (full_selection.size() > 1) {
 			bool script_exists = false;
 			bool script_exists = false;
 			for (List<Node *>::Element *E = full_selection.front(); E; E = E->next()) {
 			for (List<Node *>::Element *E = full_selection.front(); E; E = E->next()) {
@@ -2463,7 +2463,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
 
 
 			if (script_exists) {
 			if (script_exists) {
 				add_separator = true;
 				add_separator = true;
-				menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT);
+				menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/detach_script"), TOOL_DETACH_SCRIPT);
 			}
 			}
 		}
 		}
 
 
@@ -2839,7 +2839,7 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
 	ED_SHORTCUT("scene_tree/change_node_type", TTR("Change Type"));
 	ED_SHORTCUT("scene_tree/change_node_type", TTR("Change Type"));
 	ED_SHORTCUT("scene_tree/attach_script", TTR("Attach Script"));
 	ED_SHORTCUT("scene_tree/attach_script", TTR("Attach Script"));
 	ED_SHORTCUT("scene_tree/extend_script", TTR("Extend Script"));
 	ED_SHORTCUT("scene_tree/extend_script", TTR("Extend Script"));
-	ED_SHORTCUT("scene_tree/clear_script", TTR("Clear Script"));
+	ED_SHORTCUT("scene_tree/detach_script", TTR("Detach Script"));
 	ED_SHORTCUT("scene_tree/move_up", TTR("Move Up"), KEY_MASK_CMD | KEY_UP);
 	ED_SHORTCUT("scene_tree/move_up", TTR("Move Up"), KEY_MASK_CMD | KEY_UP);
 	ED_SHORTCUT("scene_tree/move_down", TTR("Move Down"), KEY_MASK_CMD | KEY_DOWN);
 	ED_SHORTCUT("scene_tree/move_down", TTR("Move Down"), KEY_MASK_CMD | KEY_DOWN);
 	ED_SHORTCUT("scene_tree/duplicate", TTR("Duplicate"), KEY_MASK_CMD | KEY_D);
 	ED_SHORTCUT("scene_tree/duplicate", TTR("Duplicate"), KEY_MASK_CMD | KEY_D);
@@ -2874,17 +2874,17 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
 
 
 	button_create_script = memnew(ToolButton);
 	button_create_script = memnew(ToolButton);
 	button_create_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_ATTACH_SCRIPT, false));
 	button_create_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_ATTACH_SCRIPT, false));
-	button_create_script->set_tooltip(TTR("Attach a new or existing script for the selected node."));
+	button_create_script->set_tooltip(TTR("Attach a new or existing script to the selected node."));
 	button_create_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/attach_script"));
 	button_create_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/attach_script"));
 	filter_hbc->add_child(button_create_script);
 	filter_hbc->add_child(button_create_script);
 	button_create_script->hide();
 	button_create_script->hide();
 
 
-	button_clear_script = memnew(ToolButton);
-	button_clear_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_CLEAR_SCRIPT, false));
-	button_clear_script->set_tooltip(TTR("Clear a script for the selected node."));
-	button_clear_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/clear_script"));
-	filter_hbc->add_child(button_clear_script);
-	button_clear_script->hide();
+	button_detach_script = memnew(ToolButton);
+	button_detach_script->connect("pressed", this, "_tool_selected", make_binds(TOOL_DETACH_SCRIPT, false));
+	button_detach_script->set_tooltip(TTR("Detach the script from the selected node."));
+	button_detach_script->set_shortcut(ED_GET_SHORTCUT("scene_tree/detach_script"));
+	filter_hbc->add_child(button_detach_script);
+	button_detach_script->hide();
 
 
 	button_hb = memnew(HBoxContainer);
 	button_hb = memnew(HBoxContainer);
 	vbc->add_child(button_hb);
 	vbc->add_child(button_hb);

+ 2 - 2
editor/scene_tree_dock.h

@@ -66,7 +66,7 @@ class SceneTreeDock : public VBoxContainer {
 		TOOL_REPLACE,
 		TOOL_REPLACE,
 		TOOL_EXTEND_SCRIPT,
 		TOOL_EXTEND_SCRIPT,
 		TOOL_ATTACH_SCRIPT,
 		TOOL_ATTACH_SCRIPT,
-		TOOL_CLEAR_SCRIPT,
+		TOOL_DETACH_SCRIPT,
 		TOOL_MOVE_UP,
 		TOOL_MOVE_UP,
 		TOOL_MOVE_DOWN,
 		TOOL_MOVE_DOWN,
 		TOOL_DUPLICATE,
 		TOOL_DUPLICATE,
@@ -110,7 +110,7 @@ class SceneTreeDock : public VBoxContainer {
 	ToolButton *button_add;
 	ToolButton *button_add;
 	ToolButton *button_instance;
 	ToolButton *button_instance;
 	ToolButton *button_create_script;
 	ToolButton *button_create_script;
-	ToolButton *button_clear_script;
+	ToolButton *button_detach_script;
 
 
 	Button *button_3d;
 	Button *button_3d;
 
 

+ 7 - 4
editor/script_editor_debugger.cpp

@@ -1326,12 +1326,15 @@ void ScriptEditorDebugger::_notification(int p_what) {
 				} else {
 				} else {
 					errors_tab->set_name(TTR("Errors") + " (" + itos(error_count + warning_count) + ")");
 					errors_tab->set_name(TTR("Errors") + " (" + itos(error_count + warning_count) + ")");
 					debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")");
 					debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")");
-					if (error_count == 0) {
-						debugger_button->set_icon(get_icon("Warning", "EditorIcons"));
-						tabs->set_tab_icon(errors_tab->get_index(), get_icon("Warning", "EditorIcons"));
-					} else {
+					if (error_count >= 1 && warning_count >= 1) {
+						debugger_button->set_icon(get_icon("ErrorWarning", "EditorIcons"));
+						tabs->set_tab_icon(errors_tab->get_index(), get_icon("ErrorWarning", "EditorIcons"));
+					} else if (error_count >= 1) {
 						debugger_button->set_icon(get_icon("Error", "EditorIcons"));
 						debugger_button->set_icon(get_icon("Error", "EditorIcons"));
 						tabs->set_tab_icon(errors_tab->get_index(), get_icon("Error", "EditorIcons"));
 						tabs->set_tab_icon(errors_tab->get_index(), get_icon("Error", "EditorIcons"));
+					} else {
+						debugger_button->set_icon(get_icon("Warning", "EditorIcons"));
+						tabs->set_tab_icon(errors_tab->get_index(), get_icon("Warning", "EditorIcons"));
 					}
 					}
 				}
 				}
 				last_error_count = error_count;
 				last_error_count = error_count;

+ 6 - 0
main/godotcontrollerdb.txt

@@ -1,6 +1,12 @@
 # Game Controller DB for Godot in SDL 2.0.10 format
 # Game Controller DB for Godot in SDL 2.0.10 format
 # Source: https://github.com/godotengine/godot
 # Source: https://github.com/godotengine/godot
 
 
+# Windows
+__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Windows,
+
+# Android
+Default Android Gamepad,Default Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b8,rightshoulder:b10,rightx:a2,start:b6,righty:a3,dpleft:h0.8,lefttrigger:a4,x:b2,dpup:h0.1,back:b4,leftstick:b7,leftshoulder:b9,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,platform:Android,
+
 # Javascript
 # Javascript
 Default HTML5 Gamepad, Default Mapping,leftx:a0,lefty:a1,dpdown:b13,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:b14,lefttrigger:a6,x:b2,dpup:b12,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:b15,righttrigger:a7,b:b1,platform:Javascript,
 Default HTML5 Gamepad, Default Mapping,leftx:a0,lefty:a1,dpdown:b13,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:b14,lefttrigger:a6,x:b2,dpup:b12,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:b15,righttrigger:a7,b:b1,platform:Javascript,
 c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,platform:Javascript,
 c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,platform:Javascript,

+ 26 - 3
modules/gdscript/gdscript.cpp

@@ -390,10 +390,15 @@ void GDScript::_update_exports_values(Map<StringName, Variant> &values, List<Pro
 }
 }
 #endif
 #endif
 
 
-bool GDScript::_update_exports() {
+bool GDScript::_update_exports(bool *r_err, bool p_recursive_call) {
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 
 
+	static Vector<GDScript *> base_caches;
+	if (!p_recursive_call)
+		base_caches.clear();
+	base_caches.push_back(this);
+
 	bool changed = false;
 	bool changed = false;
 
 
 	if (source_changed_cache) {
 	if (source_changed_cache) {
@@ -487,7 +492,22 @@ bool GDScript::_update_exports() {
 	placeholder_fallback_enabled = false;
 	placeholder_fallback_enabled = false;
 
 
 	if (base_cache.is_valid() && base_cache->is_valid()) {
 	if (base_cache.is_valid() && base_cache->is_valid()) {
-		if (base_cache->_update_exports()) {
+		for (int i = 0; i < base_caches.size(); i++) {
+			if (base_caches[i] == base_cache.ptr()) {
+				if (r_err)
+					*r_err = true;
+				valid = false; // to show error in the editor
+				base_cache->valid = false;
+				base_cache->inheriters_cache.clear(); // to prevent future stackoverflows
+				base_cache.unref();
+				base.unref();
+				_base = nullptr;
+				ERR_FAIL_V_MSG(false, "Cyclic inheritance in script class.");
+			}
+		}
+		if (base_cache->_update_exports(r_err, true)) {
+			if (r_err && *r_err)
+				return false;
 			changed = true;
 			changed = true;
 		}
 		}
 	}
 	}
@@ -515,7 +535,10 @@ void GDScript::update_exports() {
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 
 
-	_update_exports();
+	bool cyclic_error = false;
+	_update_exports(&cyclic_error);
+	if (cyclic_error)
+		return;
 
 
 	Set<ObjectID> copy = inheriters_cache; //might get modified
 	Set<ObjectID> copy = inheriters_cache; //might get modified
 
 

+ 1 - 1
modules/gdscript/gdscript.h

@@ -132,7 +132,7 @@ class GDScript : public Script {
 
 
 #endif
 #endif
 
 
-	bool _update_exports();
+	bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false);
 
 
 	void _save_orphaned_subclasses();
 	void _save_orphaned_subclasses();
 
 

+ 1 - 1
modules/gdscript/gdscript_editor.cpp

@@ -2098,7 +2098,7 @@ static void _find_identifiers_in_base(const GDScriptCompletionContext &p_context
 
 
 				if (!p_only_functions) {
 				if (!p_only_functions) {
 					List<PropertyInfo> members;
 					List<PropertyInfo> members;
-					p_base.value.get_property_list(&members);
+					tmp.get_property_list(&members);
 
 
 					for (List<PropertyInfo>::Element *E = members.front(); E; E = E->next()) {
 					for (List<PropertyInfo>::Element *E = members.front(); E; E = E->next()) {
 						if (String(E->get().name).find("/") == -1) {
 						if (String(E->get().name).find("/") == -1) {

+ 5 - 0
modules/gdscript/gdscript_functions.cpp

@@ -1207,6 +1207,11 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
 
 
 			r_ret = gdscr->_new(NULL, 0, r_error);
 			r_ret = gdscr->_new(NULL, 0, r_error);
 
 
+			if (r_error.error != Variant::CallError::CALL_OK) {
+				r_ret = Variant();
+				return;
+			}
+
 			GDScriptInstance *ins = static_cast<GDScriptInstance *>(static_cast<Object *>(r_ret)->get_script_instance());
 			GDScriptInstance *ins = static_cast<GDScriptInstance *>(static_cast<Object *>(r_ret)->get_script_instance());
 			Ref<GDScript> gd_ref = ins->get_script();
 			Ref<GDScript> gd_ref = ins->get_script();
 
 

+ 34 - 12
modules/gdscript/gdscript_parser.cpp

@@ -72,6 +72,16 @@ bool GDScriptParser::_end_statement() {
 	return false;
 	return false;
 }
 }
 
 
+void GDScriptParser::_set_end_statement_error(String p_name) {
+	String error_msg;
+	if (tokenizer->get_token() == GDScriptTokenizer::TK_IDENTIFIER) {
+		error_msg = vformat("Expected end of statement (\"%s\"), got %s (\"%s\") instead.", p_name, tokenizer->get_token_name(tokenizer->get_token()), tokenizer->get_token_identifier());
+	} else {
+		error_msg = vformat("Expected end of statement (\"%s\"), got %s instead.", p_name, tokenizer->get_token_name(tokenizer->get_token()));
+	}
+	_set_error(error_msg);
+}
+
 bool GDScriptParser::_enter_indent_block(BlockNode *p_block) {
 bool GDScriptParser::_enter_indent_block(BlockNode *p_block) {
 
 
 	if (tokenizer->get_token() != GDScriptTokenizer::TK_COLON) {
 	if (tokenizer->get_token() != GDScriptTokenizer::TK_COLON) {
@@ -2719,6 +2729,7 @@ void GDScriptParser::_transform_match_statment(MatchNode *p_match_statement) {
 
 
 			IdentifierNode *id2 = alloc_node<IdentifierNode>();
 			IdentifierNode *id2 = alloc_node<IdentifierNode>();
 			id2->name = local_var->name;
 			id2->name = local_var->name;
+			id2->datatype = local_var->datatype;
 			id2->declared_block = branch->body;
 			id2->declared_block = branch->body;
 			id2->set_datatype(local_var->assign->get_datatype());
 			id2->set_datatype(local_var->assign->get_datatype());
 
 
@@ -2923,7 +2934,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 				lv->assign = assigned;
 				lv->assign = assigned;
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"var\").");
+					_set_end_statement_error("var");
 					return;
 					return;
 				}
 				}
 
 
@@ -3234,7 +3245,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 				cf_continue->cf_type = ControlFlowNode::CF_CONTINUE;
 				cf_continue->cf_type = ControlFlowNode::CF_CONTINUE;
 				p_block->statements.push_back(cf_continue);
 				p_block->statements.push_back(cf_continue);
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"continue\").");
+					_set_end_statement_error("continue");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -3246,7 +3257,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 				cf_break->cf_type = ControlFlowNode::CF_BREAK;
 				cf_break->cf_type = ControlFlowNode::CF_BREAK;
 				p_block->statements.push_back(cf_break);
 				p_block->statements.push_back(cf_break);
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"break\").");
+					_set_end_statement_error("break");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -3275,7 +3286,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 					cf_return->arguments.push_back(retexpr);
 					cf_return->arguments.push_back(retexpr);
 					p_block->statements.push_back(cf_return);
 					p_block->statements.push_back(cf_return);
 					if (!_end_statement()) {
 					if (!_end_statement()) {
-						_set_error("Expected end of statement after return expression.");
+						_set_end_statement_error("return");
 						return;
 						return;
 					}
 					}
 				}
 				}
@@ -3363,7 +3374,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 				p_block->statements.push_back(an);
 				p_block->statements.push_back(an);
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement after \"assert\".", assert_line);
+					_set_end_statement_error("assert");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -3374,7 +3385,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 				p_block->statements.push_back(bn);
 				p_block->statements.push_back(bn);
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement after \"breakpoint\".");
+					_set_end_statement_error("breakpoint");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -3393,7 +3404,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
 					if (tokenizer->get_token() == GDScriptTokenizer::TK_COLON && tokenizer->get_token(1) == GDScriptTokenizer::TK_OP_ASSIGN) {
 					if (tokenizer->get_token() == GDScriptTokenizer::TK_COLON && tokenizer->get_token(1) == GDScriptTokenizer::TK_OP_ASSIGN) {
 						_set_error("Unexpected ':=', use '=' instead. Expected end of statement after expression.");
 						_set_error("Unexpected ':=', use '=' instead. Expected end of statement after expression.");
 					} else {
 					} else {
-						_set_error(String() + "Expected end of statement after expression, got " + tokenizer->get_token_name(tokenizer->get_token()) + " instead");
+						_set_error(vformat("Expected end of statement after expression, got %s instead.", tokenizer->get_token_name(tokenizer->get_token())));
 					}
 					}
 					return;
 					return;
 				}
 				}
@@ -3582,7 +3593,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				if (error_set)
 				if (error_set)
 					return;
 					return;
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement after \"extends\".");
+					_set_end_statement_error("extends");
 					return;
 					return;
 				}
 				}
 
 
@@ -4087,7 +4098,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				p_class->_signals.push_back(sig);
 				p_class->_signals.push_back(sig);
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"signal\").");
+					_set_end_statement_error("signal");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -4954,6 +4965,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 
 
 					IdentifierNode *id = alloc_node<IdentifierNode>();
 					IdentifierNode *id = alloc_node<IdentifierNode>();
 					id->name = member.identifier;
 					id->name = member.identifier;
+					id->datatype = member.data_type;
 
 
 					OperatorNode *op = alloc_node<OperatorNode>();
 					OperatorNode *op = alloc_node<OperatorNode>();
 					op->op = OperatorNode::OP_INIT_ASSIGN;
 					op->op = OperatorNode::OP_INIT_ASSIGN;
@@ -4996,6 +5008,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 
 
 					IdentifierNode *id = alloc_node<IdentifierNode>();
 					IdentifierNode *id = alloc_node<IdentifierNode>();
 					id->name = member.identifier;
 					id->name = member.identifier;
+					id->datatype = member.data_type;
 
 
 					OperatorNode *op = alloc_node<OperatorNode>();
 					OperatorNode *op = alloc_node<OperatorNode>();
 					op->op = OperatorNode::OP_INIT_ASSIGN;
 					op->op = OperatorNode::OP_INIT_ASSIGN;
@@ -5038,7 +5051,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				p_class->variables.push_back(member);
 				p_class->variables.push_back(member);
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"continue\").");
+					_set_end_statement_error("var");
 					return;
 					return;
 				}
 				}
 			} break;
 			} break;
@@ -5118,7 +5131,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				p_class->constant_expressions.insert(const_id, constant);
 				p_class->constant_expressions.insert(const_id, constant);
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (constant).", line);
+					_set_end_statement_error("const");
 					return;
 					return;
 				}
 				}
 
 
@@ -5272,7 +5285,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				}
 				}
 
 
 				if (!_end_statement()) {
 				if (!_end_statement()) {
-					_set_error("Expected end of statement (\"enum\").");
+					_set_end_statement_error("enum");
 					return;
 					return;
 				}
 				}
 
 
@@ -5288,6 +5301,10 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
 				}
 				}
 			} break;
 			} break;
 
 
+			case GDScriptTokenizer::TK_CF_PASS: {
+				tokenizer->advance();
+			} break;
+
 			default: {
 			default: {
 
 
 				_set_error(String() + "Unexpected token: " + tokenizer->get_token_name(tokenizer->get_token()) + ":" + tokenizer->get_token_identifier());
 				_set_error(String() + "Unexpected token: " + tokenizer->get_token_name(tokenizer->get_token()) + ":" + tokenizer->get_token_identifier());
@@ -6635,6 +6652,7 @@ GDScriptParser::DataType GDScriptParser::_reduce_node_type(Node *p_node) {
 
 
 							IdentifierNode *id = alloc_node<IdentifierNode>();
 							IdentifierNode *id = alloc_node<IdentifierNode>();
 							id->name = cn->value.operator StringName();
 							id->name = cn->value.operator StringName();
+							id->datatype = cn->datatype;
 
 
 							op->op = OperatorNode::OP_INDEX_NAMED;
 							op->op = OperatorNode::OP_INDEX_NAMED;
 							op->arguments.write[1] = id;
 							op->arguments.write[1] = id;
@@ -7553,6 +7571,10 @@ GDScriptParser::DataType GDScriptParser::_reduce_identifier_type(const DataType
 	}
 	}
 
 
 	if (_get_member_type(base_type, p_identifier, member_type)) {
 	if (_get_member_type(base_type, p_identifier, member_type)) {
+		if (!p_base_type && current_function && current_function->_static) {
+			_set_error("Can't access member variable (\"" + p_identifier.operator String() + "\") from a static function.", p_line);
+			return DataType();
+		}
 		return member_type;
 		return member_type;
 	}
 	}
 
 

+ 1 - 0
modules/gdscript/gdscript_parser.h

@@ -624,6 +624,7 @@ private:
 	void _parse_extends(ClassNode *p_class);
 	void _parse_extends(ClassNode *p_class);
 	void _parse_class(ClassNode *p_class);
 	void _parse_class(ClassNode *p_class);
 	bool _end_statement();
 	bool _end_statement();
+	void _set_end_statement_error(String p_name);
 
 
 	void _determine_inheritance(ClassNode *p_class, bool p_recursive = true);
 	void _determine_inheritance(ClassNode *p_class, bool p_recursive = true);
 	bool _parse_type(DataType &r_type, bool p_can_be_void = false);
 	bool _parse_type(DataType &r_type, bool p_can_be_void = false);

+ 2 - 5
modules/mono/build_scripts/godot_tools_build.py

@@ -13,12 +13,9 @@ def build_godot_tools(source, target, env):
     solution_path = os.path.join(module_dir, 'editor/GodotTools/GodotTools.sln')
     solution_path = os.path.join(module_dir, 'editor/GodotTools/GodotTools.sln')
     build_config = 'Debug' if env['target'] == 'debug' else 'Release'
     build_config = 'Debug' if env['target'] == 'debug' else 'Release'
 
 
-    # Custom build target to make sure output is always copied to the data dir.
-    extra_build_args = ['/Target:Build;GodotTools:BuildAlwaysCopyToDataDir']
+    from .solution_builder import build_solution
 
 
-    from . solution_builder import build_solution, nuget_restore
-    nuget_restore(env, solution_path)
-    build_solution(env, solution_path, build_config, extra_build_args)
+    build_solution(env, solution_path, build_config, restore=True)
     # No need to copy targets. The GodotTools csproj takes care of copying them.
     # No need to copy targets. The GodotTools csproj takes care of copying them.
 
 
 
 

+ 15 - 99
modules/mono/build_scripts/solution_builder.py

@@ -5,85 +5,19 @@ import os
 verbose = False
 verbose = False
 
 
 
 
-def find_nuget_unix():
-    import os
-
-    if 'NUGET_PATH' in os.environ:
-        hint_path = os.environ['NUGET_PATH']
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-        hint_path = os.path.join(hint_path, 'nuget')
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-
-    import os.path
-    import sys
-
-    hint_dirs = ['/opt/novell/mono/bin']
-    if sys.platform == 'darwin':
-        hint_dirs = ['/Library/Frameworks/Mono.framework/Versions/Current/bin', '/usr/local/var/homebrew/linked/mono/bin'] + hint_dirs
-
-    for hint_dir in hint_dirs:
-        hint_path = os.path.join(hint_dir, 'nuget')
-        if os.path.isfile(hint_path):
-            return hint_path
-        elif os.path.isfile(hint_path + '.exe'):
-            return hint_path + '.exe'
-
-    for hint_dir in os.environ['PATH'].split(os.pathsep):
-        hint_dir = hint_dir.strip('"')
-        hint_path = os.path.join(hint_dir, 'nuget')
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-        if os.path.isfile(hint_path + '.exe') and os.access(hint_path + '.exe', os.X_OK):
-            return hint_path + '.exe'
-
-    return None
-
-
-def find_nuget_windows(env):
-    import os
-
-    if 'NUGET_PATH' in os.environ:
-        hint_path = os.environ['NUGET_PATH']
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-        hint_path = os.path.join(hint_path, 'nuget.exe')
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-
-    from . mono_reg_utils import find_mono_root_dir
-
-    mono_root = env['mono_prefix'] or find_mono_root_dir(env['bits'])
-
-    if mono_root:
-        mono_bin_dir = os.path.join(mono_root, 'bin')
-        nuget_mono = os.path.join(mono_bin_dir, 'nuget.bat')
-
-        if os.path.isfile(nuget_mono):
-            return nuget_mono
-
-    # Standalone NuGet
-
-    for hint_dir in os.environ['PATH'].split(os.pathsep):
-        hint_dir = hint_dir.strip('"')
-        hint_path = os.path.join(hint_dir, 'nuget.exe')
-        if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
-            return hint_path
-
-    return None
-
-
 def find_msbuild_unix(filename):
 def find_msbuild_unix(filename):
     import os.path
     import os.path
     import sys
     import sys
 
 
-    hint_dirs = ['/opt/novell/mono/bin']
-    if sys.platform == 'darwin':
-        hint_dirs = ['/Library/Frameworks/Mono.framework/Versions/Current/bin', '/usr/local/var/homebrew/linked/mono/bin'] + hint_dirs
+    hint_dirs = []
+    if sys.platform == "darwin":
+        hint_dirs[:0] = [
+            "/Library/Frameworks/Mono.framework/Versions/Current/bin",
+            "/usr/local/var/homebrew/linked/mono/bin",
+        ]
 
 
     for hint_dir in hint_dirs:
     for hint_dir in hint_dirs:
-        hint_path = os.path.join(hint_dir, filename)
+        hint_path = os.path.join(hint_dir, "msbuild")
         if os.path.isfile(hint_path):
         if os.path.isfile(hint_path):
             return hint_path
             return hint_path
         elif os.path.isfile(hint_path + '.exe'):
         elif os.path.isfile(hint_path + '.exe'):
@@ -91,7 +25,7 @@ def find_msbuild_unix(filename):
 
 
     for hint_dir in os.environ['PATH'].split(os.pathsep):
     for hint_dir in os.environ['PATH'].split(os.pathsep):
         hint_dir = hint_dir.strip('"')
         hint_dir = hint_dir.strip('"')
-        hint_path = os.path.join(hint_dir, filename)
+        hint_path = os.path.join(hint_dir, "msbuild")
         if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
         if os.path.isfile(hint_path) and os.access(hint_path, os.X_OK):
             return hint_path
             return hint_path
         if os.path.isfile(hint_path + '.exe') and os.access(hint_path + '.exe', os.X_OK):
         if os.path.isfile(hint_path + '.exe') and os.access(hint_path + '.exe', os.X_OK):
@@ -156,18 +90,11 @@ def nuget_restore(env, *args):
     global verbose
     global verbose
     verbose = env['verbose']
     verbose = env['verbose']
 
 
-    # Find NuGet
-    nuget_path = find_nuget_windows(env) if os.name == 'nt' else find_nuget_unix()
-    if nuget_path is None:
-        raise RuntimeError('Cannot find NuGet executable')
-
-    print('NuGet path: ' + nuget_path)
-
     # Do NuGet restore
     # Do NuGet restore
     run_command(nuget_path, ['restore'] + list(args), name='nuget restore')
     run_command(nuget_path, ['restore'] + list(args), name='nuget restore')
 
 
 
 
-def build_solution(env, solution_path, build_config, extra_msbuild_args=[]):
+def build_solution(env, solution_path, build_config, extra_msbuild_args=[], restore=False):
     global verbose
     global verbose
     verbose = env['verbose']
     verbose = env['verbose']
 
 
@@ -187,28 +114,17 @@ def build_solution(env, solution_path, build_config, extra_msbuild_args=[]):
     else:
     else:
         msbuild_path = find_msbuild_unix('msbuild')
         msbuild_path = find_msbuild_unix('msbuild')
         if msbuild_path is None:
         if msbuild_path is None:
-            xbuild_fallback = env['xbuild_fallback']
-
-            if xbuild_fallback and os.name == 'nt':
-                print('Option \'xbuild_fallback\' not supported on Windows')
-                xbuild_fallback = False
-
-            if xbuild_fallback:
-                print('Cannot find MSBuild executable, trying with xbuild')
-                print('Warning: xbuild is deprecated')
-
-                msbuild_path = find_msbuild_unix('xbuild')
-
-                if msbuild_path is None:
-                    raise RuntimeError('Cannot find xbuild executable')
-            else:
-                raise RuntimeError('Cannot find MSBuild executable')
+            raise RuntimeError("Cannot find MSBuild executable")
 
 
     print('MSBuild path: ' + msbuild_path)
     print('MSBuild path: ' + msbuild_path)
 
 
     # Build solution
     # Build solution
 
 
-    msbuild_args = [solution_path, '/p:Configuration=' + build_config]
+    targets = ["Build"]
+    if restore:
+        targets.insert(0, "Restore")
+
+    msbuild_args = [solution_path, "/t:%s" % ",".join(targets), "/p:Configuration=" + build_config]
     msbuild_args += extra_msbuild_args
     msbuild_args += extra_msbuild_args
 
 
     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name='msbuild')
     run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name='msbuild')

+ 15 - 5
modules/mono/config.py

@@ -21,11 +21,21 @@ def configure(env):
     default_mono_bundles_zlib = platform in ['javascript']
     default_mono_bundles_zlib = platform in ['javascript']
 
 
     envvars = Variables()
     envvars = Variables()
-    envvars.Add(PathVariable('mono_prefix', 'Path to the mono installation directory for the target platform and architecture', '', PathVariable.PathAccept))
-    envvars.Add(BoolVariable('mono_static', 'Statically link mono', default_mono_static))
-    envvars.Add(BoolVariable('mono_glue', 'Build with the mono glue sources', True))
-    envvars.Add(BoolVariable('copy_mono_root', 'Make a copy of the mono installation directory to bundle with the editor', False))
-    envvars.Add(BoolVariable('xbuild_fallback', 'If MSBuild is not found, fallback to xbuild', False))
+    envvars.Add(
+        PathVariable(
+            "mono_prefix",
+            "Path to the mono installation directory for the target platform and architecture",
+            "",
+            PathVariable.PathAccept,
+        )
+    )
+    envvars.Add(BoolVariable("mono_static", "Statically link mono", default_mono_static))
+    envvars.Add(BoolVariable("mono_glue", "Build with the mono glue sources", True))
+    envvars.Add(
+        BoolVariable(
+            "copy_mono_root", "Make a copy of the mono installation directory to bundle with the editor", False
+        )
+    )
 
 
     # TODO: It would be great if this could be detected automatically instead
     # TODO: It would be great if this could be detected automatically instead
     envvars.Add(BoolVariable('mono_bundles_zlib', 'Specify if the Mono runtime was built with bundled zlib', default_mono_bundles_zlib))
     envvars.Add(BoolVariable('mono_bundles_zlib', 'Specify if the Mono runtime was built with bundled zlib', default_mono_bundles_zlib))

+ 1 - 1
modules/mono/csharp_script.cpp

@@ -795,7 +795,7 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
 		to_reload.push_back(script);
 		to_reload.push_back(script);
 
 
 		if (script->get_path().empty()) {
 		if (script->get_path().empty()) {
-			script->tied_class_name_for_reload = script->script_class->get_name();
+			script->tied_class_name_for_reload = script->script_class->get_name_for_lookup();
 			script->tied_class_namespace_for_reload = script->script_class->get_namespace();
 			script->tied_class_namespace_for_reload = script->script_class->get_namespace();
 		}
 		}
 
 

+ 11 - 23
modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj

@@ -8,16 +8,21 @@
     <RootNamespace>GodotTools</RootNamespace>
     <RootNamespace>GodotTools</RootNamespace>
     <AssemblyName>GodotTools</AssemblyName>
     <AssemblyName>GodotTools</AssemblyName>
     <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
     <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
-    <GodotSourceRootPath>$(SolutionDir)/../../../../</GodotSourceRootPath>
-    <DataDirToolsOutputPath>$(GodotSourceRootPath)/bin/GodotSharp/Tools</DataDirToolsOutputPath>
-    <GodotApiConfiguration>Debug</GodotApiConfiguration>
     <LangVersion>7</LangVersion>
     <LangVersion>7</LangVersion>
+    <GodotApiConfiguration>Debug</GodotApiConfiguration> <!-- The Godot editor uses the Debug Godot API assemblies -->
+    <GodotSourceRootPath>$(SolutionDir)/../../../../</GodotSourceRootPath>
+    <GodotOutputDataDir>$(GodotSourceRootPath)/bin/GodotSharp</GodotOutputDataDir>
+    <GodotApiAssembliesDir>$(GodotOutputDataDir)/Api/$(GodotApiConfiguration)</GodotApiAssembliesDir>
+  </PropertyGroup>
+  <PropertyGroup Condition=" Exists('$(GodotApiAssembliesDir)/GodotSharp.dll') ">
+    <!-- The project is part of the Godot source tree -->
+    <!-- Use the Godot source tree output folder instead of '$(ProjectDir)/bin' -->
+    <OutputPath>$(GodotOutputDataDir)/Tools</OutputPath>
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugSymbols>true</DebugSymbols>
     <DebugType>portable</DebugType>
     <DebugType>portable</DebugType>
     <Optimize>false</Optimize>
     <Optimize>false</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
     <DefineConstants>DEBUG;</DefineConstants>
     <DefineConstants>DEBUG;</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <WarningLevel>4</WarningLevel>
@@ -25,7 +30,6 @@
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <Optimize>true</Optimize>
     <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
     <ErrorReport>prompt</ErrorReport>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
     <WarningLevel>4</WarningLevel>
     <ConsolePause>false</ConsolePause>
     <ConsolePause>false</ConsolePause>
@@ -45,11 +49,11 @@
     </Reference>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System" />
     <Reference Include="GodotSharp">
     <Reference Include="GodotSharp">
-      <HintPath>$(GodotSourceRootPath)/bin/GodotSharp/Api/$(GodotApiConfiguration)/GodotSharp.dll</HintPath>
+      <HintPath>$(GodotApiAssembliesDir)/GodotSharp.dll</HintPath>
       <Private>False</Private>
       <Private>False</Private>
     </Reference>
     </Reference>
     <Reference Include="GodotSharpEditor">
     <Reference Include="GodotSharpEditor">
-      <HintPath>$(GodotSourceRootPath)/bin/GodotSharp/Api/$(GodotApiConfiguration)/GodotSharpEditor.dll</HintPath>
+      <HintPath>$(GodotApiAssembliesDir)/GodotSharpEditor.dll</HintPath>
       <Private>False</Private>
       <Private>False</Private>
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
@@ -103,21 +107,5 @@
   <ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />
     <None Include="packages.config" />
   </ItemGroup>
   </ItemGroup>
-  <Target Name="CopyToDataDir" AfterTargets="Build">
-    <ItemGroup>
-      <GodotToolsCopy Include="$(OutputPath)\GodotTools*.dll" />
-      <GodotToolsCopy Include="$(OutputPath)\Newtonsoft.Json.dll" />
-      <GodotToolsCopy Include="$(OutputPath)\DotNet.Glob.dll" />
-    </ItemGroup>
-    <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
-      <GodotToolsCopy Include="$(OutputPath)\GodotTools*.pdb" />
-    </ItemGroup>
-    <Copy SourceFiles="@(GodotToolsCopy)" DestinationFolder="$(DataDirToolsOutputPath)" ContinueOnError="false" />
-  </Target>
-  <Target Name="BuildAlwaysCopyToDataDir">
-    <!-- Custom target run by SCons to make sure the CopyToDataDir target is always executed, without having to use DisableFastUpToDateCheck -->
-    <CallTarget Targets="Build" />
-    <CallTarget Targets="CopyToDataDir" />
-  </Target>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
 </Project>
 </Project>

+ 16 - 2
modules/mono/mono_gd/gd_mono_class.cpp

@@ -79,12 +79,26 @@ bool GDMonoClass::is_assignable_from(GDMonoClass *p_from) const {
 	return mono_class_is_assignable_from(mono_class, p_from->mono_class);
 	return mono_class_is_assignable_from(mono_class, p_from->mono_class);
 }
 }
 
 
-GDMonoClass *GDMonoClass::get_parent_class() {
+StringName GDMonoClass::get_namespace() const {
+	GDMonoClass *nesting_class = get_nesting_class();
+	if (!nesting_class)
+		return namespace_name;
+	return nesting_class->get_namespace();
+}
+
+String GDMonoClass::get_name_for_lookup() const {
+	GDMonoClass *nesting_class = get_nesting_class();
+	if (!nesting_class)
+		return class_name;
+	return nesting_class->get_name_for_lookup() + "/" + class_name;
+}
+
+GDMonoClass *GDMonoClass::get_parent_class() const {
 	MonoClass *parent_mono_class = mono_class_get_parent(mono_class);
 	MonoClass *parent_mono_class = mono_class_get_parent(mono_class);
 	return parent_mono_class ? GDMono::get_singleton()->get_class(parent_mono_class) : NULL;
 	return parent_mono_class ? GDMono::get_singleton()->get_class(parent_mono_class) : NULL;
 }
 }
 
 
-GDMonoClass *GDMonoClass::get_nesting_class() {
+GDMonoClass *GDMonoClass::get_nesting_class() const {
 	MonoClass *nesting_type = mono_class_get_nesting_type(mono_class);
 	MonoClass *nesting_type = mono_class_get_nesting_type(mono_class);
 	return nesting_type ? GDMono::get_singleton()->get_class(nesting_type) : NULL;
 	return nesting_type ? GDMono::get_singleton()->get_class(nesting_type) : NULL;
 }
 }

+ 4 - 3
modules/mono/mono_gd/gd_mono_class.h

@@ -113,14 +113,15 @@ public:
 
 
 	bool is_assignable_from(GDMonoClass *p_from) const;
 	bool is_assignable_from(GDMonoClass *p_from) const;
 
 
-	_FORCE_INLINE_ StringName get_namespace() const { return namespace_name; }
+	StringName get_namespace() const;
 	_FORCE_INLINE_ StringName get_name() const { return class_name; }
 	_FORCE_INLINE_ StringName get_name() const { return class_name; }
+	String get_name_for_lookup() const;
 
 
 	_FORCE_INLINE_ MonoClass *get_mono_ptr() const { return mono_class; }
 	_FORCE_INLINE_ MonoClass *get_mono_ptr() const { return mono_class; }
 	_FORCE_INLINE_ const GDMonoAssembly *get_assembly() const { return assembly; }
 	_FORCE_INLINE_ const GDMonoAssembly *get_assembly() const { return assembly; }
 
 
-	GDMonoClass *get_parent_class();
-	GDMonoClass *get_nesting_class();
+	GDMonoClass *get_parent_class() const;
+	GDMonoClass *get_nesting_class() const;
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 	Vector<MonoClassField *> get_enum_fields();
 	Vector<MonoClassField *> get_enum_fields();

+ 1 - 1
platform/windows/key_mapping_windows.cpp

@@ -130,7 +130,7 @@ static _WinTranslatePair _vk_to_keycode[] = {
 
 
 	{ KEY_MASK_META, VK_LWIN }, //(0x5B)
 	{ KEY_MASK_META, VK_LWIN }, //(0x5B)
 	{ KEY_MASK_META, VK_RWIN }, //(0x5C)
 	{ KEY_MASK_META, VK_RWIN }, //(0x5C)
-	//VK_APPS (0x5D)
+	{ KEY_MENU, VK_APPS }, //(0x5D)
 	{ KEY_STANDBY, VK_SLEEP }, //(0x5F)
 	{ KEY_STANDBY, VK_SLEEP }, //(0x5F)
 	{ KEY_KP_0, VK_NUMPAD0 }, //(0x60)
 	{ KEY_KP_0, VK_NUMPAD0 }, //(0x60)
 	{ KEY_KP_1, VK_NUMPAD1 }, //(0x61)
 	{ KEY_KP_1, VK_NUMPAD1 }, //(0x61)

+ 1 - 1
platform/windows/os_windows.cpp

@@ -1542,7 +1542,7 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
 				tilt_supported = orientation[0].axResolution && orientation[1].axResolution;
 				tilt_supported = orientation[0].axResolution && orientation[1].axResolution;
 			}
 			}
 		} else {
 		} else {
-			ERR_PRINT("WinTab context creation falied.");
+			print_verbose("WinTab context creation failed.");
 		}
 		}
 	} else {
 	} else {
 		wtctx = 0;
 		wtctx = 0;

+ 13 - 4
scene/2d/visibility_notifier_2d.cpp

@@ -248,10 +248,19 @@ void VisibilityEnabler2D::_notification(int p_what) {
 
 
 		_find_nodes(from);
 		_find_nodes(from);
 
 
-		if (enabler[ENABLER_PARENT_PHYSICS_PROCESS] && get_parent())
-			get_parent()->set_physics_process(false);
-		if (enabler[ENABLER_PARENT_PROCESS] && get_parent())
-			get_parent()->set_process(false);
+		// We need to defer the call of set_process and set_physics_process,
+		// otherwise they are overwritten inside NOTIFICATION_READY.
+		// We can't use call_deferred, because it happens after a physics frame.
+		// The ready signal works as it's emitted immediately after NOTIFICATION_READY.
+
+		if (enabler[ENABLER_PARENT_PHYSICS_PROCESS] && get_parent()) {
+			get_parent()->connect(SceneStringNames::get_singleton()->ready,
+					get_parent(), "set_physics_process", varray(false), CONNECT_ONESHOT);
+		}
+		if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) {
+			get_parent()->connect(SceneStringNames::get_singleton()->ready,
+					get_parent(), "set_process", varray(false), CONNECT_ONESHOT);
+		}
 	}
 	}
 
 
 	if (p_what == NOTIFICATION_EXIT_TREE) {
 	if (p_what == NOTIFICATION_EXIT_TREE) {

+ 1 - 1
scene/debugger/script_debugger_remote.cpp

@@ -1150,7 +1150,7 @@ void ScriptDebuggerRemote::_print_handler(void *p_this, const String &p_string,
 	String s = p_string;
 	String s = p_string;
 	int allowed_chars = MIN(MAX(sdr->max_cps - sdr->char_count, 0), s.length());
 	int allowed_chars = MIN(MAX(sdr->max_cps - sdr->char_count, 0), s.length());
 
 
-	if (allowed_chars == 0)
+	if (allowed_chars == 0 && s.length() > 0)
 		return;
 		return;
 
 
 	if (allowed_chars < s.length()) {
 	if (allowed_chars < s.length()) {

+ 4 - 0
scene/gui/line_edit.cpp

@@ -271,10 +271,14 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
 				} break;
 				} break;
 #ifdef APPLE_STYLE_KEYS
 #ifdef APPLE_STYLE_KEYS
 				case (KEY_LEFT): { // Go to start of text - like HOME key.
 				case (KEY_LEFT): { // Go to start of text - like HOME key.
+					shift_selection_check_pre(k->get_shift());
 					set_cursor_position(0);
 					set_cursor_position(0);
+					shift_selection_check_post(k->get_shift());
 				} break;
 				} break;
 				case (KEY_RIGHT): { // Go to end of text - like END key.
 				case (KEY_RIGHT): { // Go to end of text - like END key.
+					shift_selection_check_pre(k->get_shift());
 					set_cursor_position(text.length());
 					set_cursor_position(text.length());
+					shift_selection_check_post(k->get_shift());
 				} break;
 				} break;
 #endif
 #endif
 				default: {
 				default: {

+ 3 - 0
scene/resources/capsule_shape_2d.cpp

@@ -72,6 +72,9 @@ real_t CapsuleShape2D::get_radius() const {
 void CapsuleShape2D::set_height(real_t p_height) {
 void CapsuleShape2D::set_height(real_t p_height) {
 
 
 	height = p_height;
 	height = p_height;
+	if (height < 0)
+		height = 0;
+
 	_update_shape();
 	_update_shape();
 }
 }
 
 

+ 1 - 1
thirdparty/README.md

@@ -120,7 +120,7 @@ Use UI font variant if available, because it has tight vertical metrics and good
 ## freetype
 ## freetype
 
 
 - Upstream: https://www.freetype.org
 - Upstream: https://www.freetype.org
-- Version: 2.10.1
+- Version: 2.10.2 (2020)
 - License: FreeType License (BSD-like)
 - License: FreeType License (BSD-like)
 
 
 Files extracted from upstream source:
 Files extracted from upstream source:

+ 1 - 1
thirdparty/freetype/include/freetype/config/ftconfig.h

@@ -4,7 +4,7 @@
  *
  *
  *   ANSI-specific configuration file (specification only).
  *   ANSI-specific configuration file (specification only).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/config/ftheader.h

@@ -4,7 +4,7 @@
  *
  *
  *   Build macros of the FreeType 2 library.
  *   Build macros of the FreeType 2 library.
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 20 - 2
thirdparty/freetype/include/freetype/config/ftoption.h

@@ -4,7 +4,7 @@
  *
  *
  *   User-selectable configuration macros (specification only).
  *   User-selectable configuration macros (specification only).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,
@@ -292,6 +292,22 @@ FT_BEGIN_HEADER
 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
 
 
 
 
+  /**************************************************************************
+   *
+   * Brotli support.
+   *
+   *   FreeType uses the Brotli library to provide support for decompressing
+   *   WOFF2 streams.
+   *
+   *   Define this macro if you want to enable this 'feature'.
+   *
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
+   */
+/* #define FT_CONFIG_OPTION_USE_BROTLI */
+
+
   /**************************************************************************
   /**************************************************************************
    *
    *
    * Glyph Postscript Names handling
    * Glyph Postscript Names handling
@@ -871,9 +887,11 @@ FT_BEGIN_HEADER
    *
    *
    * Compile 'autofit' module with fallback Indic script support, covering
    * Compile 'autofit' module with fallback Indic script support, covering
    * some scripts that the 'latin' submodule of the 'autofit' module doesn't
    * some scripts that the 'latin' submodule of the 'autofit' module doesn't
-   * (yet) handle.
+   * (yet) handle.  Currently, this needs option `AF_CONFIG_OPTION_CJK`.
    */
    */
+#ifdef AF_CONFIG_OPTION_CJK
 #define AF_CONFIG_OPTION_INDIC
 #define AF_CONFIG_OPTION_INDIC
+#endif
 
 
 
 
   /**************************************************************************
   /**************************************************************************

+ 1 - 1
thirdparty/freetype/include/freetype/config/ftstdlib.h

@@ -5,7 +5,7 @@
  *   ANSI-specific library and header configuration file (specification
  *   ANSI-specific library and header configuration file (specification
  *   only).
  *   only).
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 18 - 17
thirdparty/freetype/include/freetype/freetype.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType high-level API and common types (specification only).
  *   FreeType high-level API and common types (specification only).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,
@@ -1239,7 +1239,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_HORIZONTAL( face ) \
 #define FT_HAS_HORIZONTAL( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1253,7 +1253,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_VERTICAL( face ) \
 #define FT_HAS_VERTICAL( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1267,7 +1267,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_KERNING( face ) \
 #define FT_HAS_KERNING( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_KERNING )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_KERNING ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1282,7 +1282,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_SCALABLE( face ) \
 #define FT_IS_SCALABLE( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1301,7 +1301,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_SFNT( face ) \
 #define FT_IS_SFNT( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_SFNT )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_SFNT ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1316,7 +1316,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_FIXED_WIDTH( face ) \
 #define FT_IS_FIXED_WIDTH( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1331,7 +1331,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_FIXED_SIZES( face ) \
 #define FT_HAS_FIXED_SIZES( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1357,7 +1357,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_GLYPH_NAMES( face ) \
 #define FT_HAS_GLYPH_NAMES( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1372,7 +1372,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_MULTIPLE_MASTERS( face ) \
 #define FT_HAS_MULTIPLE_MASTERS( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1394,7 +1394,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_NAMED_INSTANCE( face ) \
 #define FT_IS_NAMED_INSTANCE( face ) \
-          ( (face)->face_index & 0x7FFF0000L )
+          ( !!( (face)->face_index & 0x7FFF0000L ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1412,7 +1412,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_VARIATION( face ) \
 #define FT_IS_VARIATION( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_VARIATION )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_VARIATION ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1429,7 +1429,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_CID_KEYED( face ) \
 #define FT_IS_CID_KEYED( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1443,7 +1443,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_IS_TRICKY( face ) \
 #define FT_IS_TRICKY( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_TRICKY ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -1460,7 +1460,7 @@ FT_BEGIN_HEADER
    *
    *
    */
    */
 #define FT_HAS_COLOR( face ) \
 #define FT_HAS_COLOR( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_COLOR )
+          ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) )
 
 
 
 
   /**************************************************************************
   /**************************************************************************
@@ -2078,7 +2078,8 @@ FT_BEGIN_HEADER
    *     The size in bytes of the file in memory.
    *     The size in bytes of the file in memory.
    *
    *
    *   pathname ::
    *   pathname ::
-   *     A pointer to an 8-bit file pathname.
+   *     A pointer to an 8-bit file pathname.  The pointer is not owned by
+   *     FreeType.
    *
    *
    *   stream ::
    *   stream ::
    *     A handle to a source stream object.
    *     A handle to a source stream object.
@@ -4781,7 +4782,7 @@ FT_BEGIN_HEADER
    */
    */
 #define FREETYPE_MAJOR  2
 #define FREETYPE_MAJOR  2
 #define FREETYPE_MINOR  10
 #define FREETYPE_MINOR  10
-#define FREETYPE_PATCH  1
+#define FREETYPE_PATCH  2
 
 
 
 
   /**************************************************************************
   /**************************************************************************

+ 1 - 1
thirdparty/freetype/include/freetype/ftadvanc.h

@@ -4,7 +4,7 @@
  *
  *
  *   Quick computation of advance widths (specification only).
  *   Quick computation of advance widths (specification only).
  *
  *
- * Copyright (C) 2008-2019 by
+ * Copyright (C) 2008-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftbbox.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType exact bbox computation (specification).
  *   FreeType exact bbox computation (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftbdf.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType API for accessing BDF-specific strings (specification).
  *   FreeType API for accessing BDF-specific strings (specification).
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftbitmap.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType utility functions for bitmaps (specification).
  *   FreeType utility functions for bitmaps (specification).
  *
  *
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftbzip2.h

@@ -4,7 +4,7 @@
  *
  *
  *   Bzip2-compressed stream support.
  *   Bzip2-compressed stream support.
  *
  *
- * Copyright (C) 2010-2019 by
+ * Copyright (C) 2010-2020 by
  * Joel Klinghed.
  * Joel Klinghed.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftcache.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType Cache subsystem (specification).
  *   FreeType Cache subsystem (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftcid.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType API for accessing CID font information (specification).
  *   FreeType API for accessing CID font information (specification).
  *
  *
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
  * Dereg Clegg and Michael Toftdal.
  * Dereg Clegg and Michael Toftdal.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 10 - 7
thirdparty/freetype/include/freetype/ftcolor.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType's glyph color management (specification).
  *   FreeType's glyph color management (specification).
  *
  *
- * Copyright (C) 2018-2019 by
+ * Copyright (C) 2018-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,
@@ -125,9 +125,9 @@ FT_BEGIN_HEADER
    *     The number of palettes.
    *     The number of palettes.
    *
    *
    *   palette_name_ids ::
    *   palette_name_ids ::
-   *     A read-only array of palette name IDs with `num_palettes` elements,
-   *     corresponding to entries like 'dark' or 'light' in the font's 'name'
-   *     table.
+   *     An optional read-only array of palette name IDs with `num_palettes`
+   *     elements, corresponding to entries like 'dark' or 'light' in the
+   *     font's 'name' table.
    *
    *
    *     An empty name ID in the 'CPAL' table gets represented as value
    *     An empty name ID in the 'CPAL' table gets represented as value
    *     0xFFFF.
    *     0xFFFF.
@@ -135,8 +135,8 @@ FT_BEGIN_HEADER
    *     `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
    *     `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
    *
    *
    *   palette_flags ::
    *   palette_flags ::
-   *     A read-only array of palette flags with `num_palettes` elements.
-   *     Possible values are an ORed combination of
+   *     An optional read-only array of palette flags with `num_palettes`
+   *     elements.  Possible values are an ORed combination of
    *     @FT_PALETTE_FOR_LIGHT_BACKGROUND and
    *     @FT_PALETTE_FOR_LIGHT_BACKGROUND and
    *     @FT_PALETTE_FOR_DARK_BACKGROUND.
    *     @FT_PALETTE_FOR_DARK_BACKGROUND.
    *
    *
@@ -147,7 +147,7 @@ FT_BEGIN_HEADER
    *     same size.
    *     same size.
    *
    *
    *   palette_entry_name_ids ::
    *   palette_entry_name_ids ::
-   *     A read-only array of palette entry name IDs with
+   *     An optional read-only array of palette entry name IDs with
    *     `num_palette_entries`.  In each palette, entries with the same index
    *     `num_palette_entries`.  In each palette, entries with the same index
    *     have the same function.  For example, index~0 might correspond to
    *     have the same function.  For example, index~0 might correspond to
    *     string 'outline' in the font's 'name' table to indicate that this
    *     string 'outline' in the font's 'name' table to indicate that this
@@ -163,6 +163,9 @@ FT_BEGIN_HEADER
    *   Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
    *   Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
    *   name strings.
    *   name strings.
    *
    *
+   *   Use function @FT_Palette_Select to get the colors associated with a
+   *   palette entry.
+   *
    * @since:
    * @since:
    *   2.10
    *   2.10
    */
    */

+ 1 - 1
thirdparty/freetype/include/freetype/ftdriver.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType API for controlling driver modules (specification only).
  *   FreeType API for controlling driver modules (specification only).
  *
  *
- * Copyright (C) 2017-2019 by
+ * Copyright (C) 2017-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/fterrdef.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType error codes (specification).
  *   FreeType error codes (specification).
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/fterrors.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType error code handling (specification).
  *   FreeType error code handling (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftfntfmt.h

@@ -4,7 +4,7 @@
  *
  *
  *   Support functions for font formats.
  *   Support functions for font formats.
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftgasp.h

@@ -4,7 +4,7 @@
  *
  *
  *   Access of TrueType's 'gasp' table (specification).
  *   Access of TrueType's 'gasp' table (specification).
  *
  *
- * Copyright (C) 2007-2019 by
+ * Copyright (C) 2007-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftglyph.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType convenience functions to handle glyphs (specification).
  *   FreeType convenience functions to handle glyphs (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftgxval.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *
  *
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
  * Masatake YAMATO, Redhat K.K,
  * Masatake YAMATO, Redhat K.K,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *

+ 1 - 1
thirdparty/freetype/include/freetype/ftgzip.h

@@ -4,7 +4,7 @@
  *
  *
  *   Gzip-compressed stream support.
  *   Gzip-compressed stream support.
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftimage.h

@@ -5,7 +5,7 @@
  *   FreeType glyph image formats and default raster interface
  *   FreeType glyph image formats and default raster interface
  *   (specification).
  *   (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftincrem.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType incremental loading (specification).
  *   FreeType incremental loading (specification).
  *
  *
- * Copyright (C) 2002-2019 by
+ * Copyright (C) 2002-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftlcdfil.h

@@ -5,7 +5,7 @@
  *   FreeType API for color filtering of subpixel bitmap glyphs
  *   FreeType API for color filtering of subpixel bitmap glyphs
  *   (specification).
  *   (specification).
  *
  *
- * Copyright (C) 2006-2019 by
+ * Copyright (C) 2006-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftlist.h

@@ -4,7 +4,7 @@
  *
  *
  *   Generic list support for FreeType (specification).
  *   Generic list support for FreeType (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftlzw.h

@@ -4,7 +4,7 @@
  *
  *
  *   LZW-compressed stream support.
  *   LZW-compressed stream support.
  *
  *
- * Copyright (C) 2004-2019 by
+ * Copyright (C) 2004-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftmac.h

@@ -4,7 +4,7 @@
  *
  *
  *   Additional Mac-specific API.
  *   Additional Mac-specific API.
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftmm.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType Multiple Master font interface (specification).
  *   FreeType Multiple Master font interface (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

+ 1 - 1
thirdparty/freetype/include/freetype/ftmodapi.h

@@ -4,7 +4,7 @@
  *
  *
  *   FreeType modules public interface (specification).
  *   FreeType modules public interface (specification).
  *
  *
- * Copyright (C) 1996-2019 by
+ * Copyright (C) 1996-2020 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  *
  * This file is part of the FreeType project, and may only be used,
  * This file is part of the FreeType project, and may only be used,

Some files were not shown because too many files changed in this diff