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
parent 4559312f1c
commit ec6080768b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
using SharpDX; using SharpDX;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -247,15 +247,39 @@ namespace CodeWalker.GameFiles
if (ymapEntityDef != null) ymapEntityDef.Index = index; if (ymapEntityDef != null) ymapEntityDef.Index = index;
index++; index++;
} }
entities = newentities; entities = newentities;
if (didDel) FixRoomIndexes(delIndex); if (didDel)
{
FixRoomIndexes(delIndex);
FixPortalIndexes(delIndex);
}
return didDel; return didDel;
} }
return false; 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) private void FixRoomIndexes(int deletedIndex)
{ {
foreach (var room in rooms) foreach (var room in rooms)