From ca2ebc3a39d210cb0a0e82b14342dde33b270398 Mon Sep 17 00:00:00 2001
From: "1992414357@qq.com" <1992414357@qq.com>
Date: Fri, 20 Jun 2025 02:42:54 +0800
Subject: Update Csharp Bindings
---
.../NoGamepads_CharpBindings/.run/Example.run.xml | 20 ------
.../.run/Generate Bindings.run.xml | 20 ++++++
.../.run/Generate Csharp Bindings.run.xml | 20 ------
.../.run/Run Example.run.xml | 20 ++++++
.../NoGamepads_Bindings/NoGamepads_Bindings.csproj | 1 +
.../NoGamepads_Bindings/Program.cs | 58 ++++++++++++++--
.../NoGamepads_Core/Data/Player.cs | 77 +++++++++++++++++++++-
.../NoGamepads_Example/Program.cs | 20 ++++--
8 files changed, 185 insertions(+), 51 deletions(-)
delete mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml
create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml
delete mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml
create mode 100644 core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml
(limited to 'core')
diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml
deleted file mode 100644
index 91f4cc3..0000000
--- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Example.run.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml
new file mode 100644
index 0000000..0e7c565
--- /dev/null
+++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Bindings.run.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml
deleted file mode 100644
index e70ca09..0000000
--- a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Generate Csharp Bindings.run.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml
new file mode 100644
index 0000000..792c169
--- /dev/null
+++ b/core/bindings/lang/csharp/NoGamepads_CharpBindings/.run/Run Example.run.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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 @@
+
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(),
+ (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
--
cgit