Skip to content

Commit bc50dcd

Browse files
committed
list view for triggers
1 parent 1c26ca8 commit bc50dcd

File tree

3 files changed

+61
-27
lines changed

3 files changed

+61
-27
lines changed

FF4/WorldMapTrigger.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class WorldMapEvent : WorldMapTrigger
7373
{
7474
public WorldMapEvent(byte[] bytes) : base(bytes) {}
7575

76-
public byte EventCode
76+
public byte EventCall
7777
{
7878
get => Bytes[3];
7979
set => Bytes[3] = value;

FF4MapEdit/WorldMapTriggersWindow.xaml

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,39 @@
1515
<x:Type Type="ff4:FacingDirection"/>
1616
</ObjectDataProvider.MethodParameters>
1717
</ObjectDataProvider>
18+
<local:WorldMapTriggerDataTemplateSelector x:Key="WorldMapTriggerDataTemplateSelector"/>
19+
<DataTemplate x:Key="WorldMapTeleportTemplate" DataType="{x:Type ff4:WorldMapTeleport}">
20+
<StackPanel Orientation="Horizontal">
21+
<Label>Coords:</Label>
22+
<TextBox Text="{Binding X}"/>
23+
<TextBox Text="{Binding Y}"/>
24+
<Label>Map:</Label>
25+
<TextBox Text="{Binding DestinationMap}"/>
26+
<Label>Dest:</Label>
27+
<TextBox Text="{Binding DestinationX}"/>
28+
<TextBox Text="{Binding DestinationY}"/>
29+
<Label>Facing:</Label>
30+
<ComboBox SelectedValue="{Binding FacingDirection}" ItemsSource="{Binding Source={StaticResource facingDirection}}"></ComboBox>
31+
</StackPanel>
32+
</DataTemplate>
33+
<DataTemplate x:Key="WorldMapEventTemplate" DataType="{x:Type ff4:WorldMapEvent}">
34+
<StackPanel Orientation="Horizontal">
35+
<Label>Coords:</Label>
36+
<TextBox Text="{Binding X}"/>
37+
<TextBox Text="{Binding Y}"/>
38+
<Label>Event Call:</Label>
39+
<TextBox Text="{Binding EventCall}"/>
40+
</StackPanel>
41+
</DataTemplate>
1842
</Window.Resources>
1943
<ScrollViewer>
2044
<StackPanel VerticalAlignment="Top">
21-
<Label Margin="10,15,0,0">Teleports</Label>
22-
<DataGrid x:Name="TeleportsDataGrid" RowHeaderWidth="0" AutoGenerateColumns="False" Margin="15" HorizontalAlignment="Left" VerticalAlignment="Top">
23-
<DataGrid.Columns>
24-
<DataGridTextColumn Header="X" Binding="{Binding X}"/>
25-
<DataGridTextColumn Header="Y" Binding="{Binding Y}"/>
26-
<DataGridTextColumn Header="Dest Map" Binding="{Binding DestinationMap}"/>
27-
<DataGridTextColumn Header="Dest X" Binding="{Binding DestinationX}"/>
28-
<DataGridTextColumn Header="Dest Y" Binding="{Binding DestinationY}"/>
29-
<DataGridComboBoxColumn Header="Facing" SelectedValueBinding="{Binding FacingDirection}" ItemsSource="{Binding Source={StaticResource facingDirection}}"/>
30-
</DataGrid.Columns>
31-
</DataGrid>
32-
<Label Margin="10,15,0,0">Events</Label>
33-
<DataGrid x:Name="EventsDataGrid" RowHeaderWidth="0" AutoGenerateColumns="False" Margin="15" HorizontalAlignment="Left" VerticalAlignment="Top">
34-
<DataGrid.Columns>
35-
<DataGridTextColumn Header="X" Binding="{Binding X}"/>
36-
<DataGridTextColumn Header="Y" Binding="{Binding Y}"/>
37-
<DataGridTextColumn Header="Event Code" Binding="{Binding EventCode}"/>
38-
</DataGrid.Columns>
39-
</DataGrid>
45+
<Label Margin="10,15,0,0">Overworld</Label>
46+
<ListView x:Name="OverworldListView" ItemTemplateSelector="{StaticResource WorldMapTriggerDataTemplateSelector}"/>
47+
<Label Margin="10,15,0,0">Underworld</Label>
48+
<ListView x:Name="UnderworldListView" ItemTemplateSelector="{StaticResource WorldMapTriggerDataTemplateSelector}"/>
49+
<Label Margin="10,15,0,0">Moon</Label>
50+
<ListView x:Name="MoonListView" ItemTemplateSelector="{StaticResource WorldMapTriggerDataTemplateSelector}"/>
4051
</StackPanel>
4152
</ScrollViewer>
4253
</Window>

FF4MapEdit/WorldMapTriggersWindow.xaml.cs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ public partial class WorldMapTriggersWindow : Window
2323
private readonly FF4Rom _rom;
2424

2525
private readonly ushort[] _pointers;
26-
private readonly List<WorldMapTeleport> _teleports;
27-
private readonly List<WorldMapEvent> _events;
26+
private readonly List<WorldMapTrigger> _overworldTriggers;
27+
private readonly List<WorldMapTrigger> _underworldTriggers;
28+
private readonly List<WorldMapTrigger> _moonTriggers;
2829

2930
public WorldMapTriggersWindow(FF4Rom rom)
3031
{
@@ -33,16 +34,38 @@ public WorldMapTriggersWindow(FF4Rom rom)
3334
_rom = rom;
3435

3536
var triggers = _rom.LoadWorldMapTriggers(out _pointers);
36-
_teleports = triggers.Where(trigger => trigger is WorldMapTeleport).Cast<WorldMapTeleport>().ToList();
37-
_events = triggers.Where(trigger => trigger is WorldMapEvent).Cast<WorldMapEvent>().ToList();
37+
var overworldTriggerCount = _pointers[1] / FF4Rom.WorldMapTriggerSize;
38+
var underworldTriggerCount = _pointers[2] / FF4Rom.WorldMapTriggerSize - overworldTriggerCount;
39+
var moonTriggerCount = FF4Rom.WorldMapTriggerCount - overworldTriggerCount - underworldTriggerCount;
40+
_overworldTriggers = triggers.GetRange(0, overworldTriggerCount);
41+
_underworldTriggers = triggers.GetRange(overworldTriggerCount, underworldTriggerCount);
42+
_moonTriggers = triggers.GetRange(overworldTriggerCount + underworldTriggerCount, moonTriggerCount);
3843

39-
TeleportsDataGrid.ItemsSource = _teleports;
40-
EventsDataGrid.ItemsSource = _events;
44+
OverworldListView.ItemsSource = _overworldTriggers;
45+
UnderworldListView.ItemsSource = _underworldTriggers;
46+
MoonListView.ItemsSource = _moonTriggers;
4147
}
4248

4349
private void Window_Closed(object sender, EventArgs e)
4450
{
45-
_rom.SaveWorldMapTriggers(_teleports.Cast<WorldMapTrigger>().Concat(_events).ToList(), _pointers);
51+
_rom.SaveWorldMapTriggers(_overworldTriggers.Concat(_underworldTriggers).Concat(_moonTriggers).ToList(), _pointers);
52+
}
53+
}
54+
55+
public class WorldMapTriggerDataTemplateSelector : DataTemplateSelector
56+
{
57+
public override DataTemplate
58+
SelectTemplate(object item, DependencyObject container)
59+
{
60+
if (container is FrameworkElement element && item != null)
61+
{
62+
if (item is WorldMapTeleport)
63+
return element.FindResource("WorldMapTeleportTemplate") as DataTemplate;
64+
else
65+
return element.FindResource("WorldMapEventTemplate") as DataTemplate;
66+
}
67+
68+
return null;
4669
}
4770
}
4871
}

0 commit comments

Comments
 (0)