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.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)