using GFramework.Game.Abstractions.setting; using GFramework.Game.Abstractions.setting.data; using Godot; namespace GFramework.Godot.setting; /// /// Godot图形设置应用器 /// /// 设置模型接口 public class GodotGraphicsSettings(ISettingsModel model) : IResetApplyAbleSettings { /// /// 应用图形设置到Godot引擎 /// /// 异步任务 public async Task Apply() { var settings = model.GetData(); // 创建分辨率向量 var size = new Vector2I(settings.ResolutionWidth, settings.ResolutionHeight); // 设置窗口边框状态 DisplayServer.WindowSetFlag(DisplayServer.WindowFlags.Borderless, settings.Fullscreen); // 设置窗口模式(全屏或窗口化) DisplayServer.WindowSetMode( settings.Fullscreen ? DisplayServer.WindowMode.ExclusiveFullscreen : DisplayServer.WindowMode.Windowed ); // 非全屏模式下设置窗口大小和居中位置 if (!settings.Fullscreen) { DisplayServer.WindowSetSize(size); var screen = DisplayServer.GetPrimaryScreen(); var screenSize = DisplayServer.ScreenGetSize(screen); var pos = (screenSize - size) / 2; DisplayServer.WindowSetPosition(pos); } await Task.CompletedTask; } /// /// 重置图形设置 /// public void Reset() { model.GetData().Reset(); } public ISettingsData Data { get; } = model.GetData(); public Type DataType { get; } = typeof(GraphicsSettings); }