using System.Threading; using Cysharp.Threading.Tasks; using Godot; using Microsoft.Extensions.DependencyInjection; using HttpClient = System.Net.Http.HttpClient; namespace BITKit; /// /// 为Godot提供的BITApp加载服务 /// public partial class BITAppForGodot : Node { public static readonly ValidHandle AllowCursor = new(); public static float DeltaTime { get; private set; } public static BITAppForGodot Singleton { get; private set; } /// /// 在构造函数中注册Logger /// public BITAppForGodot() { BIT4Log.OnLog += GD.Print; BIT4Log.OnWarning += GD.PushWarning; BIT4Log.OnNextLine += () => GD.Print(); BIT4Log.OnException += x=>GD.PrintErr(x.ToString()); //启动BITApp BITApp.Start(ProjectSettings.GetSetting("application/config/name").AsString()).Forget(); BIT4Log.Log("已创建BITApp"); } public override void _Ready() { Singleton = this; BIT4Log.Log("正在创建BITWebApp"); //添加测试用HttpClient BITApp.ServiceCollection.AddSingleton(); BITApp.ServiceCollection.AddLogging(); //构造依赖服务提供接口 //BITApp.BuildService(); //设置光标状态 AllowCursor.AddListener(SetCursor); AllowCursor.AddElement(this); // AllowCursor.AddElement(this); // Input.MouseMode = Input.MouseModeEnum.Hidden; // DisplayServer.MouseSetMode(DisplayServer.MouseMode.Hidden); } protected override void Dispose(bool disposing) { //停止BITApp BITApp.Stop(); BIT4Log.Log("已安全退出App"); } private void Exit() { GetTree().Quit(); } private void WindowSetMaxSize() { var max = DisplayServer.WindowGetMaxSize(); //DisplayServer.WindowSetMaxSize(max); var nextMode = DisplayServer.WindowGetMode() switch { DisplayServer.WindowMode.Fullscreen=>DisplayServer.WindowMode.Windowed, DisplayServer.WindowMode.Windowed=>DisplayServer.WindowMode.Fullscreen, _ => DisplayServer.WindowMode.Fullscreen, }; DisplayServer.WindowSetMode(nextMode); } private void WindowSetMinSize() { DisplayServer.WindowSetMode(DisplayServer.WindowMode.Minimized); } private static void SetCursor(bool allow) { Input.MouseMode = allow ? Input.MouseModeEnum.Visible : Input.MouseModeEnum.Captured; } public override void _Process(double delta) { DeltaTime =(float) delta; } }