diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-06-20 02:42:54 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-06-20 02:42:54 +0800 |
| commit | ca2ebc3a39d210cb0a0e82b14342dde33b270398 (patch) | |
| tree | 878c56b2180723cc3079fec0d87a71c6efbfa40d /core | |
| parent | 873363a982d877c22179bfe668eb07ab435ec2a3 (diff) | |
Update Csharp Bindings
Diffstat (limited to 'core')
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml (renamed from core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml) | 2 | ||||
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml (renamed from core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml) | 2 | ||||
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj | 1 | ||||
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs | 58 | ||||
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs | 77 | ||||
| -rw-r--r-- | core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs | 20 |
6 files changed, 147 insertions, 13 deletions
diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml index e70ca09..0e7c565 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml @@ -1,5 +1,5 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="Generate Csharp Bindings" type="DotNetProject" factoryName=".NET Project" folderName="Generate"> + <configuration default="false" name="Generate Bindings" type="DotNetProject" factoryName=".NET Project" folderName="Run"> <option name="EXE_PATH" value="$PROJECT_DIR$/NoGamepads_Bindings/bin/Debug/net6.0/NoGamepads_Bindings.exe" /> <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/" /> diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml index 91f4cc3..792c169 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml @@ -1,5 +1,5 @@ <component name="ProjectRunConfigurationManager"> - <configuration default="false" name="Example" type="DotNetProject" factoryName=".NET Project" folderName="Run"> + <configuration default="false" name="Run Example" type="DotNetProject" factoryName=".NET Project" folderName="Run"> <option name="EXE_PATH" value="$PROJECT_DIR$/NoGamepads_Example/bin/Debug/net6.0/NoGamepads_Example.exe" /> <option name="PROGRAM_PARAMETERS" value="" /> <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../Working/" /> diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj index b12992a..aaec264 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/NoGamepads_Bindings.csproj @@ -15,6 +15,7 @@ </Content> <PackageReference Include="CppSharp" Version="1.1.5.3168" /> + <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" /> </ItemGroup> </Project> diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs index ebb5f76..f65f182 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Bindings/Program.cs @@ -1,16 +1,63 @@ using CppSharp; using CppSharp.AST; +using CppSharp.AST.Extensions; using CppSharp.Generators; -using CppSharp.Generators.AST; -using RecordArgABI = CppSharp.Parser.AST.RecordArgABI; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; namespace NoGamepads_Bindings; internal static class Program { - public static void Main(string[] args) + public static void Main() { ConsoleDriver.Run(new NoGamepadsLibrary()); + FixRefProperties(); + } + + private static void FixRefProperties() + { + var directory = "NoGamepads_Core/Generated"; + var files = Directory.GetFiles(directory, "*.cs", SearchOption.AllDirectories); + + foreach (var file in files) + { + var code = File.ReadAllText(file); + var tree = CSharpSyntaxTree.ParseText(code); + var root = tree.GetRoot(); + + var newRoot = root.ReplaceNodes( + root.DescendantNodes().OfType<PropertyDeclarationSyntax>(), + (prop, _) => + { + // internal ref FfiXXXUnion.__Internal __Instance => ref __instance; + if (prop.Identifier.Text != "__Instance") + return prop; + + if (prop.Type is RefTypeSyntax refType && + prop.ExpressionBody?.Expression is RefExpressionSyntax refExpr && + refType.Type.ToString().EndsWith(".__Internal", StringComparison.Ordinal) && + refExpr.Expression is IdentifierNameSyntax fieldRef && + fieldRef.Identifier.Text == "__instance") + { + var newType = refType.Type.WithTriviaFrom(refType); + var newExpr = fieldRef.WithTriviaFrom(refExpr); + + return prop + .WithType(newType) + .WithExpressionBody(SyntaxFactory.ArrowExpressionClause(newExpr)) + .WithSemicolonToken(prop.SemicolonToken); + } + + return prop; + }); + + if (!newRoot.IsEquivalentTo(root)) + { + File.WriteAllText(file, newRoot.ToFullString()); + } + } } } @@ -29,9 +76,10 @@ public class NoGamepadsLibrary : ILibrary options.OutputDir = "NoGamepads_Core/Generated"; options.GenerateClassTemplates = false; - var module = options.AddModule("NoGamepads.Native"); + var module = options.AddModule("nogamepads_c"); module.OutputNamespace = "NoGamepads_Sharp"; module.IncludeDirs.Add("NoGamepads_Bindings/Native"); module.Headers.Add("nogamepads_data.h"); } -}
\ No newline at end of file +} + diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs index a3c3ddd..ec8ebc6 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Core/Data/Player.cs @@ -4,9 +4,39 @@ namespace NoGamepads_Core.Data; public class Player { - private FfiPlayer _ffi = nogamepads_data.PlayerRegister("Fuck", "AAAAA"); + private readonly FfiPlayer _ffi; - public String name + public Player(string account, string password) + { + _ffi = nogamepads_data.PlayerRegister(account, password); + } + + public string NickName + { + get + { + unsafe + { + var get = _ffi.Customize; + return get == null ? "" : PtrStringConverter.ToString(get.Nickname); + } + } + + set => nogamepads_data.PlayerSetNickname(_ffi, value); + } + + public string Id + { + get + { + unsafe + { + return PtrStringConverter.ToString(_ffi.Account.Id); + } + } + } + + public string Hash { get { @@ -16,4 +46,47 @@ public class Player } } } + + public int Hue + { + get => GetHue(); + set => SetHsv(value, Value, Saturation); + } + + public float Value + { + get => GetValue(); + set => SetHsv(Hue, value, Saturation); + } + + public float Saturation + { + get => GetSaturation(); + set => SetHsv(Hue, Value, value); + } + + private void SetHsv(int h, float s, float v) + { + nogamepads_data.PlayerSetHsv(_ffi, h, s, v); + } + + private int GetHue() + { + return _ffi.Customize?.ColorHue ?? 0; + } + + private float GetValue() + { + return (float) (_ffi.Customize?.ColorValue ?? 1f); + } + + private float GetSaturation() + { + return (float) (_ffi.Customize?.ColorSaturation ?? 1f); + } + + public FfiPlayer GetRawPlayer() + { + return _ffi; + } }
\ No newline at end of file diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs index 6c450f9..c89a220 100644 --- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs +++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/NoGamepads_Example/Program.cs @@ -1,7 +1,19 @@ -// See https://aka.ms/new-console-template for more information +using NoGamepads_Core.Data; -using NoGamepads_Core.Data; +Player player = new Player("Pzw", "123456") +{ + NickName = "" +}; -Player player = new Player(); +Console.WriteLine("Player hash : " + player.Hash); +Console.WriteLine("Player name : " + player.NickName); -Console.WriteLine(player.name);
\ No newline at end of file +player.NickName = "OMG"; + +Console.WriteLine("Player name : " + player.NickName); + +player.Hue = 92; +player.Value = 1; +player.Saturation = 1; + +Console.WriteLine($"Color : H: {player.Hue}, S: {player.Saturation}, V: {player.Value}");
\ No newline at end of file |
