/** * @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); } }
/** * @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); } }