GameEntities.PlayerIntellect.ServerOrSingle_RestoreMainControlledUnit C# (CSharp) Method

ServerOrSingle_RestoreMainControlledUnit() static private method

static private ServerOrSingle_RestoreMainControlledUnit ( ) : void
return void
        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 );
        }