Skip to content
21 changes: 18 additions & 3 deletions TombEditor/EditorActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,25 @@ void smoothEdit(RoomSectorPair pair, SectorEdge edge)
case ArrowType.CornerNW: origin = SectorEdge.XnZp; break;
case ArrowType.CornerSE: origin = SectorEdge.XpZn; break;
}

var originSector = room.GetSectorTryThroughPortal(startCoord);
var originHeight = originSector.Sector.GetHeight(vertical, origin) + originSector.Room.Position.Y;
for (int i = 0; i < 4; i++)
corners[i] = originHeight == cornerSectors[i].Sector.GetHeight(vertical, (SectorEdge)i) + cornerSectors[i].Room.Position.Y;
if (originSector.Sector == null || originSector.Room == null)
Array.Fill(corners, false);
else
{
var originHeight = originSector.Sector.GetHeight(vertical, origin) + originSector.Room.Position.Y;

bool IsCornerValidAndAtSameHeight(RoomSectorPair cornerSector, SectorEdge edge, SectorVerticalPart cornerVertical, int referenceHeight)
{
if (cornerSector.Sector == null || cornerSector.Room == null)
return false;

return referenceHeight == cornerSector.Sector.GetHeight(cornerVertical, edge) + cornerSector.Room.Position.Y;
}

for (int i = 0; i < 4; i++)
corners[i] = IsCornerValidAndAtSameHeight(cornerSectors[i], (SectorEdge)i, vertical, originHeight);
}
}

// Smoothly change sectors on the corners
Expand Down