Add trainset parser

This commit is contained in:
2026-02-12 00:42:51 +01:00
parent a9c30bbdfe
commit 1f61b150d3
3 changed files with 120 additions and 44 deletions

View File

@@ -17,20 +17,17 @@
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<sukiUi:GroupBox Grid.RowSpan="2" Header="Scenerie">
<TreeView Name="sceneryList">
<TreeView Name="sceneryList" SelectionChanged="SceneryList_OnSelectionChanged">
</TreeView>
</sukiUi:GroupBox>
<sukiUi:GroupBox Grid.Column="1" Header="Pojazdy">
<ListBox>
<ListBoxItem>EP07P-2003</ListBoxItem>
<ListBoxItem>EP07-1049</ListBoxItem>
<ListBoxItem>EN57AKM-1562</ListBoxItem>
<ListBox Name="vehicleList" SelectionChanged="VehicleList_OnSelectionChanged">
</ListBox>
</sukiUi:GroupBox>
<sukiUi:GroupBox Grid.Column="1" Grid.Row="1" Header="Opis scenariusza">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock TextWrapping="Wrap">
<TextBlock TextWrapping="Wrap" Name="missionDescription">
Prowadzimy RegioExpress RPE23119 z Dębicy do Sandomierza. Misję rozpoczynamy w lokomotywowni w Dębicy. Jedziemy zgodnie ze wskazaniami tarcz manewrowych na bocznicę z drugiej strony stacji, gdzie przypinamy wagony do naszego składu, po czym wciągamy je w peron. Następnie jedziemy do Sandomierza, zatrzymując się po drodze tylko w Turowie. Po przyjeździe do Sandomierza odczepiamy lokomotywę i zjeżdżamy na tor postojowy, gdzie kończymy służbę. Czas misji: ok. 80 minut.
</TextBlock>
</ScrollViewer>
@@ -41,8 +38,7 @@
<ScrollViewer VerticalAlignment="Bottom"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled">
<StackPanel Orientation="Horizontal">
<Image Source="avares://StarterNG/Assets/Test/ep07p.bmp" Height="50"></Image>
<StackPanel Orientation="Horizontal" Name="consistStack">
</StackPanel>
</ScrollViewer>
</sukiUi:GroupBox>

View File

@@ -4,6 +4,7 @@ using System.Linq;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging;
using StarterNG.Classes;
namespace StarterNG.Views;
@@ -66,8 +67,72 @@ public partial class Scenarios : UserControl
Tag = i
});
}
}
private void SceneryList_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
var item = sceneryList.SelectedItem as TreeViewItem;
if (item?.Tag is not int tag)
return;
Scenery selectedScn = sceneries[tag];
vehicleList.Items.Clear();
// add all trainsets to list
for (int i = 0; i < selectedScn.Trainsets.Count; i++)
{
string trainsetName = string.Join(
" + ",
selectedScn.Trainsets[i].Vehicles.Select(dyn => dyn.Name)
);
if (string.IsNullOrWhiteSpace(trainsetName)) continue; // skip empty
vehicleList.Items.Add(new ListBoxItem
{
Content = trainsetName,
Tag = i
});
}
}
private void VehicleList_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
consistStack.Children.Clear();
// get selected scenery
var tItem = sceneryList.SelectedItem as TreeViewItem;
if (tItem?.Tag is not int tTag)
return;
Scenery selectedScn = sceneries[tTag];
// get selected trainset
ListBoxItem vItem = vehicleList.SelectedItem as ListBoxItem;
if (vItem?.Tag is not int vTag)
return;
Trainset selectedTrainset = selectedScn.Trainsets[vTag];
foreach (var train in selectedTrainset.Vehicles)
{
string path = Path.Combine(
"textures",
"mini",
train.SkinFile + ".bmp"
);
if (!File.Exists(path))
{
// fallback
continue;
}
var bitmap = new Bitmap(path);
var image = new Image
{
Source = bitmap,
Height = 45,
Stretch = Avalonia.Media.Stretch.Uniform,
Margin = new Thickness(0)
};
consistStack.Children.Add(image);
}
missionDescription.Text = selectedTrainset.Description;
}
}