Research tree parsing and view

This commit is contained in:
bird_egop
2026-02-15 23:44:20 +03:00
parent a8536f938d
commit 8091a727ba
17 changed files with 537 additions and 333 deletions
+1
View File
@@ -61,6 +61,7 @@ public class App
serviceCollection.AddSingleton(new VarsetViewModel());
serviceCollection.AddSingleton(new CpDatSchemeViewModel());
serviceCollection.AddSingleton(new MaterialViewModel());
serviceCollection.AddSingleton(new ResearchTreeViewModel());
var serviceProvider = serviceCollection.BuildServiceProvider();
+17
View File
@@ -7,6 +7,7 @@ using NativeFileDialogSharp;
using NResLib;
using NResUI.Abstractions;
using NResUI.Models;
using ResTreeLib;
using ScrLib;
using TexmLib;
using VarsetLib;
@@ -20,6 +21,7 @@ namespace NResUI.ImGuiUI
MissionTmaViewModel missionTmaViewModel,
VarsetViewModel varsetViewModel,
CpDatSchemeViewModel cpDatSchemeViewModel,
ResearchTreeViewModel researchTreeViewModel,
MessageBoxModalPanel messageBox)
: IImGuiPanel
{
@@ -138,6 +140,21 @@ namespace NResUI.ImGuiUI
}
}
if (ImGui.MenuItem("Open research .trf File"))
{
var result = Dialog.FileOpen("trf");
if (result.IsOk)
{
var path = result.Path;
var parseResult = ResTreeParser.Parse(path);
researchTreeViewModel.SetParseResult(parseResult, path);
Console.WriteLine("Read .trf");
}
}
if (nResExplorerViewModel.HasFile)
{
if (ImGui.MenuItem("Экспортировать NRes"))
+101
View File
@@ -0,0 +1,101 @@
using ImGuiNET;
using NResUI.Abstractions;
using NResUI.Models;
namespace NResUI.ImGuiUI;
public class ResearchTreeExplorer : IImGuiPanel
{
private readonly ResearchTreeViewModel _viewModel;
public ResearchTreeExplorer(ResearchTreeViewModel viewModel)
{
_viewModel = viewModel;
}
public void OnImGuiRender()
{
if (ImGui.Begin("Research Tree Explorer (trf)"))
{
ImGui.Text("trf - это файл дерева исследований. Их можно найти в папке MISSIONS/SCRIPTS");
ImGui.Separator();
var nodes = _viewModel.ResearchNodeDatas;
if (_viewModel.HasFile && nodes is not null)
{
if (ImGui.TreeNodeEx("Узлы"))
{
for (var i = 0; i < nodes.Count; i++)
{
var node = nodes[i];
if (ImGui.TreeNodeEx($"{i} - \"{node.LongName}\" (\"{node.ShortName}\")"))
{
ImGui.Text("Состояние: ");
ImGui.SameLine();
ImGui.Text(node.State.ToString("G"));
ImGui.Text("ShortName: ");
ImGui.SameLine();
ImGui.Text(node.ShortName);
ImGui.Text("LongName: ");
ImGui.SameLine();
ImGui.Text(node.LongName);
ImGui.Text("HelpText: ");
ImGui.SameLine();
ImGui.Text(node.HelpText);
ImGui.Text("Description: ");
ImGui.SameLine();
ImGui.Text(node.Description);
ImGui.Text("Тип турели: ");
ImGui.SameLine();
ImGui.Text(node.Node.TurretType.ToString());
ImGui.Text("Основной тип: ");
ImGui.SameLine();
ImGui.Text(node.Node.MainType.ToString());
ImGui.Text("Подтип: ");
ImGui.SameLine();
ImGui.Text(node.Node.SubType.ToString());
ImGui.Text("Подтип строения: ");
ImGui.SameLine();
ImGui.Text(node.Node.BuildSubSystem.ToString());
ImGui.Text("Размер типа: ");
ImGui.SameLine();
ImGui.Text(node.Node.SizeOfType.ToString());
ImGui.Text("Уровень апгрейда: ");
ImGui.SameLine();
ImGui.Text(node.Node.UpgradeLevel.ToString());
ImGui.Text("Условия: ");
ImGui.SameLine();
ImGui.Text(string.Join(", ", node.PrerequisiteIds));
ImGui.Text("Открывает: ");
ImGui.SameLine();
ImGui.Text(string.Join(", ", node.UnlockIds));
ImGui.TreePop();
}
}
ImGui.TreePop();
}
}
else
{
ImGui.Text("trf не открыт");
}
ImGui.End();
}
}
}
+20
View File
@@ -0,0 +1,20 @@
using ResTreeLib;
namespace NResUI.Models;
public class ResearchTreeViewModel
{
public bool HasFile { get; set; }
public string? Error { get; set; }
public List<ResearchNodeData>? ResearchNodeDatas { get; set; }
public string? Path { get; set; }
public void SetParseResult(List<ResearchNodeData> researchNodeDatas, string path)
{
ResearchNodeDatas = researchNodeDatas;
HasFile = true;
Path = path;
}
}
+1
View File
@@ -20,6 +20,7 @@
<ProjectReference Include="..\CpDatLib\CpDatLib.csproj" />
<ProjectReference Include="..\MissionTmaLib\MissionTmaLib.csproj" />
<ProjectReference Include="..\NResLib\NResLib.csproj" />
<ProjectReference Include="..\ResTreeLib\ResTreeLib.csproj" />
<ProjectReference Include="..\ScrLib\ScrLib.csproj" />
<ProjectReference Include="..\TexmLib\TexmLib.csproj" />
<ProjectReference Include="..\VarsetLib\VarsetLib.csproj" />