codewalkercore/archetype: portals objects deletion

Support attached objects of portals deletion
This commit is contained in:
pichotm
2019-10-25 21:20:32 -04:00
committed by GitHub
Unverified
parent 4559312f1c
commit ec6080768b
@@ -1,4 +1,4 @@
using SharpDX;
using SharpDX;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -247,15 +247,39 @@ namespace CodeWalker.GameFiles
if (ymapEntityDef != null) ymapEntityDef.Index = index;
index++;
}
entities = newentities;
if (didDel) FixRoomIndexes(delIndex);
if (didDel)
{
FixRoomIndexes(delIndex);
FixPortalIndexes(delIndex);
}
return didDel;
}
return false;
}
private void FixPortalIndexes(int deletedIndex)
{
foreach (var portal in portals)
{
List<uint> newAttachedObjects = new List<uint>();
if (portal.AttachedObjects == null)
continue;
foreach(var objIndex in portal.AttachedObjects)
{
if (objIndex == deletedIndex) continue;
if (objIndex > deletedIndex)
newAttachedObjects.Add(objIndex - 1); // move the index back so it matches the index in the entitiy array.
else newAttachedObjects.Add(objIndex); // else just add the index to the attached objects.
}
portal.AttachedObjects = newAttachedObjects.ToArray();
}
}
private void FixRoomIndexes(int deletedIndex)
{
foreach (var room in rooms)