XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using Microsoft.UI.Xaml.Media;
using XFEEDToolBox.Controls;

namespace XFEEDToolBox;

public partial class App
{
    private static async Task<object> RunHologramDetailProbeAsync(string directory)
    {
        var home=new ShipModelView{Width=680,Height=400};
        var refit=new ShipModelView{Width=190,Height=140,ShowPedestal=false,HologramColor=Windows.UI.Color.FromArgb(255,255,128,0)};
        var title=new TextBlock{FontSize=22,Margin=new(18),Foreground=new SolidColorBrush(Windows.UI.Color.FromArgb(255,255,128,0))};
        var host=new Grid{Width=940,Height=480,Background=new SolidColorBrush(Windows.UI.Color.FromArgb(255,17,29,43))};
        host.ColumnDefinitions.Add(new(){Width=new(700)});host.ColumnDefinitions.Add(new(){Width=new(240)});
        host.RowDefinitions.Add(new(){Height=new(60)});host.RowDefinitions.Add(new(){Height=new(420)});
        Grid.SetColumnSpan(title,2);host.Children.Add(title);Grid.SetRow(home,1);host.Children.Add(home);
        Grid.SetRow(refit,1);Grid.SetColumn(refit,1);host.Children.Add(refit);MainWindow.Content=host;
        var results=new List<object>();
        try
        {
            foreach(var type in new[]{"anaconda","federation_corvette","cutter","sidewinder"})
            {
                await Task.WhenAll(home.StopAsync(),refit.StopAsync());home.ShipType=refit.ShipType=type;title.Text=Core.Localization.ChineseNames.Ship(type)+" · 主页 / 改装预览";
                var deadline=DateTime.UtcNow.AddSeconds(20);
                while((!home.IsRendering||home.Frames<2||!refit.IsRendering||refit.Frames<2)&&DateTime.UtcNow<deadline)await Task.Delay(50);
                if(!home.IsRendering||!refit.IsRendering||home.FeatureEdges!=refit.FeatureEdges)throw new InvalidOperationException("Both previews must share the same verified ship geometry.");
                var large=await home.CaptureFrameAtAsync(12);var small=await refit.CaptureFrameAtAsync(12);
                await SaveModelFrameAsync(large,Path.Combine(directory,type+"-home-gpu.png"));
                await SaveModelFrameAsync(small,Path.Combine(directory,type+"-refit-gpu.png"));
                using(var frozenHome=await home.FreezeForXamlProbeAsync(12))
                using(var frozenRefit=await refit.FreezeForXamlProbeAsync(12))
                    await CaptureRefinementElementAsync(host,Path.Combine(directory,type+"-previews.png"));
                results.Add(new{type,home.Triangles,home.FeatureEdges,home.ModelHash,home=MeasureHologramFrame(large),refit=MeasureHologramFrame(small),home.RenderError});
            }
        }
        finally{await Task.WhenAll(home.StopAsync(),refit.StopAsync());}
        return new{ships=results,fixedPoseSeconds=12,sharedGeometry=true,gameActionsInvoked=false};
    }
}