Commit Graph

1041 Commits

Author SHA1 Message Date
Ignacio Etcheverry 6e7da72648 C#: Fix editor unable to play game after IDE PlayRequest
The editor wasn't clearing the debugger agent
settings properly after a processing a play
request from an IDE. This caused consequent play
attempts to fail if not launched from the IDE,
as the game would still attempt and fail to
connect to the debugger.

The concrete cause: Forgetting to clear the
`GODOT_MONO_DEBUGGER_AGENT` environment variable.
2020-08-19 00:14:57 +02:00
Aaron Franke 56e2c6c704
Make all String float conversion methods be 64-bit 2020-07-27 18:38:53 -04:00
Nhiqill 42d1b4f389 Pop from front to avoid infinite loop with nested classes 2020-07-27 16:36:56 -04:00
Rémi Verschelde dc456059a4
Merge pull request #40595 from neikeq/godot-net-sdk-and-net-standard
C#: Switch games to MSBuild Sdks and .NET Standard
2020-07-26 20:47:35 +02:00
Rémi Verschelde f940e5e000 CI: Install master version of psf/black
Until https://github.com/psf/black/pull/1328 makes it in a stable release,
we have to use the latest from Git.

Apply new style fixes done by latest black.
2020-07-26 19:48:25 +02:00
Ignacio Etcheverry ced77b1e9b C#: Switch games to MSBuild Sdks and .NET Standard
Godot.NET.Sdk
-------------

Godot uses its own custom MSBuild Sdk for game
projects. This new Sdk adds its own functionality
on top of 'Microsoft.NET.Sdk'.

The new Sdk is resolved from the NuGet package.

All the default boilerplate was moved from game
projects to the Sdk. The default csproj for
game project can now be as simple as:

```
<Project Sdk="Godot.NET.Sdk/4.0.0-dev2">
  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>
</Project>
```

Source files are included by automatically so
Godot no longer needs to keep the csproj in sync
when creating new source files.

Define constants
----------------

Godot defines a list of constants for conditional
compilation. When exporting games, this list also
included engine 'features' and platform 'bits'.
There were a few problems with that:

- The 'features' constants were only defined when
  exporting games. Not when building the game for
  running in the editor player.
- If the project was built externally by an IDE,
  the constants wouldn't be defined at all.

The new Sdk assigns default values to these
constants when not built from the Godot editor,
i.e.: when built from an IDE or from the command
line. The default define constants are determined
from the system MSBuild is running on.

However, it's not possible for MSBuild to
determine the set of supported engine features.
It's also not possible to determine if a project
is being built to run on a 32-bit or 64-bit
Godot executable.

As such the 'features' and 'bits' constants had
to be removed.
The benefit of checking those at compile time
was questionable, and they can still be checked
at runtime.

The new list of define constants includes:

- GODOT
- GODOT_<PLATFORM>
  Defaults to the platform MSBuild is running on.
- GODOT_<PC/MOBILE/WEB>
- TOOLS
  When building with the 'Debug' configuration
  (editor and editor player).
- GODOT_REAL_T_IS_DOUBLE
  Not defined by default unless $(GodotRealTIsDouble)
  is overriden to be 'true'.

.NET Standard
-------------

