Merge pull request #38659 from akien-mga/3.2-cherrypicks
Cherry-picks for the 3.2 branch (future 3.2.2) - 5th batch
This commit is contained in:
commit
a9bcd8ba26
|
@ -30,3 +30,11 @@ before_build:
|
|||
|
||||
build_script:
|
||||
- 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
|
||||
|
|
|
@ -159,7 +159,7 @@ License: Expat and Bitstream Vera Fonts Copyright
|
|||
|
||||
Files: ./thirdparty/freetype/
|
||||
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
|
||||
|
||||
Files: ./thirdparty/glad/
|
||||
|
|
|
@ -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 VECTOR3: return (Vector3(*p_args[0]));
|
||||
case TRANSFORM2D:
|
||||
return (Transform2D(p_args[0]->operator Transform2D()));
|
||||
case PLANE: return (Plane(*p_args[0]));
|
||||
case QUAT: return (p_args[0]->operator Quat());
|
||||
case AABB:
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Engine" inherits="Object" version="3.2">
|
||||
<brief_description>
|
||||
Access to basic engine properties.
|
||||
Access to engine properties.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -303,7 +303,7 @@
|
|||
<return type="Node">
|
||||
</return>
|
||||
<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>
|
||||
</method>
|
||||
<method name="get_path" qualifiers="const">
|
||||
|
|
|
@ -299,7 +299,7 @@
|
|||
<argument index="0" name="by" type="Vector3">
|
||||
</argument>
|
||||
<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>
|
||||
</method>
|
||||
<method name="to_diagonal_matrix">
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
<brief_description>
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/index.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="get_input_real_name" qualifiers="const">
|
||||
|
@ -16,6 +18,7 @@
|
|||
</methods>
|
||||
<members>
|
||||
<member name="input_name" type="String" setter="set_input_name" getter="get_input_name" default=""[None]"">
|
||||
One of the several input constants in lower-case style like: "vertex"([code]VERTEX[/code]) or "point_size"([code]POINT_SIZE[/code]).
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeIs" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A boolean comparison operator to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Returns the boolean result of the comparison between [code]INF[/code] or [code]NaN[/code] and a scalar parameter.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,12 +12,15 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="FUNC_IS_INF" value="0" enum="Function">
|
||||
Comparison with [code]INF[/code] (Infinity).
|
||||
</constant>
|
||||
<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>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeOuterProduct" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates an outer product of two vectors within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeOutput" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Represents the output shader parameters within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
This visual shader node is present in all shader graphs in form of "Output" block with mutliple output value ports.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarClamp" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Clamps a scalar value within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Constrains a value to lie between [code]min[/code] and [code]max[/code] values.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarDerivativeFunc" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a scalar derivative within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,14 +12,18 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="FUNC_SUM" value="0" enum="Function">
|
||||
Sum of absolute derivative in [code]x[/code] and [code]y[/code].
|
||||
</constant>
|
||||
<constant name="FUNC_X" value="1" enum="Function">
|
||||
Derivative in [code]x[/code] using local differencing.
|
||||
</constant>
|
||||
<constant name="FUNC_Y" value="2" enum="Function">
|
||||
Derivative in [code]y[/code] using local differencing.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarInterp" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Linearly interpolates between two scalars within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translates to [code]mix(a, b, weight)[/code] in the shader language.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a scalar SmoothStep function within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeScalarSwitch" inherits="VisualShaderNodeSwitch" version="3.2">
|
||||
<brief_description>
|
||||
A boolean/scalar function for use within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Returns an associated scalar if the provided boolean value is [code]true[/code] or [code]false[/code].
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeSwitch" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A boolean/vector function for use within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Returns an associated vector if the provided boolean value is [code]true[/code] or [code]false[/code].
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTexture" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Performs a texture lookup within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Performs a lookup operation on the provided texture, with support for multiple texture sources to choose from.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,30 +12,42 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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 name="texture" type="Texture" setter="set_texture" getter="get_texture">
|
||||
The source texture, if needed for the selected [member source].
|
||||
</member>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="SOURCE_TEXTURE" value="0" enum="Source">
|
||||
Use the texture given as an argument for this function.
|
||||
</constant>
|
||||
<constant name="SOURCE_SCREEN" value="1" enum="Source">
|
||||
Use the current viewport's texture as the source.
|
||||
</constant>
|
||||
<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 name="SOURCE_2D_NORMAL" value="3" enum="Source">
|
||||
Use the texture from this shader's normal map built-in.
|
||||
</constant>
|
||||
<constant name="SOURCE_DEPTH" value="4" enum="Source">
|
||||
Use the depth texture available for this shader.
|
||||
</constant>
|
||||
<constant name="SOURCE_PORT" value="5" enum="Source">
|
||||
Use the texture provided in the input port for this function.
|
||||
</constant>
|
||||
<constant name="TYPE_DATA" value="0" enum="TextureType">
|
||||
No hints are added to the uniform declaration.
|
||||
</constant>
|
||||
<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 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>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTextureUniform" inherits="VisualShaderNodeUniform" version="3.2">
|
||||
<brief_description>
|
||||
Performs a uniform texture lookup within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Performs a lookup operation on the texture provided as a uniform for the shader.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,22 +12,30 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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 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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="TYPE_DATA" value="0" enum="TextureType">
|
||||
No hints are added to the uniform declaration.
|
||||
</constant>
|
||||
<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 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 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 name="COLOR_DEFAULT_WHITE" value="0" enum="ColorDefault">
|
||||
Defaults to white color.
|
||||
</constant>
|
||||
<constant name="COLOR_DEFAULT_BLACK" value="1" enum="ColorDefault">
|
||||
Defaults to black color.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTextureUniformTriplanar" inherits="VisualShaderNodeTextureUniform" version="3.2">
|
||||
<brief_description>
|
||||
Performs a uniform texture lookup with triplanar within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Performs a lookup operation on the texture provided as a uniform for the shader, with support for triplanar mapping.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformCompose" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Composes a [Transform] from four [Vector3]s within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformConstant" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A [Transform] constant for use within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A constant [Transform], which can be used as an input node.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,6 +12,7 @@
|
|||
</methods>
|
||||
<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 )">
|
||||
A [Transform] constant which represents the state of this node.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformDecompose" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Decomposes a [Transform] into four [Vector3]s within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Takes a 4x4 transform matrix and decomposes it into four [code]vec3[/code] values, one from each row of the matrix.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformFunc" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Computes a [Transform] function within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Computes an inverse or transpose function on the provided [Transform].
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,12 +12,15 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="FUNC_INVERSE" value="0" enum="Function">
|
||||
Perform the inverse operation on the [Transform] matrix.
|
||||
</constant>
|
||||
<constant name="FUNC_TRANSPOSE" value="1" enum="Function">
|
||||
Perform the transpose operation on the [Transform] matrix.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformMult" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Multiplies [Transform] by [Transform] within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A multiplication operation on two transforms (4x4 matrices), with support for different multiplication operators.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,16 +12,21 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="OP_AxB" value="0" enum="Operator">
|
||||
Multiplies transform [code]a[/code] by the transform [code]b[/code].
|
||||
</constant>
|
||||
<constant name="OP_BxA" value="1" enum="Operator">
|
||||
Multiplies transform [code]b[/code] by the transform [code]a[/code].
|
||||
</constant>
|
||||
<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 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>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformUniform" inherits="VisualShaderNodeUniform" version="3.2">
|
||||
<brief_description>
|
||||
A [Transform] uniform for use within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translated to [code]uniform mat4[/code] in the shader language.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeTransformVecMult" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Multiplies a [Transform] and a [Vector3] within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A multiplication operation on a transform (4x4 matrix) and a vector, with support for different multiplication operators.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,16 +12,21 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="OP_AxB" value="0" enum="Operator">
|
||||
Multiplies transform [code]a[/code] by the vector [code]b[/code].
|
||||
</constant>
|
||||
<constant name="OP_BxA" value="1" enum="Operator">
|
||||
Multiplies vector [code]b[/code] by the transform [code]a[/code].
|
||||
</constant>
|
||||
<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 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>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeUniform" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A base type for the uniforms within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,6 +12,7 @@
|
|||
</methods>
|
||||
<members>
|
||||
<member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default="""">
|
||||
Name of the uniform, by which it can be accessed through the [ShaderMaterial] properties.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVec3Constant" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A [Vector3] constant to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A constant [Vector3], which can be used as an input node.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,6 +12,7 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVec3Uniform" inherits="VisualShaderNodeUniform" version="3.2">
|
||||
<brief_description>
|
||||
A [Vector3] uniform to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translated to [code]uniform vec3[/code] in the shader language.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorClamp" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Clamps a vector value within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorCompose" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Composes a [Vector3] from three scalars within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Creates a [code]vec3[/code] using three scalar values that can be provided from separate inputs.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorDecompose" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Decomposes a [Vector3] into three scalars within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Takes a [code]vec3[/code] and decomposes it into three scalar values that can be used as separate inputs.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorDerivativeFunc" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a vector derivative within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
This node is only available in [code]Fragment[/code] and [code]Light[/code] visual shaders.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,14 +12,18 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="FUNC_SUM" value="0" enum="Function">
|
||||
Sum of absolute derivative in [code]x[/code] and [code]y[/code].
|
||||
</constant>
|
||||
<constant name="FUNC_X" value="1" enum="Function">
|
||||
Derivative in [code]x[/code] using local differencing.
|
||||
</constant>
|
||||
<constant name="FUNC_Y" value="2" enum="Function">
|
||||
Derivative in [code]y[/code] using local differencing.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorDistance" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Returns the distance between two points. To be used within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorFunc" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A vector function to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A visual shader node able to perform different functions using vectors.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,78 +12,114 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<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 name="FUNC_SATURATE" value="1" enum="Function">
|
||||
Clamps the value between [code]0.0[/code] and [code]1.0[/code].
|
||||
</constant>
|
||||
<constant name="FUNC_NEGATE" value="2" enum="Function">
|
||||
Returns the opposite value of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_RECIPROCAL" value="3" enum="Function">
|
||||
Returns [code]1/vector[/code].
|
||||
</constant>
|
||||
<constant name="FUNC_RGB2HSV" value="4" enum="Function">
|
||||
Converts RGB vector to HSV equivalent.
|
||||
</constant>
|
||||
<constant name="FUNC_HSV2RGB" value="5" enum="Function">
|
||||
Converts HSV vector to RGB equivalent.
|
||||
</constant>
|
||||
<constant name="FUNC_ABS" value="6" enum="Function">
|
||||
Returns the absolute value of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ACOS" value="7" enum="Function">
|
||||
Returns the arc-cosine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ACOSH" value="8" enum="Function">
|
||||
Returns the inverse hyperbolic cosine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ASIN" value="9" enum="Function">
|
||||
Returns the arc-sine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ASINH" value="10" enum="Function">
|
||||
Returns the inverse hyperbolic sine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ATAN" value="11" enum="Function">
|
||||
Returns the arc-tangent of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ATANH" value="12" enum="Function">
|
||||
Returns the inverse hyperbolic tangent of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_CEIL" value="13" enum="Function">
|
||||
Finds the nearest integer that is greater than or equal to the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_COS" value="14" enum="Function">
|
||||
Returns the cosine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_COSH" value="15" enum="Function">
|
||||
Returns the hyperbolic cosine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_DEGREES" value="16" enum="Function">
|
||||
Converts a quantity in radians to degrees.
|
||||
</constant>
|
||||
<constant name="FUNC_EXP" value="17" enum="Function">
|
||||
Base-e Exponential.
|
||||
</constant>
|
||||
<constant name="FUNC_EXP2" value="18" enum="Function">
|
||||
Base-2 Exponential.
|
||||
</constant>
|
||||
<constant name="FUNC_FLOOR" value="19" enum="Function">
|
||||
Finds the nearest integer less than or equal to the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_FRAC" value="20" enum="Function">
|
||||
Computes the fractional part of the argument.
|
||||
</constant>
|
||||
<constant name="FUNC_INVERSE_SQRT" value="21" enum="Function">
|
||||
Returns the inverse of the square root of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_LOG" value="22" enum="Function">
|
||||
Natural logarithm.
|
||||
</constant>
|
||||
<constant name="FUNC_LOG2" value="23" enum="Function">
|
||||
Base-2 logarithm.
|
||||
</constant>
|
||||
<constant name="FUNC_RADIANS" value="24" enum="Function">
|
||||
Converts a quantity in degrees to radians.
|
||||
</constant>
|
||||
<constant name="FUNC_ROUND" value="25" enum="Function">
|
||||
Finds the nearest integer to the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_ROUNDEVEN" value="26" enum="Function">
|
||||
Finds the nearest even integer to the parameter.
|
||||
</constant>
|
||||
<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 name="FUNC_SIN" value="28" enum="Function">
|
||||
Returns the sine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_SINH" value="29" enum="Function">
|
||||
Returns the hyperbolic sine of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_SQRT" value="30" enum="Function">
|
||||
Returns the square root of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_TAN" value="31" enum="Function">
|
||||
Returns the tangent of the parameter.
|
||||
</constant>
|
||||
<constant name="FUNC_TANH" value="32" enum="Function">
|
||||
Returns the hyperbolic tangent of the parameter.
|
||||
</constant>
|
||||
<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 name="FUNC_ONEMINUS" value="34" enum="Function">
|
||||
Returns [code]1.0 - vector[/code].
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorInterp" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Linearly interpolates between two vectors within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorLen" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Returns the length of a [Vector3] within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
Translated to [code]length(p0)[/code] in the shader language.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorOp" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
A vector operator to be used within the visual shader graph.
|
||||
</brief_description>
|
||||
<description>
|
||||
A visual shader node for use of vector operators. Operates on vector [code]a[/code] and vector [code]b[/code].
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -10,32 +12,45 @@
|
|||
</methods>
|
||||
<members>
|
||||
<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>
|
||||
</members>
|
||||
<constants>
|
||||
<constant name="OP_ADD" value="0" enum="Operator">
|
||||
Adds two vectors.
|
||||
</constant>
|
||||
<constant name="OP_SUB" value="1" enum="Operator">
|
||||
Subtracts a vector from a vector.
|
||||
</constant>
|
||||
<constant name="OP_MUL" value="2" enum="Operator">
|
||||
Multiplies two vectors.
|
||||
</constant>
|
||||
<constant name="OP_DIV" value="3" enum="Operator">
|
||||
Divides vector by vector.
|
||||
</constant>
|
||||
<constant name="OP_MOD" value="4" enum="Operator">
|
||||
Returns the remainder of the two vectors.
|
||||
</constant>
|
||||
<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 name="OP_MAX" value="6" enum="Operator">
|
||||
Returns the greater of two values, for each component of the vectors.
|
||||
</constant>
|
||||
<constant name="OP_MIN" value="7" enum="Operator">
|
||||
Returns the lesser of two values, for each component of the vectors.
|
||||
</constant>
|
||||
<constant name="OP_CROSS" value="8" enum="Operator">
|
||||
Calculates the cross product of two vectors.
|
||||
</constant>
|
||||
<constant name="OP_ATAN2" value="9" enum="Operator">
|
||||
Returns the arc-tangent of the parameters.
|
||||
</constant>
|
||||
<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 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>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorRefract" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Returns the [Vector3] that points in the direction of refraction. For use within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorScalarMix" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Linearly interpolates between two vectors using a scalar. For use within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorScalarSmoothStep" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a vector SmoothStep function using scalar within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorScalarStep" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a vector Step function within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="VisualShaderNodeVectorSmoothStep" inherits="VisualShaderNode" version="3.2">
|
||||
<brief_description>
|
||||
Calculates a vector SmoothStep function within the visual shader graph.
|
||||
</brief_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>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -63,11 +63,13 @@ void EditorLog::_notification(int p_what) {
|
|||
|
||||
//button->set_icon(get_icon("Console","EditorIcons"));
|
||||
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) {
|
||||
Ref<DynamicFont> df_output_code = get_font("output_source", "EditorFonts");
|
||||
if (df_output_code.is_valid()) {
|
||||
if (log != NULL) {
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
After Width: | Height: | Size: 237 B |
|
@ -195,12 +195,20 @@ void ViewportRotationControl::_gui_input(Ref<InputEvent> p_event) {
|
|||
_update_focus();
|
||||
}
|
||||
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;
|
||||
if (mm.is_valid()) {
|
||||
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));
|
||||
focused_axis = -1;
|
||||
} else {
|
||||
|
@ -2182,14 +2190,14 @@ void SpatialEditorViewport::set_freelook_active(bool active_now) {
|
|||
}
|
||||
|
||||
// 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) {
|
||||
// Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential
|
||||
cursor = camera_cursor;
|
||||
|
||||
// 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;
|
||||
|
@ -3090,6 +3098,8 @@ void SpatialEditorViewport::_toggle_camera_preview(bool p_activate) {
|
|||
ERR_FAIL_COND(p_activate && !preview);
|
||||
ERR_FAIL_COND(!p_activate && !previewing);
|
||||
|
||||
rotation_control->set_visible(!p_activate);
|
||||
|
||||
if (!p_activate) {
|
||||
|
||||
previewing->disconnect("tree_exiting", this, "_preview_exited_scene");
|
||||
|
|
|
@ -158,6 +158,7 @@ class ViewportRotationControl : public Control {
|
|||
SpatialEditorViewport *viewport = nullptr;
|
||||
Vector<Color> axis_colors;
|
||||
Vector<int> axis_menu_options;
|
||||
Vector2i orbiting_mouse_start;
|
||||
bool orbiting = false;
|
||||
int focused_axis = -2;
|
||||
|
||||
|
|
|
@ -99,8 +99,8 @@ void SceneTreeDock::_unhandled_key_input(Ref<InputEvent> p_event) {
|
|||
_tool_selected(TOOL_DUPLICATE);
|
||||
} else if (ED_IS_SHORTCUT("scene_tree/attach_script", p_event)) {
|
||||
_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)) {
|
||||
_tool_selected(TOOL_MOVE_UP);
|
||||
} 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: {
|
||||
attach_script_to_selected(false);
|
||||
} break;
|
||||
case TOOL_CLEAR_SCRIPT: {
|
||||
case TOOL_DETACH_SCRIPT: {
|
||||
|
||||
if (!profile_allow_script_editing) {
|
||||
break;
|
||||
|
@ -439,7 +439,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
|
|||
if (selection.empty())
|
||||
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);
|
||||
|
||||
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_instance->set_icon(get_icon("Instance", "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_clear_button_enabled(true);
|
||||
|
@ -1141,7 +1141,7 @@ void SceneTreeDock::_notification(int p_what) {
|
|||
button_add->set_icon(get_icon("Add", "EditorIcons"));
|
||||
button_instance->set_icon(get_icon("Instance", "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_clear_button_enabled(true);
|
||||
|
@ -1876,18 +1876,18 @@ void SceneTreeDock::_update_script_button() {
|
|||
if (!profile_allow_script_editing) {
|
||||
|
||||
button_create_script->hide();
|
||||
button_clear_script->hide();
|
||||
button_detach_script->hide();
|
||||
} else if (EditorNode::get_singleton()->get_editor_selection()->get_selection().size() == 0) {
|
||||
button_create_script->hide();
|
||||
button_clear_script->hide();
|
||||
button_detach_script->hide();
|
||||
} 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];
|
||||
if (n->get_script().is_null()) {
|
||||
button_create_script->show();
|
||||
button_clear_script->hide();
|
||||
button_detach_script->hide();
|
||||
} else {
|
||||
button_create_script->hide();
|
||||
button_clear_script->show();
|
||||
button_detach_script->show();
|
||||
}
|
||||
} else {
|
||||
button_create_script->hide();
|
||||
|
@ -1895,11 +1895,11 @@ void SceneTreeDock::_update_script_button() {
|
|||
for (int i = 0; i < selection.size(); i++) {
|
||||
Node *n = Object::cast_to<Node>(selection[i]);
|
||||
if (!n->get_script().is_null()) {
|
||||
button_clear_script->show();
|
||||
button_detach_script->show();
|
||||
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) {
|
||||
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) {
|
||||
bool script_exists = false;
|
||||
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) {
|
||||
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/attach_script", TTR("Attach 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_down", TTR("Move Down"), KEY_MASK_CMD | KEY_DOWN);
|
||||
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->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"));
|
||||
filter_hbc->add_child(button_create_script);
|
||||
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);
|
||||
vbc->add_child(button_hb);
|
||||
|
|
|
@ -66,7 +66,7 @@ class SceneTreeDock : public VBoxContainer {
|
|||
TOOL_REPLACE,
|
||||
TOOL_EXTEND_SCRIPT,
|
||||
TOOL_ATTACH_SCRIPT,
|
||||
TOOL_CLEAR_SCRIPT,
|
||||
TOOL_DETACH_SCRIPT,
|
||||
TOOL_MOVE_UP,
|
||||
TOOL_MOVE_DOWN,
|
||||
TOOL_DUPLICATE,
|
||||
|
@ -110,7 +110,7 @@ class SceneTreeDock : public VBoxContainer {
|
|||
ToolButton *button_add;
|
||||
ToolButton *button_instance;
|
||||
ToolButton *button_create_script;
|
||||
ToolButton *button_clear_script;
|
||||
ToolButton *button_detach_script;
|
||||
|
||||
Button *button_3d;
|
||||
|
||||
|
|
|
@ -1326,12 +1326,15 @@ void ScriptEditorDebugger::_notification(int p_what) {
|
|||
} else {
|
||||
errors_tab->set_name(TTR("Errors") + " (" + 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"));
|
||||
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;
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
# Game Controller DB for Godot in SDL 2.0.10 format
|
||||
# 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
|
||||
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,
|
||||
|
|
|
@ -390,10 +390,15 @@ void GDScript::_update_exports_values(Map<StringName, Variant> &values, List<Pro
|
|||
}
|
||||
#endif
|
||||
|
||||
bool GDScript::_update_exports() {
|
||||
bool GDScript::_update_exports(bool *r_err, bool p_recursive_call) {
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
||||
static Vector<GDScript *> base_caches;
|
||||
if (!p_recursive_call)
|
||||
base_caches.clear();
|
||||
base_caches.push_back(this);
|
||||
|
||||
bool changed = false;
|
||||
|
||||
if (source_changed_cache) {
|
||||
|
@ -487,7 +492,22 @@ bool GDScript::_update_exports() {
|
|||
placeholder_fallback_enabled = false;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -515,7 +535,10 @@ void GDScript::update_exports() {
|
|||
|
||||
#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
|
||||
|
||||
|
|
|
@ -132,7 +132,7 @@ class GDScript : public Script {
|
|||
|
||||
#endif
|
||||
|
||||
bool _update_exports();
|
||||
bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false);
|
||||
|
||||
void _save_orphaned_subclasses();
|
||||
|
||||
|
|
|
@ -2098,7 +2098,7 @@ static void _find_identifiers_in_base(const GDScriptCompletionContext &p_context
|
|||
|
||||
if (!p_only_functions) {
|
||||
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()) {
|
||||
if (String(E->get().name).find("/") == -1) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
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());
|
||||
Ref<GDScript> gd_ref = ins->get_script();
|
||||
|
||||
|
|
|
@ -72,6 +72,16 @@ bool GDScriptParser::_end_statement() {
|
|||
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) {
|
||||
|
||||
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>();
|
||||
id2->name = local_var->name;
|
||||
id2->datatype = local_var->datatype;
|
||||
id2->declared_block = branch->body;
|
||||
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;
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"var\").");
|
||||
_set_end_statement_error("var");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3234,7 +3245,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
cf_continue->cf_type = ControlFlowNode::CF_CONTINUE;
|
||||
p_block->statements.push_back(cf_continue);
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"continue\").");
|
||||
_set_end_statement_error("continue");
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
@ -3246,7 +3257,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
cf_break->cf_type = ControlFlowNode::CF_BREAK;
|
||||
p_block->statements.push_back(cf_break);
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"break\").");
|
||||
_set_end_statement_error("break");
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
@ -3275,7 +3286,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
cf_return->arguments.push_back(retexpr);
|
||||
p_block->statements.push_back(cf_return);
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement after return expression.");
|
||||
_set_end_statement_error("return");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -3363,7 +3374,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
p_block->statements.push_back(an);
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement after \"assert\".", assert_line);
|
||||
_set_end_statement_error("assert");
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
@ -3374,7 +3385,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
p_block->statements.push_back(bn);
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement after \"breakpoint\".");
|
||||
_set_end_statement_error("breakpoint");
|
||||
return;
|
||||
}
|
||||
} 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) {
|
||||
_set_error("Unexpected ':=', use '=' instead. Expected end of statement after expression.");
|
||||
} 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;
|
||||
}
|
||||
|
@ -3582,7 +3593,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
if (error_set)
|
||||
return;
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement after \"extends\".");
|
||||
_set_end_statement_error("extends");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4087,7 +4098,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
p_class->_signals.push_back(sig);
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"signal\").");
|
||||
_set_end_statement_error("signal");
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
@ -4954,6 +4965,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
|
||||
IdentifierNode *id = alloc_node<IdentifierNode>();
|
||||
id->name = member.identifier;
|
||||
id->datatype = member.data_type;
|
||||
|
||||
OperatorNode *op = alloc_node<OperatorNode>();
|
||||
op->op = OperatorNode::OP_INIT_ASSIGN;
|
||||
|
@ -4996,6 +5008,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
|
||||
IdentifierNode *id = alloc_node<IdentifierNode>();
|
||||
id->name = member.identifier;
|
||||
id->datatype = member.data_type;
|
||||
|
||||
OperatorNode *op = alloc_node<OperatorNode>();
|
||||
op->op = OperatorNode::OP_INIT_ASSIGN;
|
||||
|
@ -5038,7 +5051,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
p_class->variables.push_back(member);
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"continue\").");
|
||||
_set_end_statement_error("var");
|
||||
return;
|
||||
}
|
||||
} break;
|
||||
|
@ -5118,7 +5131,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
p_class->constant_expressions.insert(const_id, constant);
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (constant).", line);
|
||||
_set_end_statement_error("const");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5272,7 +5285,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
}
|
||||
|
||||
if (!_end_statement()) {
|
||||
_set_error("Expected end of statement (\"enum\").");
|
||||
_set_end_statement_error("enum");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5288,6 +5301,10 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
|
|||
}
|
||||
} break;
|
||||
|
||||
case GDScriptTokenizer::TK_CF_PASS: {
|
||||
tokenizer->advance();
|
||||
} break;
|
||||
|
||||
default: {
|
||||
|
||||
_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>();
|
||||
id->name = cn->value.operator StringName();
|
||||
id->datatype = cn->datatype;
|
||||
|
||||
op->op = OperatorNode::OP_INDEX_NAMED;
|
||||
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 (!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;
|
||||
}
|
||||
|
||||
|
|
|
@ -624,6 +624,7 @@ private:
|
|||
void _parse_extends(ClassNode *p_class);
|
||||
void _parse_class(ClassNode *p_class);
|
||||
bool _end_statement();
|
||||
void _set_end_statement_error(String p_name);
|
||||
|
||||
void _determine_inheritance(ClassNode *p_class, bool p_recursive = true);
|
||||
bool _parse_type(DataType &r_type, bool p_can_be_void = false);
|
||||
|
|
|
@ -13,12 +13,9 @@ def build_godot_tools(source, target, env):
|
|||
solution_path = os.path.join(module_dir, 'editor/GodotTools/GodotTools.sln')
|
||||
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.
|
||||
|
||||
|
||||
|
|
|
@ -5,85 +5,19 @@ import os
|
|||
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):
|
||||
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
|
||||
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:
|
||||
hint_path = os.path.join(hint_dir, filename)
|
||||
hint_path = os.path.join(hint_dir, "msbuild")
|
||||
if os.path.isfile(hint_path):
|
||||
return hint_path
|
||||
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):
|
||||
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):
|
||||
return hint_path
|
||||
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
|
||||
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
|
||||
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
|
||||
verbose = env['verbose']
|
||||
|
||||
|
@ -187,28 +114,17 @@ def build_solution(env, solution_path, build_config, extra_msbuild_args=[]):
|
|||
else:
|
||||
msbuild_path = find_msbuild_unix('msbuild')
|
||||
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)
|
||||
|
||||
# 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
|
||||
|
||||
run_command(msbuild_path, msbuild_args, env_override=msbuild_env, name='msbuild')
|
||||
|
|
|
@ -21,11 +21,21 @@ def configure(env):
|
|||
default_mono_bundles_zlib = platform in ['javascript']
|
||||
|
||||
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
|
||||
envvars.Add(BoolVariable('mono_bundles_zlib', 'Specify if the Mono runtime was built with bundled zlib', default_mono_bundles_zlib))
|
||||
|
|
|
@ -795,7 +795,7 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
|
|||
to_reload.push_back(script);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
@ -8,16 +8,21 @@
|
|||
<RootNamespace>GodotTools</RootNamespace>
|
||||
<AssemblyName>GodotTools</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
|
||||
<GodotSourceRootPath>$(SolutionDir)/../../../../</GodotSourceRootPath>
|
||||
<DataDirToolsOutputPath>$(GodotSourceRootPath)/bin/GodotSharp/Tools</DataDirToolsOutputPath>
|
||||
<GodotApiConfiguration>Debug</GodotApiConfiguration>
|
||||
<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 Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>portable</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
|
@ -25,7 +30,6 @@
|
|||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<ConsolePause>false</ConsolePause>
|
||||
|
@ -45,11 +49,11 @@
|
|||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="GodotSharp">
|
||||
<HintPath>$(GodotSourceRootPath)/bin/GodotSharp/Api/$(GodotApiConfiguration)/GodotSharp.dll</HintPath>
|
||||
<HintPath>$(GodotApiAssembliesDir)/GodotSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="GodotSharpEditor">
|
||||
<HintPath>$(GodotSourceRootPath)/bin/GodotSharp/Api/$(GodotApiConfiguration)/GodotSharpEditor.dll</HintPath>
|
||||
<HintPath>$(GodotApiAssembliesDir)/GodotSharpEditor.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
@ -103,21 +107,5 @@
|
|||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</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" />
|
||||
</Project>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
return nesting_type ? GDMono::get_singleton()->get_class(nesting_type) : NULL;
|
||||
}
|
||||
|
|
|
@ -113,14 +113,15 @@ public:
|
|||
|
||||
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; }
|
||||
String get_name_for_lookup() const;
|
||||
|
||||
_FORCE_INLINE_ MonoClass *get_mono_ptr() const { return mono_class; }
|
||||
_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
|
||||
Vector<MonoClassField *> get_enum_fields();
|
||||
|
|
|
@ -130,7 +130,7 @@ static _WinTranslatePair _vk_to_keycode[] = {
|
|||
|
||||
{ KEY_MASK_META, VK_LWIN }, //(0x5B)
|
||||
{ KEY_MASK_META, VK_RWIN }, //(0x5C)
|
||||
//VK_APPS (0x5D)
|
||||
{ KEY_MENU, VK_APPS }, //(0x5D)
|
||||
{ KEY_STANDBY, VK_SLEEP }, //(0x5F)
|
||||
{ KEY_KP_0, VK_NUMPAD0 }, //(0x60)
|
||||
{ KEY_KP_1, VK_NUMPAD1 }, //(0x61)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
} else {
|
||||
ERR_PRINT("WinTab context creation falied.");
|
||||
print_verbose("WinTab context creation failed.");
|
||||
}
|
||||
} else {
|
||||
wtctx = 0;
|
||||
|
|
|
@ -248,10 +248,19 @@ void VisibilityEnabler2D::_notification(int p_what) {
|
|||
|
||||
_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) {
|
||||
|
|
|
@ -1150,7 +1150,7 @@ void ScriptDebuggerRemote::_print_handler(void *p_this, const String &p_string,
|
|||
String s = p_string;
|
||||
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;
|
||||
|
||||
if (allowed_chars < s.length()) {
|
||||
|
|
|
@ -271,10 +271,14 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) {
|
|||
} break;
|
||||
#ifdef APPLE_STYLE_KEYS
|
||||
case (KEY_LEFT): { // Go to start of text - like HOME key.
|
||||
shift_selection_check_pre(k->get_shift());
|
||||
set_cursor_position(0);
|
||||
shift_selection_check_post(k->get_shift());
|
||||
} break;
|
||||
case (KEY_RIGHT): { // Go to end of text - like END key.
|
||||
shift_selection_check_pre(k->get_shift());
|
||||
set_cursor_position(text.length());
|
||||
shift_selection_check_post(k->get_shift());
|
||||
} break;
|
||||
#endif
|
||||
default: {
|
||||
|
|
|
@ -72,6 +72,9 @@ real_t CapsuleShape2D::get_radius() const {
|
|||
void CapsuleShape2D::set_height(real_t p_height) {
|
||||
|
||||
height = p_height;
|
||||
if (height < 0)
|
||||
height = 0;
|
||||
|
||||
_update_shape();
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ Use UI font variant if available, because it has tight vertical metrics and good
|
|||
## freetype
|
||||
|
||||
- Upstream: https://www.freetype.org
|
||||
- Version: 2.10.1
|
||||
- Version: 2.10.2 (2020)
|
||||
- License: FreeType License (BSD-like)
|
||||
|
||||
Files extracted from upstream source:
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* ANSI-specific configuration file (specification only).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Build macros of the FreeType 2 library.
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* User-selectable configuration macros (specification only).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* 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 */
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* 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
|
||||
|
@ -871,9 +887,11 @@ FT_BEGIN_HEADER
|
|||
*
|
||||
* Compile 'autofit' module with fallback Indic script support, covering
|
||||
* 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
|
||||
#endif
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* ANSI-specific library and header configuration file (specification
|
||||
* only).
|
||||
*
|
||||
* Copyright (C) 2002-2019 by
|
||||
* Copyright (C) 2002-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* 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.
|
||||
*
|
||||
* 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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (face)->face_index & 0x7FFF0000L )
|
||||
( !!( (face)->face_index & 0x7FFF0000L ) )
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -1412,7 +1412,7 @@ FT_BEGIN_HEADER
|
|||
*
|
||||
*/
|
||||
#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 ) \
|
||||
( (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 ) \
|
||||
( (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 ) \
|
||||
( (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.
|
||||
*
|
||||
* 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 ::
|
||||
* A handle to a source stream object.
|
||||
|
@ -4781,7 +4782,7 @@ FT_BEGIN_HEADER
|
|||
*/
|
||||
#define FREETYPE_MAJOR 2
|
||||
#define FREETYPE_MINOR 10
|
||||
#define FREETYPE_PATCH 1
|
||||
#define FREETYPE_PATCH 2
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Quick computation of advance widths (specification only).
|
||||
*
|
||||
* Copyright (C) 2008-2019 by
|
||||
* Copyright (C) 2008-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType exact bbox computation (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* 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.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType utility functions for bitmaps (specification).
|
||||
*
|
||||
* Copyright (C) 2004-2019 by
|
||||
* Copyright (C) 2004-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Bzip2-compressed stream support.
|
||||
*
|
||||
* Copyright (C) 2010-2019 by
|
||||
* Copyright (C) 2010-2020 by
|
||||
* Joel Klinghed.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType Cache subsystem (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType API for accessing CID font information (specification).
|
||||
*
|
||||
* Copyright (C) 2007-2019 by
|
||||
* Copyright (C) 2007-2020 by
|
||||
* Dereg Clegg and Michael Toftdal.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType's glyph color management (specification).
|
||||
*
|
||||
* Copyright (C) 2018-2019 by
|
||||
* Copyright (C) 2018-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
@ -125,9 +125,9 @@ FT_BEGIN_HEADER
|
|||
* The number of palettes.
|
||||
*
|
||||
* 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
|
||||
* 0xFFFF.
|
||||
|
@ -135,8 +135,8 @@ FT_BEGIN_HEADER
|
|||
* `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
|
||||
*
|
||||
* 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_DARK_BACKGROUND.
|
||||
*
|
||||
|
@ -147,7 +147,7 @@ FT_BEGIN_HEADER
|
|||
* same size.
|
||||
*
|
||||
* 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
|
||||
* have the same function. For example, index~0 might correspond to
|
||||
* 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
|
||||
* name strings.
|
||||
*
|
||||
* Use function @FT_Palette_Select to get the colors associated with a
|
||||
* palette entry.
|
||||
*
|
||||
* @since:
|
||||
* 2.10
|
||||
*/
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* 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.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType error codes (specification).
|
||||
*
|
||||
* Copyright (C) 2002-2019 by
|
||||
* Copyright (C) 2002-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType error code handling (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Support functions for font formats.
|
||||
*
|
||||
* Copyright (C) 2002-2019 by
|
||||
* Copyright (C) 2002-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Access of TrueType's 'gasp' table (specification).
|
||||
*
|
||||
* Copyright (C) 2007-2019 by
|
||||
* Copyright (C) 2007-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType convenience functions to handle glyphs (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType API for validating TrueTypeGX/AAT tables (specification).
|
||||
*
|
||||
* Copyright (C) 2004-2019 by
|
||||
* Copyright (C) 2004-2020 by
|
||||
* Masatake YAMATO, Redhat K.K,
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Gzip-compressed stream support.
|
||||
*
|
||||
* Copyright (C) 2002-2019 by
|
||||
* Copyright (C) 2002-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* FreeType glyph image formats and default raster interface
|
||||
* (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType incremental loading (specification).
|
||||
*
|
||||
* Copyright (C) 2002-2019 by
|
||||
* Copyright (C) 2002-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* FreeType API for color filtering of subpixel bitmap glyphs
|
||||
* (specification).
|
||||
*
|
||||
* Copyright (C) 2006-2019 by
|
||||
* Copyright (C) 2006-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Generic list support for FreeType (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* LZW-compressed stream support.
|
||||
*
|
||||
* Copyright (C) 2004-2019 by
|
||||
* Copyright (C) 2004-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* Additional Mac-specific API.
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType Multiple Master font interface (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* FreeType modules public interface (specification).
|
||||
*
|
||||
* Copyright (C) 1996-2019 by
|
||||
* Copyright (C) 1996-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue