Skip to content

Commit 50bf329

Browse files
committed
fix saving trigger pointers, fix moving triggers between world maps
1 parent 86daab0 commit 50bf329

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

FF4MapEdit/WorldMapTriggersWindow.xaml.cs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ public WorldMapTriggersWindow(FF4Rom rom)
3535
_rom = rom;
3636

3737
var triggers = _rom.LoadWorldMapTriggers(out _pointers);
38-
var overworldTriggerCount = _pointers[1] / FF4Rom.WorldMapTriggerSize;
38+
39+
// This is dumb, LoadWorldMapTriggers() should return separate lists.
40+
var overworldTriggerCount = _pointers[1] / FF4Rom.WorldMapTriggerSize;
3941
var underworldTriggerCount = _pointers[2] / FF4Rom.WorldMapTriggerSize - overworldTriggerCount;
4042
var moonTriggerCount = FF4Rom.WorldMapTriggerCount - overworldTriggerCount - underworldTriggerCount;
4143
_overworldTriggers = new ObservableCollection<WorldMapTrigger>(triggers.GetRange(0, overworldTriggerCount));
@@ -48,7 +50,11 @@ public WorldMapTriggersWindow(FF4Rom rom)
4850
}
4951

5052
private void Window_Closed(object sender, EventArgs e)
51-
{
53+
{
54+
// This is dumb, SaveWorldMapTriggers() should accept separate lists and figure out the pointers itself.
55+
_pointers[1] = (ushort)(_overworldTriggers.Count * FF4Rom.WorldMapTriggerSize);
56+
_pointers[2] = (ushort)(_pointers[1] + _underworldTriggers.Count * FF4Rom.WorldMapTriggerSize);
57+
5258
_rom.SaveWorldMapTriggers(_overworldTriggers.Concat(_underworldTriggers).Concat(_moonTriggers).ToList(), _pointers);
5359
}
5460

@@ -69,21 +75,20 @@ private void MoveUpButton_Click(object sender, RoutedEventArgs e)
6975
if (srcTriggers == _moonTriggers)
7076
{
7177
destTriggers = _underworldTriggers;
72-
destIndex = _underworldTriggers.Count - 1;
7378
}
7479
else if (srcTriggers == _underworldTriggers)
7580
{
7681
destTriggers = _overworldTriggers;
77-
destIndex = _overworldTriggers.Count - 1;
7882
}
7983
else if (srcTriggers == _overworldTriggers)
8084
{
8185
destTriggers = _moonTriggers;
82-
destIndex = _moonTriggers.Count - 1;
8386
}
87+
88+
destIndex = destTriggers.Count;
8489
}
8590

86-
SwapTriggers(srcTriggers, destTriggers, srcIndex, destIndex);
91+
MoveTrigger(srcTriggers, destTriggers, srcIndex, destIndex);
8792
}
8893

8994
private void MoveDownButton_Click(object sender, RoutedEventArgs e)
@@ -116,19 +121,25 @@ private void MoveDownButton_Click(object sender, RoutedEventArgs e)
116121
destIndex = 0;
117122
}
118123

119-
SwapTriggers(srcTriggers, destTriggers, srcIndex, destIndex);
124+
MoveTrigger(srcTriggers, destTriggers, srcIndex, destIndex);
120125
}
121126

122-
private void SwapTriggers(ObservableCollection<WorldMapTrigger> srcTriggers, ObservableCollection<WorldMapTrigger> destTriggers, int srcIndex, int destIndex)
127+
private void MoveTrigger(ObservableCollection<WorldMapTrigger> srcTriggers, ObservableCollection<WorldMapTrigger> destTriggers, int srcIndex, int destIndex)
123128
{
124129
var source = srcTriggers[srcIndex];
125-
var dest = destTriggers[destIndex];
130+
WorldMapTrigger dest = null;
126131

127-
destTriggers.RemoveAt(destIndex);
132+
// Order is important here. Don't try to combine these if blocks.
133+
if (srcTriggers == destTriggers)
134+
{
135+
dest = destTriggers[destIndex];
136+
destTriggers.RemoveAt(destIndex);
137+
}
128138
destTriggers.Insert(destIndex, source);
129139

130140
srcTriggers.RemoveAt(srcIndex);
131-
srcTriggers.Insert(srcIndex, dest);
141+
if (srcTriggers == destTriggers)
142+
srcTriggers.Insert(srcIndex, dest);
132143
}
133144

134145
private void TriggerType_SelectionChanged(object sender, SelectionChangedEventArgs e)

0 commit comments

Comments
 (0)