The target framework of game projects was changed
to 'netstandard2.1'.
2020-07-25 19:22:01 +02:00
George Marques 2b9d9bc364
Remove multilevel calls
In general they are more confusing to users because they expect
inheritance to fully override parent methods. This behavior can be
enabled by script writers using a simple super() call.
2020-07-24 14:13:58 -03:00
mega-bit 0ca96ae2c1 Fix typos in GodotSharp code docs 2020-07-22 22:46:04 +02:00
Ignacio Etcheverry 4a30289eee C#: Fix restore not called when building game projects 2020-07-22 14:28:47 +02:00
Aaron Franke ad96b6314c
Fix XML in Plane.cs 2020-07-21 20:13:51 -04:00
Aaron Franke 83e324d670
Update core documentation to match recent C# changes
Also a few minor API changes like adding AABB.abs()

Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2020-07-21 14:44:53 -04:00
Rémi Verschelde 861c6c63b6
Merge pull request #40218 from aaronfranke/mono-docs
Add C# XML documentation to core C# math types
2020-07-14 10:17:10 +02:00
Aaron Franke 9986439352
Commit other files changed by file_format.sh 2020-07-13 14:14:11 -04:00
Aaron Franke 5fd4fa0b73
Add C# XML documentation to core C# math types 2020-07-11 05:07:24 -04:00
bruvzg 5d54c015b2
[macOS, Mono] Fix "Wdeprecated-declarations" build error. 2020-07-10 18:45:12 +03:00
George Marques 9654365547
Add a map of autoloads to ProjectSettings
So places that need to look into it can use the list instead of parsing
ProjectSettings details (like checking "*" in path for testing if it's
singleton).
2020-07-06 12:35:51 -03:00
Daniel Doran c3b16e825c Fix Mono PackedArray Marshalling 2020-07-05 14:54:31 -06:00
Rémi Verschelde 347a55d4c2
Merge pull request #40137 from neikeq/fix-clangtidy-warnings-mono
Mono/C#: Fix several clang-tidy warnings and cleanup
2020-07-05 22:32:27 +02:00
Ignacio Etcheverry 2511c43972 Mono/C#: Fix several clang-tidy warnings and cleanup 2020-07-05 19:19:36 +02:00
endlesstravel d2461bad63 fix crash when pass null in print array in GD.print
fix crash when pass null in print array in GD.print 2

fix crash when pass null in print array in GD.print 3

fix space
2020-07-03 16:55:09 +08:00
G'lek a5abacd1e7
Change assembly watcher after notification changes
Fixed Mono not building after #39986 was merged due to a constant that got renamed.
2020-06-30 17:41:38 -04:00
Rémi Verschelde 87d2397273
Merge pull request #39837 from neikeq/fix-invalid-unbox-long-as-int
Mono/C#: Fix InvalidCast because of attempt to unbox long as int
2020-06-26 07:56:42 +02:00
Rémi Verschelde aa42bd14ac
Merge pull request #39839 from neikeq/use-/restore-instead-of-/t-restore
Mono/C#: Use /restore instead of /t:restore when building
2020-06-26 07:49:40 +02:00
Ignacio Etcheverry 4b0c78b3ca Mono/C#: Use /restore instead of /t:restore when building
Documentation recommends not to use /t:restore
together with other targets (like /t:build),
as it messes with the environment.
2020-06-25 23:50:05 +02:00
Ignacio Etcheverry e8d632720f Mono/C#: Fix InvalidCast because of attempt to unbox long as int 2020-06-25 23:37:53 +02:00
Ignacio Etcheverry f87ae395ee Mono/C#: Fix unhandled exception not being printed
For some reason `mono_unhandled_exception` is not
printing the exception as its comment claims.
Use `mono_print_unhandled_exception` instead.
2020-06-25 23:28:53 +02:00
Rémi Verschelde 04795d7f1e
Merge pull request #39739 from MichaelBelousov/fix/long-enum-fix-rider-cast
fix underlying type of enum crashing cast in RiderPathManager
2020-06-24 22:51:07 +02:00
Michael Belousov 9f61f1ed54 Mono: fix bad long casts and wrong underlying enum types in GodotTools 2020-06-24 09:35:13 -04:00
Rémi Verschelde 7d60a88888
Merge pull request #39783 from neikeq/messaging-codecompletion-localize-fix
C#: Fix completion request with case insensitive resource path
2020-06-24 01:00:05 +02:00
Ignacio Etcheverry d569b447ff C#: Fix completion request with case insensitive resource path
Sometimes Visual Studio documents have the root path all in upper case.
Since Godot doesn't support loading resource files with a case insensitive path,
this makes script resource loading to fail when the Godot editor gets code
completion requests from Visual Studio.
This fix allows the resource path part of the path to be case insensitive. It
still doesn't support cases where the rest of the path is also case insensitive.
For that we would need a proper API for comparing paths. However, this fix
should be enough for our current cases.
2020-06-23 20:29:19 +02:00
Hugo Locurcio 31b7f02a29
Remove ToolButton in favor of Button
ToolButton has no redeeming differences with Button;
it's just a Button with the Flat property enabled by default.
Removing it avoids some confusion when creating GUIs.

