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;
lightmapToggler.Setup(this);
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector;
missionSelector.MissionSelected += (string campaign, string mission) =>
var resourceSelector = GetNode<Control>("%ResourceSelector") as ResourceSelector;
resourceSelector.ResourceSelected += (string campaign, string mission) =>
{
_campaignName = campaign;
_missionName = mission;

View File

@ -7,8 +7,8 @@ public partial class Model : Node3D
{
public override void _Ready()
{
var modelSelector = GetNode<Control>("%ModelSelector") as ModelSelector;
modelSelector.ModelSelected += BuildModel;
var resourceSelector = GetNode<Control>("%ResourceSelector") as ResourceSelector;
resourceSelector.ResourceSelected += BuildModel;
}
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;
public partial class ModelSelector : Control
public partial class ResourceSelector : Control
{
public event ModelSelectedEventHandler ModelSelected;
public delegate void ModelSelectedEventHandler(string campaign, string mission);
public event ResourceSelectedEventHandler ResourceSelected;
public delegate void ResourceSelectedEventHandler(string campaign, string resource);
[Export]
public ResourceType ResType;
private FileDialog _FolderSelect;
private LineEdit _FolderPath;
private Button _BrowseButton;
private ItemList _Campaigns;
private ItemList _Models;
private ItemList _Resources;
private Button _LoadButton;
private Button _CancelButton;
private string _extractedObjectsPath = ProjectSettings.GlobalizePath($"user://objects/tmp");
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");
_Models = GetNode<ItemList>("%Models");
_Resources = GetNode<ItemList>("%Resources");
_LoadButton = GetNode<Button>("%LoadButton");
_CancelButton = GetNode<Button>("%CancelButton");
_BrowseButton.Pressed += () => _FolderSelect.Visible = true;
_FolderSelect.DirSelected += SetInstallPath;
_FolderPath.TextSubmitted += SetInstallPath;
_Campaigns.ItemSelected += BuildModelList;
_Models.ItemSelected += (long _) => _LoadButton.Disabled = false;
_LoadButton.Pressed += EmitLoadModel;
_Campaigns.ItemSelected += BuildResourceList;
_Resources.ItemSelected += (long _) => _LoadButton.Disabled = false;
_LoadButton.Pressed += EmitResourceSelected;
_CancelButton.Pressed += () => Visible = false;
}
@ -63,45 +63,45 @@ public partial class ModelSelector : Control
private void BuildCampaignList()
{
_Campaigns.Clear();
_Models.Clear();
_Resources.Clear();
_LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager;
_Campaigns.AddItem("Original Missions");
_Campaigns.AddItem("Original");
foreach (var campaign in pathManager.GetCampaignNames())
{
_Campaigns.AddItem(campaign);
}
}
private void BuildModelList(long idx)
private void BuildResourceList(long idx)
{
_Models.Clear();
_Resources.Clear();
_LoadButton.Disabled = true;
var pathManager = Context.Instance.PathManager;
var campaignName = idx == 0 ? null : _Campaigns.GetItemText((int)idx);
var modelNames = pathManager.GetResourceNames(ResourceType.Object, campaignName);
foreach (var model in modelNames)
var resourceNammes = pathManager.GetResourceNames(ResType, campaignName);
foreach (var resource in resourceNammes)
{
_Models.AddItem(model);
_Resources.AddItem(resource);
}
}
private void EmitLoadModel()
private void EmitResourceSelected()
{
var campaignIdxs = _Campaigns.GetSelectedItems();
var modelIdxs = _Models.GetSelectedItems();
if (campaignIdxs.IsEmpty() || modelIdxs.IsEmpty())
var resourceIdxs = _Resources.GetSelectedItems();
if (campaignIdxs.IsEmpty() || resourceIdxs.IsEmpty())
{
return;
}
var campaignIdx = campaignIdxs[0];
var modelIdx = modelIdxs[0];
var resourceIdx = resourceIdxs[0];
var campaignName = campaignIdx == 0 ? null : _Campaigns.GetItemText(campaignIdx);
var modelName = _Models.GetItemText(modelIdx);
ModelSelected(campaignName, modelName);
var resourceName = _Resources.GetItemText(resourceIdx);
ResourceSelected(campaignName, resourceName);
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/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"]
[sub_resource type="Environment" id="Environment_cckyk"]
@ -21,7 +21,7 @@ script = ExtResource("2_w5otl")
[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
[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/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"]
ambient_light_source = 2
@ -17,8 +17,9 @@ script = ExtResource("1_dax7s")
[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
ResType = 1
[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"]
font_size = 20
[node name="MissionSelector" type="Control"]
[node name="ResourceSelector" type="Control"]
layout_mode = 3
anchors_preset = 8
anchor_left = 0.5
@ -14,13 +14,13 @@ anchor_right = 0.5
anchor_bottom = 0.5
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_kl8qm")
script = ExtResource("1_4lx6q")
[node name="FolderSelect" type="FileDialog" parent="."]
unique_name_in_owner = true
title = "Open a Directory"
initial_position = 2
size = Vector2i(636, 175)
size = Vector2i(636, 180)
ok_button_text = "Select Current Folder"
file_mode = 2
access = 2
@ -53,7 +53,7 @@ layout_mode = 2
[node name="Title" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Mission Selector"
text = "Resource Selector"
label_settings = SubResource("LabelSettings_4v24o")
horizontal_alignment = 1
@ -83,7 +83,7 @@ custom_minimum_size = Vector2(0, 480)
layout_mode = 2
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
custom_minimum_size = Vector2(0, 480)
layout_mode = 2