Merge mission and model selector

This commit is contained in:
Jarrod Doyle 2024-09-05 19:44:19 +01:00
parent 236cf3b317
commit 3e4230e46f
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
8 changed files with 40 additions and 248 deletions

View File

@ -54,8 +54,8 @@ public partial class Mission : Node3D
var lightmapToggler = GetNode<Control>("%LightmapToggler") as LightmapLayerToggler; var lightmapToggler = GetNode<Control>("%LightmapToggler") as LightmapLayerToggler;
lightmapToggler.Setup(this); lightmapToggler.Setup(this);
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector; var resourceSelector = GetNode<Control>("%ResourceSelector") as ResourceSelector;
missionSelector.MissionSelected += (string campaign, string mission) => resourceSelector.ResourceSelected += (string campaign, string mission) =>
{ {
_campaignName = campaign; _campaignName = campaign;
_missionName = mission; _missionName = mission;

View File

@ -7,8 +7,8 @@ public partial class Model : Node3D
{ {
public override void _Ready() public override void _Ready()
{ {
var modelSelector = GetNode<Control>("%ModelSelector") as ModelSelector; var resourceSelector = GetNode<Control>("%ResourceSelector") as ResourceSelector;
modelSelector.ModelSelected += BuildModel; resourceSelector.ResourceSelected += BuildModel;
} }
public void BuildModel(string campaignName, string modelPath) public void BuildModel(string campaignName, string modelPath)

View File

@ -1,104 +0,0 @@
using Godot;
using KeepersCompound.LGS;
namespace KeepersCompound.TMV.UI;
public partial class MissionSelector : Control
{
public event MissionSelectedEventHandler MissionSelected;
public delegate void MissionSelectedEventHandler(string campaign, string mission);
private FileDialog _FolderSelect;
private LineEdit _FolderPath;
private Button _BrowseButton;
private ItemList _Campaigns;
private ItemList _Missions;
private Button _LoadButton;
private Button _CancelButton;
public override void _Ready()
{
// TODO: Load initial folderpath from config and prefil everything
_FolderSelect = GetNode<FileDialog>("%FolderSelect");
_FolderPath = GetNode<LineEdit>("%FolderPath");
_BrowseButton = GetNode<Button>("%BrowseButton");
_Campaigns = GetNode<ItemList>("%Campaigns");
_Missions = GetNode<ItemList>("%Missions");
_LoadButton = GetNode<Button>("%LoadButton");
_CancelButton = GetNode<Button>("%CancelButton");
_BrowseButton.Pressed += () => _FolderSelect.Visible = true;
_FolderSelect.DirSelected += SetInstallPath;
_FolderPath.TextSubmitted += SetInstallPath;
_Missions.ItemSelected += (long _) => _LoadButton.Disabled = false;
_Campaigns.ItemSelected += BuildMissionList;
_LoadButton.Pressed += EmitLoadMission;
_CancelButton.Pressed += () => Visible = false;
}
public override void _Input(InputEvent @event)
{
if (@event is InputEventKey keyEvent && keyEvent.Pressed)
{
if (keyEvent.Keycode == Key.Escape)
{
Visible = !Visible;
}
}
}
private void SetInstallPath(string path)
{
_FolderPath.Text = path;
if (Context.Instance.PathManager.Init(path))
{
BuildCampaignList();
}
}
private void BuildCampaignList()
{
_Campaigns.Clear();
_Missions.Clear();
_LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager;
_Campaigns.AddItem("Original Missions");
foreach (var campaign in pathManager.GetCampaignNames())
{
_Campaigns.AddItem(campaign);
}
}
private void BuildMissionList(long idx)
{
_Missions.Clear();
_LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager;
var campaignName = idx == 0 ? null : _Campaigns.GetItemText((int)idx);
var missionNames = pathManager.GetResourceNames(ResourceType.Mission, campaignName);
foreach (var mission in missionNames)
{
_Missions.AddItem(mission);
}
}
private void EmitLoadMission()
{
var campaignIdxs = _Campaigns.GetSelectedItems();
var missionIdxs = _Missions.GetSelectedItems();
if (campaignIdxs.IsEmpty() || missionIdxs.IsEmpty())
{
return;
}
var campaignIdx = campaignIdxs[0];
var missionIdx = missionIdxs[0];
var campaignName = campaignIdx == 0 ? null : _Campaigns.GetItemText(campaignIdx);
var missionName = _Missions.GetItemText(missionIdx);
MissionSelected(campaignName, missionName);
Visible = false;
}
}

View File

@ -3,40 +3,40 @@ using KeepersCompound.LGS;
namespace KeepersCompound.TMV.UI; namespace KeepersCompound.TMV.UI;
public partial class ModelSelector : Control public partial class ResourceSelector : Control
{ {
public event ModelSelectedEventHandler ModelSelected; public event ResourceSelectedEventHandler ResourceSelected;
public delegate void ModelSelectedEventHandler(string campaign, string mission); public delegate void ResourceSelectedEventHandler(string campaign, string resource);
[Export]
public ResourceType ResType;
private FileDialog _FolderSelect; private FileDialog _FolderSelect;
private LineEdit _FolderPath; private LineEdit _FolderPath;
private Button _BrowseButton; private Button _BrowseButton;
private ItemList _Campaigns; private ItemList _Campaigns;
private ItemList _Models; private ItemList _Resources;
private Button _LoadButton; private Button _LoadButton;
private Button _CancelButton; private Button _CancelButton;
private string _extractedObjectsPath = ProjectSettings.GlobalizePath($"user://objects/tmp");
public override void _Ready() public override void _Ready()
{ {
// TODO: Load initial folderpath from config and prefil everything // TODO: Load initial folderpath from config and prefil everything
_FolderSelect = GetNode<FileDialog>("%FolderSelect"); _FolderSelect = GetNode<FileDialog>("%FolderSelect");
_FolderPath = GetNode<LineEdit>("%FolderPath"); _FolderPath = GetNode<LineEdit>("%FolderPath");
_BrowseButton = GetNode<Button>("%BrowseButton"); _BrowseButton = GetNode<Button>("%BrowseButton");
_Campaigns = GetNode<ItemList>("%Campaigns"); _Campaigns = GetNode<ItemList>("%Campaigns");
_Models = GetNode<ItemList>("%Models"); _Resources = GetNode<ItemList>("%Resources");
_LoadButton = GetNode<Button>("%LoadButton"); _LoadButton = GetNode<Button>("%LoadButton");
_CancelButton = GetNode<Button>("%CancelButton"); _CancelButton = GetNode<Button>("%CancelButton");
_BrowseButton.Pressed += () => _FolderSelect.Visible = true; _BrowseButton.Pressed += () => _FolderSelect.Visible = true;
_FolderSelect.DirSelected += SetInstallPath; _FolderSelect.DirSelected += SetInstallPath;
_FolderPath.TextSubmitted += SetInstallPath; _FolderPath.TextSubmitted += SetInstallPath;
_Campaigns.ItemSelected += BuildModelList; _Campaigns.ItemSelected += BuildResourceList;
_Models.ItemSelected += (long _) => _LoadButton.Disabled = false; _Resources.ItemSelected += (long _) => _LoadButton.Disabled = false;
_LoadButton.Pressed += EmitLoadModel; _LoadButton.Pressed += EmitResourceSelected;
_CancelButton.Pressed += () => Visible = false; _CancelButton.Pressed += () => Visible = false;
} }
@ -63,45 +63,45 @@ public partial class ModelSelector : Control
private void BuildCampaignList() private void BuildCampaignList()
{ {
_Campaigns.Clear(); _Campaigns.Clear();
_Models.Clear(); _Resources.Clear();
_LoadButton.Disabled = true; _LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager; var pathManager = Context.Instance.PathManager;
_Campaigns.AddItem("Original Missions"); _Campaigns.AddItem("Original");
foreach (var campaign in pathManager.GetCampaignNames()) foreach (var campaign in pathManager.GetCampaignNames())
{ {
_Campaigns.AddItem(campaign); _Campaigns.AddItem(campaign);
} }
} }
private void BuildModelList(long idx) private void BuildResourceList(long idx)
{ {
_Models.Clear(); _Resources.Clear();
_LoadButton.Disabled = true; _LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager; var pathManager = Context.Instance.PathManager;
var campaignName = idx == 0 ? null : _Campaigns.GetItemText((int)idx); var campaignName = idx == 0 ? null : _Campaigns.GetItemText((int)idx);
var modelNames = pathManager.GetResourceNames(ResourceType.Object, campaignName); var resourceNammes = pathManager.GetResourceNames(ResType, campaignName);
foreach (var model in modelNames) foreach (var resource in resourceNammes)
{ {
_Models.AddItem(model); _Resources.AddItem(resource);
} }
} }
private void EmitLoadModel() private void EmitResourceSelected()
{ {
var campaignIdxs = _Campaigns.GetSelectedItems(); var campaignIdxs = _Campaigns.GetSelectedItems();
var modelIdxs = _Models.GetSelectedItems(); var resourceIdxs = _Resources.GetSelectedItems();
if (campaignIdxs.IsEmpty() || modelIdxs.IsEmpty()) if (campaignIdxs.IsEmpty() || resourceIdxs.IsEmpty())
{ {
return; return;
} }
var campaignIdx = campaignIdxs[0]; var campaignIdx = campaignIdxs[0];
var modelIdx = modelIdxs[0]; var resourceIdx = resourceIdxs[0];
var campaignName = campaignIdx == 0 ? null : _Campaigns.GetItemText(campaignIdx); var campaignName = campaignIdx == 0 ? null : _Campaigns.GetItemText(campaignIdx);
var modelName = _Models.GetItemText(modelIdx); var resourceName = _Resources.GetItemText(resourceIdx);
ModelSelected(campaignName, modelName); ResourceSelected(campaignName, resourceName);
Visible = false; Visible = false;
} }

View File

@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://project/code/TMV/Mission.cs" id="1_3gnqe"] [ext_resource type="Script" path="res://project/code/TMV/Mission.cs" id="1_3gnqe"]
[ext_resource type="Script" path="res://project/code/camera.gd" id="2_w5otl"] [ext_resource type="Script" path="res://project/code/camera.gd" id="2_w5otl"]
[ext_resource type="PackedScene" uid="uid://cekg1xb5f0ux1" path="res://project/scenes/ui/mission_selector.tscn" id="3_hwfcj"] [ext_resource type="PackedScene" uid="uid://bfxdpxkcgwlkx" path="res://project/scenes/ui/resource_selector.tscn" id="3_kdn7u"]
[ext_resource type="PackedScene" uid="uid://0h2w7w84vbea" path="res://project/scenes/ui/lightmap_layer_toggler.tscn" id="4_naip8"] [ext_resource type="PackedScene" uid="uid://0h2w7w84vbea" path="res://project/scenes/ui/lightmap_layer_toggler.tscn" id="4_naip8"]
[sub_resource type="Environment" id="Environment_cckyk"] [sub_resource type="Environment" id="Environment_cckyk"]
@ -21,7 +21,7 @@ script = ExtResource("2_w5otl")
[node name="UI" type="CanvasLayer" parent="."] [node name="UI" type="CanvasLayer" parent="."]
[node name="MissionSelector" parent="UI" instance=ExtResource("3_hwfcj")] [node name="ResourceSelector" parent="UI" instance=ExtResource("3_kdn7u")]
unique_name_in_owner = true unique_name_in_owner = true
[node name="LightmapToggler" parent="UI" instance=ExtResource("4_naip8")] [node name="LightmapToggler" parent="UI" instance=ExtResource("4_naip8")]

View File

@ -2,7 +2,7 @@
[ext_resource type="Script" path="res://project/code/TMV/Model.cs" id="1_dax7s"] [ext_resource type="Script" path="res://project/code/TMV/Model.cs" id="1_dax7s"]
[ext_resource type="Script" path="res://project/code/camera.gd" id="2_ov7rc"] [ext_resource type="Script" path="res://project/code/camera.gd" id="2_ov7rc"]
[ext_resource type="PackedScene" uid="uid://c366p056f8dlu" path="res://project/scenes/ui/model_selector.tscn" id="3_ovrmo"] [ext_resource type="PackedScene" uid="uid://bfxdpxkcgwlkx" path="res://project/scenes/ui/resource_selector.tscn" id="3_yp5sl"]
[sub_resource type="Environment" id="Environment_e4172"] [sub_resource type="Environment" id="Environment_e4172"]
ambient_light_source = 2 ambient_light_source = 2
@ -17,8 +17,9 @@ script = ExtResource("1_dax7s")
[node name="UI" type="CanvasLayer" parent="."] [node name="UI" type="CanvasLayer" parent="."]
[node name="ModelSelector" parent="UI" instance=ExtResource("3_ovrmo")] [node name="ResourceSelector" parent="UI" instance=ExtResource("3_yp5sl")]
unique_name_in_owner = true unique_name_in_owner = true
ResType = 1
[node name="Environment" type="Node3D" parent="."] [node name="Environment" type="Node3D" parent="."]

View File

@ -1,105 +0,0 @@
[gd_scene load_steps=3 format=3 uid="uid://c366p056f8dlu"]
[ext_resource type="Script" path="res://project/code/TMV/UI/ModelSelector.cs" id="1_oy1sl"]
[sub_resource type="LabelSettings" id="LabelSettings_4v24o"]
font_size = 20
[node name="ModelSelector" type="Control"]
layout_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_oy1sl")
[node name="FolderSelect" type="FileDialog" parent="."]
unique_name_in_owner = true
title = "Open a Directory"
initial_position = 2
size = Vector2i(636, 175)
ok_button_text = "Select Current Folder"
file_mode = 2
access = 2
use_native_dialog = true
[node name="PanelContainer" type="PanelContainer" parent="."]
custom_minimum_size = Vector2(640, 0)
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -144.0
offset_top = -37.0
offset_right = 144.0
offset_bottom = 37.0
grow_horizontal = 2
grow_vertical = 2
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"]
layout_mode = 2
theme_override_constants/margin_left = 8
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 8
theme_override_constants/margin_bottom = 8
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"]
layout_mode = 2
[node name="Title" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Model Selector"
label_settings = SubResource("LabelSettings_4v24o")
horizontal_alignment = 1
[node name="FolderSelect" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/FolderSelect"]
layout_mode = 2
text = "Folder"
[node name="FolderPath" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/FolderSelect"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="BrowseButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/FolderSelect"]
unique_name_in_owner = true
layout_mode = 2
text = "Browse"
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Campaigns" type="ItemList" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 480)
layout_mode = 2
size_flags_horizontal = 3
[node name="Models" type="ItemList" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 480)
layout_mode = 2
size_flags_horizontal = 3
[node name="Buttons" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 8
[node name="LoadButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/Buttons"]
unique_name_in_owner = true
layout_mode = 2
disabled = true
text = "Load"
[node name="CancelButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/Buttons"]
unique_name_in_owner = true
layout_mode = 2
text = "Cancel"

View File

@ -1,11 +1,11 @@
[gd_scene load_steps=3 format=3 uid="uid://cekg1xb5f0ux1"] [gd_scene load_steps=3 format=3 uid="uid://bfxdpxkcgwlkx"]
[ext_resource type="Script" path="res://project/code/TMV/UI/MissionSelector.cs" id="1_kl8qm"] [ext_resource type="Script" path="res://project/code/TMV/UI/ResourceSelector.cs" id="1_4lx6q"]
[sub_resource type="LabelSettings" id="LabelSettings_4v24o"] [sub_resource type="LabelSettings" id="LabelSettings_4v24o"]
font_size = 20 font_size = 20
[node name="MissionSelector" type="Control"] [node name="ResourceSelector" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 8 anchors_preset = 8
anchor_left = 0.5 anchor_left = 0.5
@ -14,13 +14,13 @@ anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_kl8qm") script = ExtResource("1_4lx6q")
[node name="FolderSelect" type="FileDialog" parent="."] [node name="FolderSelect" type="FileDialog" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
title = "Open a Directory" title = "Open a Directory"
initial_position = 2 initial_position = 2
size = Vector2i(636, 175) size = Vector2i(636, 180)
ok_button_text = "Select Current Folder" ok_button_text = "Select Current Folder"
file_mode = 2 file_mode = 2
access = 2 access = 2
@ -53,7 +53,7 @@ layout_mode = 2
[node name="Title" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] [node name="Title" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Mission Selector" text = "Resource Selector"
label_settings = SubResource("LabelSettings_4v24o") label_settings = SubResource("LabelSettings_4v24o")
horizontal_alignment = 1 horizontal_alignment = 1
@ -83,7 +83,7 @@ custom_minimum_size = Vector2(0, 480)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="Missions" type="ItemList" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"] [node name="Resources" type="ItemList" parent="PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(0, 480) custom_minimum_size = Vector2(0, 480)
layout_mode = 2 layout_mode = 2