Existing ToolButtons will be converted to Buttons, but the Flat
property won't be enabled automatically.

This closes https://github.com/godotengine/godot-proposals/issues/1081.
2020-06-19 20:49:49 +02:00
Rémi Verschelde d5c659c992
Merge pull request #39652 from paulloz/generics-getnodesingroup
[mono] Implement generics GetNodesInGroup
2020-06-19 18:52:36 +02:00
Paul Joannon 183dc04d70 [mono] implement generics GetNodesInGroup 2020-06-19 08:49:24 +02:00
Rémi Verschelde 9562fb900e
Merge pull request #39629 from MichaelBelousov/dont-slice-longs-to-mono
Dont slice 64-bit integers marshaled to mono in dynamic contexts
2020-06-19 07:50:34 +02:00
Hugo Locurcio 24a8d43272 Document Mono-specific classes
This fully documents all Mono-specific classes.
2020-06-18 10:32:34 +02:00
Michael Belousov 60fcefba69 return boxed long when marshalling a godot int to mono runtime in dynamic contexts 2020-06-17 17:16:17 -04:00
Rémi Verschelde ba0db95909 DocData: Skip language-specific ClassDoc without methods/constants
Removes the useless `@C#`, `@NativeScript` and `@VisualScript` entries.
2020-06-17 15:09:07 +02:00
Ignacio Etcheverry 7756351f47 Fix dynamic linking of MSVC Mono with MinGW Godot 2020-06-15 21:29:50 +02:00
Ignacio Etcheverry 54df72dcc6 C#: Add VisualStudio support 2020-06-15 21:29:16 +02:00
NutmegStudio a77f633161 Fixes building mono release templates 2020-05-30 12:21:24 +07:00
Maganty Rushyendra 3d03be7a56 Update Mono C# warning to reflect latest list of platforms supported
Simple fix for #38627. iOS (#20268) and HTML5 (#20270) removed from list of exceptions
for platforms supported in warning message.
2020-05-26 09:19:45 +08:00
Rémi Verschelde 2a3f650bf6
Merge pull request #38962 from neikeq/4.0-scons-option-build-cil
Add SCons option to not build C# solutions
2020-05-22 18:29:13 +02:00
Ignacio Etcheverry e3a54152e4 Add SCons option to not build C# solutions 2020-05-22 17:44:33 +02:00
Rémi Verschelde 07ada02cb4
Merge pull request #38943 from neikeq/yakamashi
Mono/C#: Don't try to load project assembly in project manager
2020-05-22 09:16:26 +02:00
Ignacio Etcheverry d7e21ecd63 Mono/C#: Don't try to load project assembly in project manager
This was causing an error message when launching the manager,
because there is no project assembly to load.
2020-05-22 02:17:59 +02:00
Ignacio Etcheverry 51e1614d28 Mono/C#: Fix values not updated in remote inspector 2020-05-22 00:58:38 +02:00
Rémi Verschelde cba1f492cc
Merge pull request #38863 from neikeq/csharp-no-false-error-objtype-reload
Mono/C#: Remove script load error about not a Godot.Object
2020-05-19 20:48:59 +02:00
Ignacio Etcheverry 38cd2152e6 Mono/C#: Remove script load error about not a Godot.Object
Any C# file can be loaded as script and at load
time we don't yet know if it's actually meant to
be used as a script. As such, such an check can
result in a lot of false errors.

If the file is really meant to be used as a
script, an error would be printed later when
attempting to instantiate it any way.
2020-05-19 17:51:56 +02:00
Ignacio Etcheverry 9fa4b402a7 Added tests for ClassDB 2020-05-16 17:32:58 +02:00
Rémi Verschelde 07bc4e2f96 Style: Enforce separation line between function definitions
I couldn't find a tool that enforces it, so I went the manual route:
```
find -name "thirdparty" -prune \
  -o -name "*.cpp" -o -name "*.h" -o -name "*.m" -o -name "*.mm" \
  -o -name "*.glsl" > files
perl -0777 -pi -e 's/\n}\n([^#])/\n}\n\n\1/g' $(cat files)
misc/scripts/fix_style.sh -c
```

