void TryToCompressIslandHierarchy()
{
var currentSimulationIsland = simulationIsland;
if (currentSimulationIsland != null)
{
if (currentSimulationIsland.immediateParent != currentSimulationIsland)
{
//Only remove ourselves from the owning simulation island, not all the way up the chain.
//The change locker must be obtained first to prevent kinematic notifications in the candidacy update
//from attempting to evaluate the SimulationIsland while we are reorganizing things.
simulationIslandChangeLocker.Enter();
lock (currentSimulationIsland)
currentSimulationIsland.Remove(this);
currentSimulationIsland = currentSimulationIsland.Parent;
//Add ourselves to the new owner.
lock (currentSimulationIsland)
currentSimulationIsland.Add(this);
simulationIslandChangeLocker.Exit();
//TODO: Should it activate the new island? This might avoid a possible corner case.
//It could interfere with the activated event meaningfulness, since that is triggered
//at the end of the update candidacy loop..
//currentSimulationIsland.isActive = true;
}
}
}