void DeactivateObjects()
{
//Deactivate only some objects each frame.
int numberOfEntitiesDeactivated = 0;
int numberOfIslandsChecked = 0;
int originalIslandCount = simulationIslands.Count;
while (numberOfEntitiesDeactivated < maximumDeactivationAttemptsPerFrame && simulationIslands.Count > 0 && numberOfIslandsChecked < originalIslandCount)
{
deactivationIslandIndex = (deactivationIslandIndex + 1) % simulationIslands.Count;
var island = simulationIslands.Elements[deactivationIslandIndex];
if (island.memberCount == 0)
{
//Found an orphan island left over from merge procedures or removal procedures.
//Shoo it on out.
simulationIslands.FastRemoveAt(deactivationIslandIndex);
GiveBackIsland(island);
}
else
{
island.TryToDeactivate();
numberOfEntitiesDeactivated += island.memberCount;
}
numberOfIslandsChecked++;
}
}