This adds a newline after all `}` on the first column, unless they
are followed by `#` (typically `#endif`). This leads to having lots
of places with two lines between function/class definitions, but
clang-format then fixes it as we enforce max one line of separation.

This doesn't fix potential occurrences of function definitions which
are indented (e.g. for a helper class defined in a .cpp), but it's
better than nothing. Also can't be made to run easily on CI/hooks so
we'll have to be careful with new code.

Part of #33027.
2020-05-14 16:54:55 +02:00
Rémi Verschelde 0be6d925dc Style: clang-format: Disable KeepEmptyLinesAtTheStartOfBlocks
Which means that reduz' beloved style which we all became used to
will now be changed automatically to remove the first empty line.

This makes us lean closer to 1TBS (the one true brace style) instead
of hybridating it with some Allman-inspired spacing.

There's still the case of braces around single-statement blocks that
needs to be addressed (but clang-format can't help with that, but
clang-tidy may if we agree about it).

Part of #33027.
2020-05-14 16:54:55 +02:00
Rémi Verschelde 1a8167867b Modernize remaining uses of 0/NULL instead of nullptr (C++11)
Using clang-tidy's `modernize-use-nullptr`.
https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
2020-05-14 13:45:01 +02:00
Rémi Verschelde 1f6f364a56 Port member initialization from constructor to declaration (C++11)
Using `clang-tidy`'s `modernize-use-default-member-init` check and
manual review of the changes, and some extra manual changes that
`clang-tidy` failed to do.

Also went manually through all of `core` to find occurrences that
`clang-tidy` couldn't handle, especially all initializations done
in a constructor without using initializer lists.
2020-05-14 10:01:56 +02:00
Rémi Verschelde dbd90b9478
Merge pull request #38638 from pepegadeveloper123/mono_inherited_scene_bug
Fix inherited C# scene not inheriting parent's fields
2020-05-11 10:19:15 +02:00
Rémi Verschelde 54bb4cb6d6
Merge pull request #38650 from neikeq/dotnet-cli-support
C#: Support for building with the dotnet CLI
2020-05-11 10:16:01 +02:00
Ignacio Etcheverry dcf1dc4fe0 C#: Support for building with the dotnet CLI
By adding a reference to the 'Microsoft.NETFramework.ReferenceAssemblies' nuget
package, we can build projects targeting .NET Framework with the dotnet CLI.
By referencing this package we also don't need to install Mono on Linux/macOS
or .NET Framework on Windows, as the assemblies are taken from the package.
2020-05-11 08:17:37 +02:00
Ignacio Etcheverry 840255a04b Implement CSharpScript::inherits_script 2020-05-10 21:49:15 +02:00
pepegadeveloper123 4e00d8520d Inherited C# scene not inheriting parent's fields
When a child scene inherits a parent scene with a C# root node, the
parent scene's export variables appear to assume values set in the
parent scene, in the child scene's Inspector. However, when the child
scene is played, the parent scene's export variables assume default
values.
When a node is created, it inherits its parent C# script's fields from
the map CSharpScriptInstance::script->member_info. However this map was
not initialized outside the editor, and this commit ensured it is. This
fixes issues #36480 and #37581.
2020-05-11 03:20:11 +09:00
Rémi Verschelde 94721f5ab8 Revert "Renamed plane's d to distance"
This reverts commit ec7b481170.

This was wrong, `d` is not a distance but the `d` constant in the
parametric equation `ax + by + cz = d` describing the plane.
2020-05-10 16:47:11 +02:00
Rémi Verschelde 6ab92464bc
Merge pull request #38621 from akien-mga/stylé-comme-jamais
Style: clang-format: Disable if statements and case labels on single line
2020-05-10 15:38:53 +02:00
Ignacio Roldán Etcheverry 54b20a25b9
Merge pull request #38600 from neikeq/no
Switch to nuget Microsoft.Build and rewrite GodotTools messasing protocol
2020-05-10 13:33:03 +02:00
Rémi Verschelde 69de7ce38c Style: clang-format: Disable AllowShortCaseLabelsOnASingleLine
Part of #33027.
2020-05-10 13:13:54 +02:00
Rémi Verschelde e956e80c1f Style: clang-format: Disable AllowShortIfStatementsOnASingleLine
Part of #33027, also discussed in #29848.

