Exemple #1
0
    /**
     * @brief Destroys a GameObject in a deterministic way.
     *
     * The method {@link #DestroyFPRigidBody} is called and attached FrameSyncBehaviors are disabled.
     *
     * @param rigidBody Instance of a {@link FPRigidBody}
     **/
    public static void SyncedDestroy(GameObject go, float delayTime = 0.0f)
    {
        if (instance != null /*&& instance.lockstep != null*/)
        {
            SyncedDisableBehaviour(go);

            FPCollider[] tsColliders = go.GetComponentsInChildren <FPCollider>();
            if (tsColliders != null)
            {
                for (int index = 0, length = tsColliders.Length; index < length; index++)
                {
                    FPCollider tsCollider = tsColliders[index];
                    DestroyFPRigidBody(tsCollider.gameObject, tsCollider.Body);
                }
            }

            FPCollider2D[] tsColliders2D = go.GetComponentsInChildren <FPCollider2D>();
            if (tsColliders2D != null)
            {
                for (int index = 0, length = tsColliders2D.Length; index < length; index++)
                {
                    FPCollider2D tsCollider2D = tsColliders2D[index];
                    DestroyFPRigidBody(tsCollider2D.gameObject, tsCollider2D.Body);
                }
            }
            RemoveSyncBehaviour(go);
            Destroy(go, delayTime);
        }
    }
Exemple #2
0
    /**
     * @brief Removes objets related to a provided player.
     *
     * @param playerId Target player's id.
     **/
    public static void RemovePlayer(int playerId)
    {
        if (instance != null /*&& instance.lockstep != null*/)
        {
            List <FrameSyncManagedBehaviour> behaviorsList = instance.behaviorsByPlayer[playerId];

            for (int index = 0, length = behaviorsList.Count; index < length; index++)
            {
                FrameSyncManagedBehaviour tsmb = behaviorsList[index];
                tsmb.disabled = true;

                FPCollider[] tsColliders = ((FrameSyncBehaviour)tsmb.FrameSyncBehavior).gameObject.GetComponentsInChildren <FPCollider>();
                if (tsColliders != null)
                {
                    for (int index2 = 0, length2 = tsColliders.Length; index2 < length2; index2++)
                    {
                        FPCollider tsCollider = tsColliders[index2];

                        if (!tsCollider.Body.TSDisabled)
                        {
                            DestroyFPRigidBody(tsCollider.gameObject, tsCollider.Body);
                        }
                    }
                }

                FPCollider2D[] tsCollider2Ds = ((FrameSyncBehaviour)tsmb.FrameSyncBehavior).gameObject.GetComponentsInChildren <FPCollider2D>();
                if (tsCollider2Ds != null)
                {
                    for (int index2 = 0, length2 = tsCollider2Ds.Length; index2 < length2; index2++)
                    {
                        FPCollider2D tsCollider2D = tsCollider2Ds[index2];

                        if (!tsCollider2D.Body.TSDisabled)
                        {
                            DestroyFPRigidBody(tsCollider2D.gameObject, tsCollider2D.Body);
                        }
                    }
                }
            }
            instance.behaviorsByPlayer.Remove(playerId);
        }
    }