using FishNet.Connection; using FishNet.Managing; using FishNet.Managing.Scened; using FishNet.Managing.Timing; using FishNet.Transporting; using GameKit.Dependencies.Utilities; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; using UnityEngine.SceneManagement; namespace FishNet.Component.ColliderRollback { public class RollbackManager : MonoBehaviour { #region Internal. /// /// Cached value for bounding box layermask. /// internal int? BoundingBoxLayerNumber { get { if (_boundingBoxLayerNumber == null) { for (int i = 0; i < 32; i++) { if ((1 << i) == BoundingBoxLayer.value) { _boundingBoxLayerNumber = i; break; } } } return _boundingBoxLayerNumber; } } private int? _boundingBoxLayerNumber; #endregion #region Serialized. /// /// /// [Tooltip("Layer to use when creating and checking against bounding boxes. This should be different from any layer used.")] [SerializeField] private LayerMask _boundingBoxLayer = 0; /// /// Layer to use when creating and checking against bounding boxes. This should be different from any layer used. /// internal LayerMask BoundingBoxLayer => _boundingBoxLayer; /// /// /// [Tooltip("Maximum time in the past colliders can be rolled back to.")] [SerializeField] private float _maximumRollbackTime = 1.25f; /// /// Maximum time in the past colliders can be rolled back to. /// internal float MaximumRollbackTime => _maximumRollbackTime; /// /// /// [Tooltip("Interpolation value for the NetworkTransforms or objects being rolled back.")] [Range(0, 250)] [SerializeField] internal ushort Interpolation = 2; #endregion /// /// Initializes this script for use. /// /// internal void InitializeOnce_Internal(NetworkManager manager) { } [Obsolete("Use Rollback(Vector3, Vector3, float, PreciseTick, RollbackPhysicsType.Physics, bool) instead.")] //Remove on V5 public void Rollback(Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, bool asOwnerAndClientHost = false) { } [Obsolete("Use Rollback(Scene, Vector3, Vector3, float, PreciseTick, RollbackPhysicsType.Physics, bool) instead.")] //Remove on V5 public void Rollback(Scene scene, Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, bool asOwnerAndClientHost = false) { } [Obsolete("Use Rollback(int, Vector3, Vector3, float, PreciseTick, RollbackPhysicsType.Physics, bool) instead.")] //Remove on V5 public void Rollback(int sceneHandle, Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, bool asOwnerAndClientHost = false) { } [Obsolete("Use Rollback(Scene, Vector3, Vector3, float, PreciseTick, RollbackPhysicsType.Physics2D, bool) instead.")] //Remove on V5 public void Rollback(Scene scene, Vector2 origin, Vector2 normalizedDirection, float distance, PreciseTick pt, bool asOwnerAndClientHost = false) { } [Obsolete("Use Rollback(Vector3, Vector3, float, PreciseTick, RollbackPhysicsType.Physics2D, bool) instead.")] //Remove on V5 public void Rollback(Vector2 origin, Vector2 normalizedDirection, float distance, PreciseTick pt, bool asOwnerAndClientHost = false) { } /// /// Rolls back all colliders. /// /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Rolls back all colliders in a scene. /// /// Scene containing colliders. /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(Scene scene, PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Rolls back all colliders in a scene. /// /// Scene handle containing colliders. /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(int sceneHandle, PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Rolls back colliders hit by a test cast against bounding boxes. /// /// Ray origin. /// Direction to cast. /// Distance of cast. /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Rolls back colliders hit by a test cast against bounding boxes, in a specific scene. /// /// Scene containing colliders. /// Ray origin. /// Direction to cast. /// Distance of cast. /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(Scene scene, Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Rolls back colliders hit by a test cast against bounding boxes, in a specific scene. /// /// Scene handle containing colliders. /// Ray origin. /// Direction to cast. /// Distance of cast. /// Precise tick received from the client. /// Type of physics to rollback; this is often what your casts will use. /// True if IsOwner of the object the raycast is for. This can be ignored and only provides more accurate results for clientHost. public void Rollback(int sceneHandle, Vector3 origin, Vector3 normalizedDirection, float distance, PreciseTick pt, RollbackPhysicsType physicsType, bool asOwnerAndClientHost = false) { } /// /// Returns all ColliderRollback objects back to their original position. /// public void Return() { } } }