Enforcing the use of brackets even on single line statements would be
preferred, but `clang-format` doesn't have this functionality yet.
2020-05-10 13:12:16 +02:00
Marcus Elg ec7b481170 Renamed plane's d to distance 2020-05-10 12:12:51 +02:00
Ignacio Etcheverry 3ce09246d1 C#: Rewrite GodotTools messaging protocol 2020-05-09 21:49:40 +02:00
Ignacio Etcheverry f3bcd5f8dd C#: Use Sdks in GodotTools csprojs and switch to nuget Microsoft.Build 2020-05-09 21:36:31 +02:00
Ignacio Etcheverry af4acb5b11 C#/Mono: Check assembly version when loading
Not sure if we should check revision too, but this is good enough for what we want.
This will be needed to load the correct Microsoft.Build when we switch to the nuget version.
2020-05-09 20:54:16 +02:00
Ignacio Etcheverry 4441222194 C#: Remove StringExtensions.Empty() function
Causes issues with some editors as it's confused with `string.Empty`.
Should use `string.IsNullOrEmpty(str)` instead.
2020-05-09 20:48:00 +02:00
Ignacio Roldán Etcheverry 61306eb830
Merge pull request #38596 from neikeq/msbuild-restore
Mono: Use msbuild instead of nuget.exe for restoring
2020-05-09 20:16:52 +02:00
Ignacio Etcheverry b61ffef0ab Mono: Use msbuild instead of nuget.exe for restoring
- Make GodotTools output directly to the SCons output directory.
- Removed xbuild_fallback from the build system.
2020-05-09 19:45:04 +02:00
Ignacio Etcheverry e0a001549e Mono: Fix hot-reloading of nested classes 2020-05-09 19:18:28 +02:00
Rémi Verschelde ae33cf5f45
Merge pull request #36379 from aaronfranke/color-constructors
Add a Color constructor for Color with alpha
2020-05-07 21:16:51 +02:00
Hugo Locurcio 596d426151
Remove some C++11 polyfill defines that are no longer needed 2020-05-03 00:42:04 +02:00
Aaron Franke 90df1d67cb
Color with alpha constructor 2020-04-29 14:41:12 -04:00
Nannaquin 0ac6f4c40b Fix growMargin() not returning modified Rect2/Rect2i 2020-04-29 11:29:57 -04:00
Aaron Franke ad3c3e1bbb
[Mono] Rename LinearInterpolate to Lerp 2020-04-29 04:02:24 -04:00
Rémi Verschelde 41af228b76
Merge pull request #36960 from pycbouh/docs-improve-shortcuts
Improve shortcut formatting in docs
2020-04-29 09:40:52 +02:00
Ignacio Etcheverry f5510262bc Mono/C#: Fix load hook not called for some assemblies on domain reload 2020-04-23 18:55:44 +02:00
Ignacio Etcheverry 81f13f6171 C#: Fix always saving copy of csproj even with no changes
This was a regression from 93d7ec8836 (#38110).
Mono's old implementation of Microsoft.Build hardcodes HasUnsavedChanges to
always return true.
This workaround can be reverted once we switch to official Microsoft.Build.
2020-04-23 16:18:55 +02:00
Rémi Verschelde 8012be867c
Merge pull request #38123 from neikeq/fix-hotreload-twice
Mono/C#: Fix assemblies being reloaded a second time unnecesarily
2020-04-23 11:34:28 +02:00
Ignacio Etcheverry 20b9dbb1d5 C#: Revert marshalling of IDictionary/IEnumerable implementing types
Added marshalling for `System.Collections.Generic.List<T>` and
`System.Collections.Generic.Dictionary<TKey, TValue>`.
2020-04-23 02:26:43 +02:00
Ignacio Etcheverry c9882e61e2 Mono/C#: Fix assemblies being reloaded a second time unnecesarily 2020-04-23 02:23:25 +02:00
Ignacio Roldán Etcheverry 28f0b15c9d
Merge pull request #38117 from neikeq/export-mono-array-godot-object
Mono/C#: Allow exporting System.Array of type Godot.Object
2020-04-22 17:41:34 +02:00
Ignacio Roldán Etcheverry 3ad9652a5d
Merge pull request #38110 from neikeq/csproj-safer-migration
C#: Save copy of sln and csproj before applying fixes
2020-04-22 17:27:07 +02:00
Ignacio Etcheverry 0fec3cb5ed Mono/C#: Allow exporting System.Array of type Godot.Object 2020-04-22 17:19:45 +02:00
Ignacio Etcheverry 93d7ec8836 C#: Save copy of sln and csproj before applying fixes 2020-04-22 16:50:43 +02:00
Ignacio Etcheverry 71fc87e101 Mono/C#: Allow debugging exported games
- Include PDB files in exported games.
- Release export templates also allow debugging now.

Right now the only way to enable debugging in exported games is with the  environment variables, which may be cumbersome or not even possible on some platforms.
2020-04-22 16:44:03 +02:00
Juan Linietsky 5d4dc2d45c Add ability to bind typed arrays to script API
Note: Only replaced 2 instances to test, Node.get_children and TileMap.get_used_cells
Note: Will do a mass replace on later PRs of whathever I can find, but probably need
a tool to grep through doc.
Warning: Mono will break, needs to be fixed (and so do TypeScript and NativeScript, need to ask respective maintainers)
2020-04-21 10:15:40 +02:00
Juan Linietsky ae09b55a19 Exposed RenderingDevice to script API
Also added an easier way to load native GLSL shaders.

Extras:

Had to fix no-cache for subresources in resource loader, it was not properly working, making shaders not properly reload.

Note:

The precommit hooks are broken because they don't seem to support enums from one class being used in another.
Feel free to fix this after merging this PR.
2020-04-20 21:21:58 -03:00
Rémi Verschelde 2cd952bd84 Fix handling of PROPERTY_USAGE_SUBGROUP in DocData and editor
Subgroups were added in #37678 but not properly handled everywhere
where PROPERTY_USAGE_GROUP is.
2020-04-20 17:13:06 +02:00
Rémi Verschelde 408fab8442 Mono: Fix include for Android support
This was a typo in #37153.

Co-authored-by: Ignacio Etcheverry <ignalfonsore@gmail.com>
2020-04-18 21:28:51 +02:00
Yuri Sizov 1ea7295bd2 Improve shortcut formatting in docs 2020-04-10 18:42:11 +03:00
Ignacio Etcheverry 27ddb27da8 Fix C# bindings after recent breaking changes 2020-04-03 01:38:48 +02:00
Rémi Verschelde ea7b497065 Replace more occurrences of NULL with nullptr 2020-04-02 14:56:01 +02:00
lupoDharkael 95a1400a2a Replace NULL with nullptr 2020-04-02 13:38:00 +02:00
Rémi Verschelde e53cbba36c
Merge pull request #37484 from Calinou/csharp-verbatim-string-highlight
Remove syntax highlighting for C# verbatim strings due to bugs
2020-04-01 15:10:19 +02:00
Hugo Locurcio 49efd6093e Remove syntax highlighting for C# verbatim strings due to bugs
This closes #32336.
2020-04-01 09:12:47 +02:00
Ignacio Etcheverry 77dd061345 Mono/C#: Add iOS support
Right now, games only work on devices when exported with FullAOT+Interpreter.
There are some issues left that need to addressed for FullAOT alone. Right now,
it's giving issues with the Godot.NativeCalls static constructor.
2020-03-31 09:37:16 +02:00
Ignacio Etcheverry fa08437694 Mono/C#: Fix MinGW build not supporting `.lib` libraries
MinGW should support both its own format `.a` and MSVC's format `.lib`,
but Mono's module was only using the former. With this change it's now
possible to build with MinGW and link the official Mono for Windows
which is built with MSVC.
2020-03-31 09:37:11 +02:00
Rémi Verschelde f3c74afd28
Merge pull request #37436 from akien-mga/doc-node-renames
doc: Update classref with node renames
2020-03-30 20:32:11 +02:00