0
mirror of https://github.com/sampletext32/ParkanPlayground.git synced 2025-05-18 11:21:18 +03:00
ParkanPlayground/NResUI/ImGuiUI/MissionTmaExplorer.cs

218 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ImGuiNET;
using MissionTmaLib;
using NResUI.Abstractions;
using NResUI.Models;
namespace NResUI.ImGuiUI;
public class MissionTmaExplorer : IImGuiPanel
{
private readonly MissionTmaViewModel _viewModel;
public MissionTmaExplorer(MissionTmaViewModel viewModel)
{
_viewModel = viewModel;
}
public void OnImGuiRender()
{
if (ImGui.Begin("Mission TMA Explorer"))
{
var mission = _viewModel.Mission;
if (_viewModel.HasFile && mission is not null)
{
ImGui.Text("Путь к файлу: ");
ImGui.SameLine();
ImGui.Text(_viewModel.Path);
if (ImGui.TreeNodeEx("Ареалы"))
{
var (unusedHeader, arealCount, arealInfos) = mission.ArealData;
ImGui.Text("Неиспользуемый заголовок: ");
ImGui.SameLine();
ImGui.Text(unusedHeader.ToString());
ImGui.Text("Количество ареалов: ");
ImGui.SameLine();
ImGui.Text(arealCount.ToString());
if (ImGui.TreeNodeEx("Информация об ареалах"))
{
for (var i = 0; i < arealInfos.Count; i++)
{
var arealInfo = arealInfos[i];
if (ImGui.TreeNodeEx($"Ареал {i}"))
{
Utils.ShowHint("Кажется, что ареал это просто некая зона на карте");
ImGui.Text("Индекс: ");
ImGui.SameLine();
ImGui.Text(arealInfo.Index.ToString());
ImGui.Text("Количество координат: ");
ImGui.SameLine();
ImGui.Text(arealInfo.CoordsCount.ToString());
if (ImGui.BeginTable("Координаты", 3, ImGuiTableFlags.Borders | ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.NoHostExtendX))
{
ImGui.TableSetupColumn("X");
ImGui.TableSetupColumn("Y");
ImGui.TableSetupColumn("Z");
ImGui.TableHeadersRow();
for (int k = 0; k < arealInfo.Coords.Count; k++)
{
ImGui.TableNextRow();
ImGui.TableNextColumn();
ImGui.Text(arealInfo.Coords[k].X.ToString("F2"));
ImGui.TableNextColumn();
ImGui.Text(arealInfo.Coords[k].Y.ToString("F2"));
ImGui.TableNextColumn();
ImGui.Text(arealInfo.Coords[k].Z.ToString("F2"));
}
ImGui.EndTable();
}
ImGui.TreePop();
}
}
ImGui.TreePop();
}
ImGui.TreePop();
}
if (ImGui.TreeNodeEx("Кланы"))
{
var (clanFeatureSet, clanCount, clanInfos) = mission.ClansData;
ImGui.Text("Фиче-сет: ");
Utils.ShowHint("Магическое число из файла, на основе которого игра читает разные секции о клане");
ImGui.SameLine();
ImGui.Text(clanFeatureSet.ToString());
ImGui.Text("Количество кланов: ");
ImGui.SameLine();
ImGui.Text(clanCount.ToString());
if (ImGui.TreeNodeEx("Информация о кланах"))
{
for (var i = 0; i < clanInfos.Count; i++)
{
var clanInfo = clanInfos[i];
if (ImGui.TreeNodeEx($"Клан {i} - \"{clanInfo.ClanName}\""))
{
ImGui.Text("Неизвестное число 1: ");
ImGui.SameLine();
ImGui.Text(clanInfo.UnkInt1.ToString());
ImGui.Text("X: ");
ImGui.SameLine();
ImGui.Text(clanInfo.X.ToString());
ImGui.SameLine();
ImGui.Text(" Y: ");
ImGui.SameLine();
ImGui.Text(clanInfo.Y.ToString());
ImGui.Text("Тип клана: ");
ImGui.SameLine();
ImGui.Text(clanInfo.ClanType.ToReadableString());
ImGui.Text("Неизвестная строка 1: ");
Utils.ShowHint("Кажется это путь к файлу поведения (Behavior), но пока не понятно. Обычно пути соответствуют 2 файла.");
ImGui.SameLine();
ImGui.Text(clanInfo.UnkString2);
if (clanInfo.UnknownParts.Count > 0)
{
ImGui.Text("Неизвестная часть");
if (ImGui.BeginTable("Неизвестная часть##unk1", 6, ImGuiTableFlags.Borders | ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.NoHostExtendX))
{
ImGui.TableSetupColumn("Число 1");
ImGui.TableSetupColumn("X");
ImGui.TableSetupColumn("Y");
ImGui.TableSetupColumn("Z");
ImGui.TableSetupColumn("Число 2");
ImGui.TableSetupColumn("Число 3");
ImGui.TableHeadersRow();
for (var i1 = 0; i1 < clanInfo.UnknownParts.Count; i1++)
{
var unkPart = clanInfo.UnknownParts[i1];
ImGui.TableNextRow();
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkInt1.ToString());
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkVector.X.ToString());
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkVector.Y.ToString());
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkVector.Z.ToString());
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkInt2.ToString());
ImGui.TableNextColumn();
ImGui.Text(unkPart.UnkInt3.ToString());
}
ImGui.EndTable();
}
}
else
{
ImGui.Text("Отсутствует неизвестная часть");
}
ImGui.Text("Путь к файлу .trf: ");
Utils.ShowHint("Не до конца понятно, что означает, вероятно это NRes с деревом исследований");
ImGui.SameLine();
ImGui.Text(clanInfo.ResearchNResPath);
ImGui.Text("Неизвестное число 3: ");
ImGui.SameLine();
ImGui.Text(clanInfo.UnkInt3.ToString());
ImGui.Text("Матрица союзников");
Utils.ShowHint("Если 1, то кланы - союзники, и не нападают друг на друга");
if (ImGui.BeginTable("Матрица союзников", 2, ImGuiTableFlags.Borders | ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.NoHostExtendX))
{
ImGui.TableSetupColumn("Клан");
ImGui.TableSetupColumn("Союзник?");
ImGui.TableHeadersRow();
foreach (var alliesMapKey in clanInfo.AlliesMap.Keys)
{
ImGui.TableNextRow();
ImGui.TableNextColumn();
ImGui.Text(alliesMapKey);
ImGui.TableNextColumn();
ImGui.Text(clanInfo.AlliesMap[alliesMapKey].ToString());
}
ImGui.EndTable();
}
ImGui.TreePop();
}
}
ImGui.TreePop();
}
ImGui.TreePop();
}
if (ImGui.TreeNodeEx("Объекты"))
{
ImGui.TreePop();
}
}
else
{
ImGui.Text("Миссия не открыта");
}
ImGui.End();
}
}
}