summaryrefslogtreecommitdiff
path: root/modules/mono/editor/GodotTools
AgeCommit message (Collapse)Author
2023-02-10Build C# csproj instead of the solutionRaul Santos
2023-02-08Merge pull request #72849 from RedworkDE/net-export-settingsRémi Verschelde
C#: Rename export settings `mono` -> `dotnet` and remove unused AOT settings
2023-02-07C#: Rename export settings `mono` -> `dotnet` and remove unused AOT settingsRedworkDE
2023-02-07Try and match MSBuild and Godot UI languagesPaul Joannon
2023-02-07Add new settings about MSBuildPaul Joannon
- toggle creation of binary logs - manage log verbosity - toggle logging in console
2023-02-07Add button to open the msbuild logs folderPaul Joannon
2023-02-07Rename existing editor settings `mono` -> `dotnet`Paul Joannon
2023-02-01C#: Preserve directories in output during exportRedworkDE
2023-01-27Merge pull request #72111 from raulsntos/method-info-metadataRémi Verschelde
Add `GodotTypeInfo::Metadata` to `MethodInfo`
2023-01-27C#: Renames to follow .NET naming conventionsRaul Santos
Renamed C# types and members to use PascalCase and follow .NET naming conventions.
2023-01-26Add `GodotTypeInfo::Metadata` to `MethodInfo`Raul Santos
2023-01-18C#: Move `GLOBAL_DEF`s to CSharpLanguage ctorRaul Santos
Also documents the .NET project settings.
2023-01-18C#: Implement `ExportPlugin::_get_name`Raul Santos
2023-01-08Use BitField<> hint for ArrayFormatJuan Linietsky
This was missing in the conversion of bitflags to BitField<>.
2022-12-02Merge pull request #69391 from NeilKleistGao/slnRémi Verschelde
Fix C# Solution Directory Project Settings
2022-12-02Fix C# solution directory settingsNeilKleistGao
Co-authored-by: Ignacio Roldán Etcheverry <neikeq@users.noreply.github.com>
2022-12-02C#: Replace most conversions between Variant and System.ObjectIgnacio Roldán Etcheverry
This commit replaces most usages of `ConvertManagedObjectToVariant` and `ConvertVariantToManagedObjectOfType`, by using the `Godot.Variant` struct instead of `System.Object`. The most notable change is to the `GetGodotPropertyDefaultValues` method that's generated for scripts. The dictionary it returns now stores `Godot.Variant` values. Remaining usages are: - The `DelegateUtils` class, for the serialization of closure display classes during assembly reloading by the editor. These display classes are compiler generated classes to store values captured by a closure. Since it's generated by the compiler, the only way we have to access the fields is through reflection. This leads to using `System.Object`. - Converting parameters when invoking constructors from the engine. This will be replaced with source generators in the future. - Legacy support for old `GetGodotPropertyDefaultValues` return values. We need to keep supporting the old version of this generated method for some time. Otherwise, if loading a project built with the previous version, it could lead to the loss of exported property values. Ideally, we should remove this legacy support before a stable release.
2022-11-14Add `readonly` to C# methods and types that don't mutateRaul Santos
Also removes a few unnecessary temp variables
2022-10-07[.NET Export] Improve .NET export process.bruvzg
[macOS export] Fix incorrect file placement, search paths and architecture detection. [macOS export] Automatically detect executable files and set +x flag. [macOS export] Automatically apply "Disable Library Validation" entitlements when required. [macOS export] Remove old Mono export code. Fix folder tree creation for shared objects export. Add arch suffix to the exported .NET "data" folder name. Remove old Mono code from .NET "data" folder lookup.
2022-09-19Replace File/Directory with FileAccess/DirAccesskobewi
2022-09-15Fix NuGet fallback folder packagesRaul Santos
- Creates a `Godot.Offline.Config` file to configurate NuGet with Godot's fallback folder. This is easier because now we can assume we can override the entire file since user config will likely be in the default `NuGet.Config` file or an additional `*.config` file. - Ensure the NuGet fallback folder is created at the same time it is added to the NuGet configuration so future builds don't fail. - Add `GodotSharp` and `GodotSharpEditor` packages to the fallback folder. - Add `.nupkg.metadata` file to packages in fallback folder. - Refer to `Godot.SourceGenerators` using the specific non-floating version since floating versions don't seem to work with fallbackPackageFolders.
2022-09-14[macOS, .NET] Fix dotnet binary detection.bruvzg
2022-09-08Make `Vector2i` values paired with `EDSCALE` be just `Vector2`Michael Alexsander
2022-09-01C#: Assume 64-bit types when type has no metaRaul Santos
When the C# bindings generator finds a type without meta assume the type refers to the 64-bit version of the type: - `float` is converted to `double` - `int` is converted to `long`
2022-08-29Merge pull request #64987 from raulsntos/dotnet/linux-exportIgnacio Roldán Etcheverry
Fix .NET exporting in Linux
2022-08-29[Web] Rename JavaScript platform to Web.Fabio Alessandrelli
Also rename export name from "HTML5" to "Web".
2022-08-29Merge pull request #64956 from raulsntos/dotnet/format-ciRémi Verschelde
Add `dotnet format` to CI to check C# style
2022-08-29Merge pull request #64900 from raulsntos/dotnet/fix-exceptionsIgnacio Roldán Etcheverry
Fix various C# exceptions
2022-08-28Fix .NET exporting in LinuxRaul Santos
- Fix platform detection after Linux OS name was renamed from `LinuxBSD` to `Linux` - Fix arch detection after renaming `64` to `x86_64` - Fix typo in `find_hostfxr`
2022-08-27Fix C# style with `dotnet format`Raul Santos
2022-08-27Rename `hint_tooltip` to `tooltip_text` & setgetMicky
`hint_tooltip` -> `tooltip_text` `set_tooltip` -> `set_tooltip_text` `_get_tooltip` -> `get_tooltip_text` Updates documentation, too.
2022-08-26Fix various C# exceptionsRaul Santos
- Replace `IndexOutOfRangeException` with `ArgumentOutOfRangeException` - Replace `Exception` with a more specific exception - Add the parameter name to argument exception - Update documentation for methods that throw exceptions - Use `StringBuilder` to build exception messages - Ensure exception messages end with a period
2022-08-26Merge pull request #64901 from raulsntos/dotnet/equalsIgnacio Roldán Etcheverry
C#: Use pattern matching to simplify `Equals`
2022-08-25Various C# documentation improvementsRaul Santos
Fixes wrong/invalid documentation and add documentation to some OS members.
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-24Remove mentions of the Server platform from the Mono moduleAaron Franke
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-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#: 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 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#: Re-implement assembly reloading with ALCsIgnacio Roldán Etcheverry
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#: Add source generator for properties and exports default valuesIgnacio Roldán Etcheverry
The editor no longer needs to create temporary instances to get the default values. The initializer values of the exported properties are still evaluated at runtime. For example, in the following example, `GetInitialValue()` will be called when first looks for default values: ``` [Export] int MyValue = GetInitialValue(); ``` Exporting fields with a non-supported type now results in a compiler error rather than a runtime error when the script is used.
2022-08-22C#/netcore: Add base desktop game export implementationIgnacio Roldán Etcheverry
This base implementation is still very barebones but it defines the path for how exporting will work (at least when embedding the .NET runtime). Many manual steps are still needed, which should be automatized in the future. For example, in addition to the API assemblies, now you also need to copy the GodotPlugins assembly to each game project.
2022-08-22C#: Code cleanup and greatly reduce use of C# pointersIgnacio Roldán Etcheverry