2023-06-19 00:41:44 +08:00
|
|
|
using System.Threading;
|
2023-09-15 23:02:46 +08:00
|
|
|
using Cysharp.Threading.Tasks;
|
2023-06-12 15:51:41 +08:00
|
|
|
using Godot;
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
using HttpClient = System.Net.Http.HttpClient;
|
|
|
|
|
|
|
|
namespace BITKit;
|
|
|
|
/// <summary>
|
|
|
|
/// 为Godot提供的BITApp加载服务
|
|
|
|
/// </summary>
|
|
|
|
public partial class BITAppForGodot : Node
|
|
|
|
{
|
2023-06-15 21:52:13 +08:00
|
|
|
public static readonly ValidHandle AllowCursor = new();
|
2024-04-16 04:15:21 +08:00
|
|
|
public static readonly ValidHandle AllowCursorExclusive = new();
|
2023-06-29 01:01:52 +08:00
|
|
|
public static float DeltaTime { get; private set; }
|
2023-07-17 04:10:14 +08:00
|
|
|
public static BITAppForGodot Singleton { get; private set; }
|
2023-07-08 00:02:32 +08:00
|
|
|
|
2023-06-12 15:51:41 +08:00
|
|
|
/// <summary>
|
|
|
|
/// 在构造函数中注册Logger
|
|
|
|
/// </summary>
|
|
|
|
public BITAppForGodot()
|
|
|
|
{
|
|
|
|
BIT4Log.OnLog += GD.Print;
|
|
|
|
BIT4Log.OnWarning += GD.PushWarning;
|
|
|
|
BIT4Log.OnNextLine += () => GD.Print();
|
|
|
|
BIT4Log.OnException += x=>GD.PrintErr(x.ToString());
|
2023-06-15 21:52:13 +08:00
|
|
|
|
2023-06-12 15:51:41 +08:00
|
|
|
//启动BITApp
|
2023-09-15 23:02:46 +08:00
|
|
|
BITApp.Start(ProjectSettings.GetSetting("application/config/name").AsString()).Forget();
|
2023-06-12 15:51:41 +08:00
|
|
|
BIT4Log.Log<BITAppForGodot>("已创建BITApp");
|
|
|
|
}
|
|
|
|
|
2023-06-13 14:43:03 +08:00
|
|
|
public override void _Ready()
|
2023-06-12 15:51:41 +08:00
|
|
|
{
|
2023-07-17 04:10:14 +08:00
|
|
|
Singleton = this;
|
|
|
|
|
2023-06-12 15:51:41 +08:00
|
|
|
BIT4Log.Log<BITAppForGodot>("正在创建BITWebApp");
|
|
|
|
|
|
|
|
//添加测试用HttpClient
|
2023-06-13 14:43:03 +08:00
|
|
|
BITApp.ServiceCollection.AddSingleton<HttpClient>();
|
2023-09-15 23:02:46 +08:00
|
|
|
BITApp.ServiceCollection.AddLogging();
|
2023-06-12 15:51:41 +08:00
|
|
|
|
|
|
|
//构造依赖服务提供接口
|
2023-09-15 23:02:46 +08:00
|
|
|
//BITApp.BuildService();
|
2023-06-15 21:52:13 +08:00
|
|
|
|
|
|
|
//设置光标状态
|
|
|
|
AllowCursor.AddListener(SetCursor);
|
|
|
|
AllowCursor.AddElement(this);
|
|
|
|
// AllowCursor.AddElement(this);
|
|
|
|
// Input.MouseMode = Input.MouseModeEnum.Hidden;
|
|
|
|
// DisplayServer.MouseSetMode(DisplayServer.MouseMode.Hidden);
|
2023-06-12 15:51:41 +08:00
|
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
|
|
{
|
|
|
|
//停止BITApp
|
|
|
|
BITApp.Stop();
|
|
|
|
BIT4Log.Log<BITAppForGodot>("已安全退出App");
|
|
|
|
}
|
2023-06-15 21:52:13 +08:00
|
|
|
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;
|
|
|
|
}
|
2023-06-29 01:01:52 +08:00
|
|
|
|
|
|
|
public override void _Process(double delta)
|
|
|
|
{
|
|
|
|
DeltaTime =(float) delta;
|
2023-11-30 00:27:34 +08:00
|
|
|
|
|
|
|
// var scale = DisplayServer.WindowGetSize().X / 1920f;
|
|
|
|
// //GetViewport().Scaling3DScale = scale;
|
|
|
|
//
|
|
|
|
// //ProjectSettings.SetSetting("display/window/stretch/scale", scale);
|
2023-06-29 01:01:52 +08:00
|
|
|
}
|
2023-06-12 15:51:41 +08:00
|
|
|
}
|