summaryrefslogtreecommitdiff
path: root/modules/mono
AgeCommit message (Collapse)Author
2022-08-26Merge pull request #64901 from raulsntos/dotnet/equalsIgnacio Roldán Etcheverry
C#: Use pattern matching to simplify `Equals`
2022-08-26Remove `[Signal]` attribute from eventsRaul Santos
- Remove event as a valid target of `SignalAttribute` - Stop adding the `[Signal]` attribute to events in bindings_generator - Make bindings_generator use the `EventHandler` suffix to be consistent with the C# source generator - Remove obsolete comment about the signal's delegate name
2022-08-25Merge pull request #64852 from paulloz/dotnet6-export-category-attributeIgnacio Roldán Etcheverry
C#: Preserve order of exported fields/categories
2022-08-25Merge pull request #64898 from neikeq/dotnet-fix-find-archRémi Verschelde
2022-08-25C#: Preserve order of exported fields/categoriesPaul Joannon
2022-08-25C#: Fix buildsystem when `dotnet --info` does not specify archIgnacio Roldán Etcheverry
For some installations the architecture information is not printed.
2022-08-25Merge pull request #52815 from magian1127/temp3Ignacio Roldán Etcheverry
C# Generate SnakeName const
2022-08-25Various C# documentation improvementsRaul Santos
Fixes wrong/invalid documentation and add documentation to some OS members.
2022-08-25C# Generate StringName(SnakeName) for all class membersMagian
2022-08-25Merge pull request #55778 from aaronfranke/use-arch-btwRémi Verschelde
[skip ci]
2022-08-25Merge pull request #64869 from bruvzg/dotnet_archIgnacio Roldán Etcheverry
[macOS] Check .NET binary architecture, and search for the cross compile SDK in the subfolders.
2022-08-25Unify bits, arch, and android_arch into env["arch"]Aaron Franke
Fully removes the `bits` option and adapts the code that relied on it. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2022-08-25[macOS] Check .NET binary architecture, and search for the cross compile SDK ↵bruvzg
in the subfolders.
2022-08-25Merge pull request #64731 from raulsntos/dotnet6-variant-generics-analyzerRémi Verschelde
C#: Add `MustBeVariant` attribute and analyzer
2022-08-25Merge pull request #64781 from raulsntos/csharp_childrenRémi Verschelde
Add `includeInternal` to C# NodeExtensions and avoid printing errors in `GetChildOrNull`
2022-08-25Add MustBeVariant attribute and analyzerRaul Santos
- MustBeVariant attribute can be used to enforce that generic types must be a marshable from/to Variant. - Also renames all diagnostic ids to be valid unicode identifiers.
2022-08-24Remove mentions of the Server platform from the Mono moduleAaron Franke
2022-08-24Merge pull request #64742 from zaevi/csharp_add_grouping_attributesIgnacio Roldán Etcheverry
C#: Add grouping attributes for properties.
2022-08-24Merge pull request #64743 from raulsntos/dotnet6-signal-analyzerIgnacio Roldán Etcheverry
Improve C# signal analyzer errors
2022-08-24Use pattern matching to simplify `Equals`Raul Santos
- Simplify and unify `Equals` implementation of C# struct types - Also add pattern matching to replace a cast in `DebuggingUtils`
2022-08-24Update C# named colors to use HEX codesRaul Santos
2022-08-24Avoid printing an error in GetChildOrNullRaul Santos
`GetChildOrNull` won't print an error when the given index is out of range, similar to how the LINQ `ElementAtOrDefault` method works.
2022-08-24Merge pull request #64727 from raulsntos/csharp-remove-ctorsIgnacio Roldán Etcheverry
Remove copy constructors in C# structs
2022-08-24Merge pull request #64773 from raulsntos/dotnet6-🦭Ignacio Roldán Etcheverry
C#: Seal classes that can't be inherited from
2022-08-23Add `includeInternal` to C# NodeExtensions and fix get_child documentationRaul Santos
Node methods in C# extended to use generics now have the optional parameter `includeInternal` like their non-generic equivalents. Also, fixed a typo in the `Node.get_child` documentation.
2022-08-23Seal classes that can't be inherited fromRaul Santos
2022-08-23Merge pull request #64762 from neikeq/csharp-dangling-callable-codeRémi Verschelde
2022-08-23Merge pull request #64729 from raulsntos/csharp-xform-operatorRémi Verschelde
C#: Replace `Xform` and `XformInv` with `*` operator
2022-08-23C#: Remove old Callable code left dangling after switch to .NET 6Ignacio Roldán Etcheverry
2022-08-22C#: Replace `Xform` and `XformInv` with `*` operatorRaul Santos
- In cases where both `Xform`/`XformInv` and the `*` operator were implemented the `Xform`/`XformInv` methods were removed in favor of the `*` operator. - In cases where the `Xform`/`XformInv` existed but not the `*` operator, the `Xform`/`XformInv` methods were replaced with the `*` operator. - In cases where no method existed, a new `*` operator has been implemented to support the same operations that are supported in GDScript. - Fixes the `Transform.Xform` and `Transform.XformInv` with `Rect2` implementation to use a zero `Rect2` size to start expanding from (which is how it's implemented in C++).
2022-08-22Improve C# signal analyzer errorsRaul Santos
Report the specific parameters that are not supported.
2022-08-23C#: Add grouping attributes for properties.Zae
2022-08-22Avoid trying to load non-existent assemblyRaul Santos
If the project assembly does not exist, return `false` directly instead of trying to load it. This prevents the `System.InvalidOperationException` thrown for failing to locate managed application.
2022-08-22Remove copy constructors in C# structsRaul Santos
2022-08-22C#: Add module READMEIgnacio Roldán Etcheverry
This should clarify development workflow with the NuGet packages.
2022-08-22C#: Replace P/Invoke with delegate pointersIgnacio Roldán Etcheverry
- Moves interop functions to UnmanagedCallbacks struct that contains the function pointers and is passed to C#. - Implements UnmanagedCallbacksGenerator, a C# source generator that generates the UnmanagedCallbacks struct in C# and the body for the NativeFuncs methods (their implementation just calls the function pointer in the UnmanagedCallbacks). The generated methods are needed because .NET pins byref parameters of native calls, even if they are 'ref struct's, which don't need pinning. The generated methods use `Unsafe.AsPointer` so that we can benefit from byref parameters without suffering overhead of pinning. Co-authored-by: Raul Santos <raulsntos@gmail.com>
2022-08-22C#: Remove IL post-processor build dependencyIgnacio Roldán Etcheverry
We were using it to workaround a limitation of `Unsafe.AsPointer` and `ref struct`s. However, we can get the same result with some tricks, since we have control over the declaration of these structs.
2022-08-22C#: Use custom project setting for C# project files nameIgnacio Roldán Etcheverry
The setting is initially assigned the name of the Godot project, but it's kept freezed to prevent issues when renaming the Godot project. The user can always rename the C# project and solution manually and change the setting to the new name.
2022-08-22C#: Re-introduce generic Godot Array and DictionaryIgnacio Roldán Etcheverry
This new version does not support the following type arguments: - Generic types - Array of Godot Object (Godot.Object[]) or derived types The new implementation uses delegate pointers to call the Variant conversion methods. We do type checking only once in the static constructor to get the conversion delegates. Now, we no longer need to do type checking every time, and we no longer have to box value types. This is the best implementation I could come up with, as C# generics don't support anything similar to C++ template specializations.
2022-08-22C#: Array, Dictionary and marshaling refactoringIgnacio Roldán Etcheverry
- Array and Dictionary now store `Variant` instead of `System.Object`. - Removed generic Array and Dictionary. They cause too much issues, heavily relying on reflection and very limited by the lack of a generic specialization. - Removed support for non-Godot collections. Support for them also relied heavily on reflection for marshaling. Support for them will likely be re-introduced in the future, but it will have to rely on source generators instead of reflection. - Reduced our use of reflection. The remaining usages will be moved to source generators soon. The only usage that I'm not sure yet how to replace is dynamic invocation of delegates.
2022-08-22C#: Add dedicated Variant struct, replacing System.ObjectIgnacio Roldán Etcheverry
2022-08-22C#: Add source generator for method listIgnacio Roldán Etcheverry
2022-08-22C#: Add source generator for signals as eventsIgnacio Roldán Etcheverry
Changed the signal declaration signal to: ``` // The following generates a MySignal event [Signal] public delegate void MySignalEventHandler(int param); ```
2022-08-22C#: Refactor Array & Dictionary interface implementationsIgnacio Roldán Etcheverry
2022-08-22C#: Re-implement assembly reloading with ALCsIgnacio Roldán Etcheverry
2022-08-22C#: Make GodotSharp API a NuGet packageIgnacio Roldán Etcheverry
In the past, the Godot editor distributed the API assemblies and copied them to project directories for projects to reference them. This changed with the move to .NET 5/6. Godot no longer copies the assemblies to project directories. However, the project Sdk still tried to reference them from the same location. From now on, the GodotSharp API is distributed as a NuGet package, which the Sdk can reference. Added an option to `build_assemblies.py` to copy all Godot NuGet packages to an existing local NuGet source. This will be needed during development, while packages are not published to a remote NuGet repository. This option also makes sure to remove packages of the same version installed (~/.nuget/packages). Very useful during development, when packages change, to make sure the package being used by a project is the same we just built and not one from a previous build. A local NuGet source can be created like this: ``` mkdir ~/MyLocalNuGetSource && \ dotnet nuget add source ~/MyLocalNuGetSource/ -n MyLocalNuGetSource ```
2022-08-22C#: Initial NativeAOT supportIgnacio Roldán Etcheverry
This commit adds initial support for games exported as NativeAOT shared libraries. At this moment, the NativeAOT runtime is experimental. Additionally, Godot is not trim-safe as it still makes some use of reflection. For the time being, a rd.xml file is needed to prevent code triming: ``` <Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata"> <Application> <Assembly Name="GodotSharp" Dynamic="Required All" /> <Assembly Name="GAME_ASSEMBLY" Dynamic="Required All" /> </Application> </Directives> ``` These are the csproj changes for publishing: ``` <PropertyGroup> <NativeLib>Shared</NativeLib> </PropertyGroup> <ItemGroup> <RdXmlFile Include="rd.xml" /> <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="7.0.0-*" /> </ItemGroup> ``` More info: - https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/compiling.md - https://github.com/dotnet/runtimelab/tree/feature/NativeAOT/samples/NativeLibrary - https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/rd-xml-format.md
2022-08-22C#: Upgrade to .NET 6 (5.0 -> 6.0)Ignacio Roldán Etcheverry
2022-08-22C#: Static marshaling for bindings and source generatorsIgnacio Roldán Etcheverry
Previously, we added source generators for invoking/accessing methods, properties and fields in scripts. This freed us from the overhead of reflection. However, the generated code still used our dynamic marshaling functions, which do runtime type checking and box value types. This commit changes the bindings and source generators to include 'static' marshaling. Based on the types known at compile time, now we generate the appropriate marshaling call for each type.
2022-08-22C#: Re-introduce exception logging and error stack traces in editorIgnacio Roldán Etcheverry
These two had been disabled while moving to .NET 5, as the previous implementation relied on Mono embedding APIs.