void ServerOrSingle_RestoreMainControlledUnit()
{
if( mainNotActiveUnit == null )
return;
if( ControlledObject != null )
{
ControlledObject.SetIntellect( null, false );
ControlledObject.Destroying -= AlternativeUnitAllowPlayerControl_Destroying;
}
if( !mainNotActiveUnit.IsSetDeleted )
{
mainNotActiveUnit.Server_EnableSynchronizationPositionsToClients = true;
mainNotActiveUnit.Position = mainNotActiveUnitRestorePosition;
//find free position for movable player controlled units
if( ControlledObject != null )
{
//Tank specific
if( ControlledObject is Tank )
{
mainNotActiveUnit.Position = FindFreePositionForUnit(
mainNotActiveUnit, ControlledObject.Position );
}
}
mainNotActiveUnit.OldPosition = mainNotActiveUnit.Position;
mainNotActiveUnit.Visible = true;
RemoveRelationship( mainNotActiveUnit );
//restore contact groups for shapes
if( mainNotActiveUnitShapeContactGroups != null )
{
foreach( Body body in mainNotActiveUnit.PhysicsModel.Bodies )
{
foreach( Shape shape in body.Shapes )
{
int group;
if( mainNotActiveUnitShapeContactGroups.TryGetValue( shape, out group ) )
shape.ContactGroup = group;
}
}
mainNotActiveUnitShapeContactGroups.Clear();
mainNotActiveUnitShapeContactGroups = null;
}
mainNotActiveUnit.SetIntellect( this, false );
ControlledObject = mainNotActiveUnit;
}
else
ControlledObject = null;
mainNotActiveUnit = null;
//send mainNotActiveUnit to clients
if( EntitySystemWorld.Instance.IsServer() )
Server_SendMainNotActiveUnitToClients( EntitySystemWorld.Instance.RemoteEntityWorlds );
}