示例#1
0
        public static void AddTracking(object obj)
        {
            bool flag = StateTracker.instance != null;

            if (flag)
            {
                foreach (MemberInfo current in Utils.GetMembersInfo(obj.GetType()))
                {
                    object[] customAttributes = current.GetCustomAttributes(true);
                    bool     flag2            = customAttributes != null;
                    if (flag2)
                    {
                        object[] array = customAttributes;
                        for (int i = 0; i < array.Length; i++)
                        {
                            object obj2  = array[i];
                            bool   flag3 = obj2 is AddTracking;
                            if (flag3)
                            {
                                StateTracker.AddTracking(obj, current.Name);
                            }
                        }
                    }
                }
            }
        }
示例#2
0
        public static void AddTracking(object obj)
        {
            bool flag = StateTracker.instance != null;

            if (flag)
            {
                List <MemberInfo> membersInfo = Utils.GetMembersInfo(obj.GetType());
                int i     = 0;
                int count = membersInfo.Count;
                while (i < count)
                {
                    MemberInfo memberInfo       = membersInfo[i];
                    object[]   customAttributes = memberInfo.GetCustomAttributes(true);
                    bool       flag2            = customAttributes != null;
                    if (flag2)
                    {
                        int j   = 0;
                        int num = customAttributes.Length;
                        while (j < num)
                        {
                            bool flag3 = customAttributes[j] is AddTracking;
                            if (flag3)
                            {
                                StateTracker.AddTracking(obj, memberInfo.Name);
                            }
                            j++;
                        }
                    }
                    i++;
                }
            }
        }
        /**
         *  @brief Initializes internal properties based on whether there is a {@link TSCollider2D} attached.
         **/
        public void Initialize()
        {
            if (m_Initialized)
            {
                return;
            }

            m_TSCollider = GetComponent <TSCollider2D>();

            if (transform.parent != null)
            {
                m_TSParent = transform.parent.GetComponent <TSTransform2D>();
            }

            if (!m_Serialized)
            {
                UpdateEditMode();
            }

            if (m_TSCollider != null)
            {
                if (m_TSCollider.isBodyInitialized)
                {
                    m_TSCollider.body.TSPosition    = m_Position + m_TSCollider.center;
                    m_TSCollider.body.TSOrientation = m_Rotation * FP.Deg2Rad;
                }
            }
            else
            {
                StateTracker.AddTracking(this);
            }

            m_Initialized = true;
        }
示例#4
0
        /**
         *  @brief Initializes internal properties based on whether there is a {@link TSCollider2D} attached.
         **/
        public void Initialize()
        {
            if (initialized)
            {
                return;
            }

            tsCollider = GetComponent <TSCollider2D>();
            if (transform.parent != null)
            {
                tsParent = transform.parent.GetComponent <TSTransform2D>();
            }

            if (!_serialized)
            {
                UpdateEditMode();
            }

            if (tsCollider != null)
            {
                if (tsCollider.IsBodyInitialized)
                {
                    tsCollider.Body.TSPosition    = _position + scaledCenter;
                    tsCollider.Body.TSOrientation = _rotation * FP.Deg2Rad;
                }
            }
            else
            {
                StateTracker.AddTracking(this);
            }

            initialized = true;
        }
示例#5
0
        public static void AddTracking(object obj, string path)
        {
            bool flag = StateTracker.instance != null;

            if (flag)
            {
                string item  = string.Format("{0}_{1}_{2}", obj.GetType().FullName, obj.GetHashCode(), path);
                bool   flag2 = !StateTracker.instance.trackedInfosAdded.Contains(item);
                if (flag2)
                {
                    StateTracker.TrackedInfo trackedInfo = StateTracker.GetTrackedInfo(obj, path);
                    StateTracker.instance.trackedInfos.Add(trackedInfo);
                    StateTracker.instance.trackedInfosAdded.Add(item);
                    int i    = 0;
                    int size = StateTracker.instance.states.size;
                    while (i < size)
                    {
                        StateTracker.State @new = StateTracker.resourcePool.GetNew();
                        @new.SetInfo(trackedInfo);
                        StateTracker.instance.states.Current().Add(@new);
                        StateTracker.instance.states.MoveNext();
                        i++;
                    }
                }
            }
        }
示例#6
0
        public AbstractLockstep(FP deltaTime, ICommunicator communicator, IPhysicsManager physicsManager, int syncWindow, int panicWindow, int rollbackWindow, TrueSyncEventCallback OnGameStarted, TrueSyncEventCallback OnGamePaused, TrueSyncEventCallback OnGameUnPaused, TrueSyncEventCallback OnGameEnded, TrueSyncPlayerDisconnectionCallback OnPlayerDisconnection, TrueSyncUpdateCallback OnStepUpdate, TrueSyncInputCallback GetLocalData)
        {
            this.deltaTime             = deltaTime;
            this.syncWindow            = syncWindow;
            this.panicWindow           = panicWindow;
            this.rollbackWindow        = rollbackWindow;
            this.totalWindow           = syncWindow + rollbackWindow;
            this.StepUpdate            = OnStepUpdate;
            this.OnGameStarted         = OnGameStarted;
            this.OnGamePaused          = OnGamePaused;
            this.OnGameUnPaused        = OnGameUnPaused;
            this.OnGameEnded           = OnGameEnded;
            this.OnPlayerDisconnection = OnPlayerDisconnection;
            this.GetLocalData          = GetLocalData;
            this.ticks        = 0;
            this.players      = new SortedDictionary <byte, TSPlayer>();
            this.communicator = communicator;
            bool flag = communicator != null;

            if (flag)
            {
                this.communicator.AddEventListener(new OnEventReceived(this.OnEventDataReceived));
            }
            this.physicsManager     = physicsManager;
            this.compoundStats      = new CompoundStats();
            this.bufferSyncedInfo   = new GenericBufferWindow <SyncedInfo>(3);
            this.checksumOk         = true;
            this.simulationState    = AbstractLockstep.SimulationState.NOT_STARTED;
            this.bodiesToDestroy    = new Dictionary <int, List <IBody> >();
            this.delegatesToExecute = new Dictionary <int, List <Delegate> >();
            this.ReplayRecord       = ReplayRecord.replayToLoad;
            this.ReplayMode         = ReplayRecord.replayMode;
            this.time = FP.Zero;
            StateTracker.AddTracking(this, "time");
        }
示例#7
0
        public static TSRandom New(int seed)
        {
            TSRandom tSRandom = new TSRandom(seed);

            StateTracker.AddTracking(tSRandom, "mt");
            StateTracker.AddTracking(tSRandom, "mti");
            return(tSRandom);
        }
示例#8
0
        /**
         *  @brief Generates a new instance based on a given seed.
         **/
        public static TSRandom New(int seed)
        {
            TSRandom r = new TSRandom(seed);

            StateTracker.AddTracking(r, "mt");
            StateTracker.AddTracking(r, "mti");

            return(r);
        }
示例#9
0
        public static void AddTracking(object obj, string path)
        {
            bool flag = StateTracker.instance != null;

            if (flag)
            {
                string item  = string.Format("{0}_{1}_{2}", obj.GetType().FullName, obj.GetHashCode(), path);
                bool   flag2 = !StateTracker.instance.trackedInfosAdded.Contains(item);
                if (flag2)
                {
                    StateTracker.instance.trackedInfos.Add(StateTracker.GetTrackedInfo(obj, path));
                    StateTracker.instance.trackedInfosAdded.Add(item);
                }
            }
        }
示例#10
0
        void Awake()
        {
            TrueSyncConfig currentConfig = ActiveConfig;

            lockedTimeStep = currentConfig.lockedTimeStep;

            StateTracker.Init();

            if (currentConfig.physics2DEnabled || currentConfig.physics3DEnabled)
            {
                PhysicsManager.New(currentConfig);
                PhysicsManager.instance.LockedTimeStep = lockedTimeStep;
                PhysicsManager.instance.Init();
            }
        }
        void OnDestroy()
        {
            ResourcePool.CleanUpAll();

            // Release StateTracker.

            StateTracker.CleanUp();

            // Release physics world.

            PhysicsManager.Cleanup();

            // Release self-reference.

            m_Instance = null;
        }
        void Awake()
        {
            TrueSyncConfig currentConfig = ActiveConfig;
            lockedTimeStep = currentConfig.lockedTimeStep;

            StateTracker.Init(currentConfig.rollbackWindow);
            TSRandom.Init();

            if (currentConfig.physics2DEnabled || currentConfig.physics3DEnabled) {
                PhysicsManager.New(currentConfig);
                PhysicsManager.instance.LockedTimeStep = lockedTimeStep;
                PhysicsManager.instance.Init();
            }

            StateTracker.AddTracking(this, "time");
        }
示例#13
0
        /**
         *  @brief Initializes internal properties based on whether there is a {@link TSCollider} attached.
         **/
        public void Initialize()
        {
            if (initialized)
            {
                return;
            }

            rb             = GetComponent <TSRigidBody>();
            transformCache = transform;

            tsCollider = GetComponent <TSCollider>();
            if (transformCache.parent != null)
            {
                tsParent = transformCache.parent.GetComponent <TSTransform>();
            }

            foreach (Transform child in transformCache)
            {
                TSTransform tsChild = child.GetComponent <TSTransform>();
                if (tsChild != null)
                {
                    tsChildren.Add(tsChild);
                }
            }

            if (!_serialized)
            {
                UpdateEditMode();
            }

            if (tsCollider != null)
            {
                if (tsCollider.IsBodyInitialized)
                {
                    tsCollider.Body.TSPosition    = _position + scaledCenter;
                    tsCollider.Body.TSOrientation = TSMatrix.CreateFromQuaternion(_rotation);
                }
            }
            else
            {
                StateTracker.AddTracking(this);
            }

            initialized = true;
        }
        /**
         *  @brief Initializes internal properties based on whether there is a {@link TSCollider} attached.
         **/
        public void Initialize()
        {
            if (initialized)
            {
                return;
            }

            tsCollider = GetComponent <TSCollider>();
            if (transform.parent != null)
            {
                tsParent = transform.parent.GetComponent <TSTransform>();
            }

            foreach (Transform child in transform)
            {
                TSTransform tsChild = child.GetComponent <TSTransform>();
                if (tsChild != null)
                {
                    tsChildren.Add(tsChild);
                }
            }

            if (!_serialized)
            {
                UpdateEditMode();
            }

            if (tsCollider != null)
            {
                if (tsCollider.IsBodyInitialized)
                {
                    tsCollider.Body.TSPosition    = _position + scaledCenter;
                    tsCollider.Body.TSOrientation = TSMatrix.CreateFromQuaternion(_rotation);
                }
            }
            else
            {
                //配合 [AddTracking] Attribute 使用, StateTracker.AddTracking(object obj)通过反射获取obj的成员变量
                StateTracker.AddTracking(this);
            }

            initialized = true;
        }
示例#15
0
        /**
         *  @brief Initializes internal properties based on whether there is a {@link TSCollider} attached.
         **/
        public void Initialize()
        {
            if (initialized)
            {
                return;
            }

            tsCollider = GetComponent <TSCollider>();
            if (transform.parent != null)
            {
                tsParent = transform.parent.GetComponent <TSTransform>();
            }

            foreach (Transform child in transform)
            {
                TSTransform tsChild = child.GetComponent <TSTransform>();
                if (tsChild != null)
                {
                    tsChildren.Add(tsChild);
                }
            }

            if (!_serialized)
            {
                UpdateEditMode();
            }

            if (tsCollider != null)
            {
                if (tsCollider.IsBodyInitialized)
                {
                    tsCollider.Body.TSPosition    = transform.position.ToTSVector() + scaledCenter;
                    tsCollider.Body.TSOrientation = transform.rotation.ToTSMatrix();
                    localScale = transform.localScale.ToTSVector();
                }
            }
            else
            {
                StateTracker.AddTracking(this);
            }

            initialized = true;
        }
示例#16
0
        //=================================================================================================================
        void Awake()
        {
            TrueSyncConfig currentConfig = ActiveConfig;

            lockedTimeStep = currentConfig.lockedTimeStep;

            // 初始化状态跟踪
            StateTracker.Init(currentConfig.rollbackWindow);
            // 初始化随机数
            TSRandom.Init(randomseed);

            // 初始化物理管理器
            if (currentConfig.physics2DEnabled || currentConfig.physics3DEnabled)
            {
                PhysicsManager.New(currentConfig);
                PhysicsManager.instance.LockedTimeStep = lockedTimeStep;
                PhysicsManager.instance.Init();
            }
            // 跟踪 时间
            StateTracker.AddTracking(this, "time");
        }
示例#17
0
 /**
  * @brief Clean up references to be collected by gc.
  **/
 public static void CleanUp()
 {
     ResourcePool.CleanUpAll();
     StateTracker.CleanUp();
     instance = null;
 }
示例#18
0
 /// <summary>
 ///@brief Clean up references to be collected by gc.
 ///DV 清除GC所收集的引用
 /// </summary>
 public static void CleanUp()
 {
     ResourcePool.CleanUpAll(); // 清理对象池
     StateTracker.CleanUp();    // 清理状态跟踪
     instance = null;           // 去除实例变量引用
 }
示例#19
0
 public RollbackLockstep(FP deltaTime, ICommunicator communicator, IPhysicsManager physicsManager, int syncWindow, int panicTime, int rollbackWindow, TrueSyncEventCallback OnGameStarted, TrueSyncEventCallback OnGamePaused, TrueSyncEventCallback OnGameUnPaused, TrueSyncEventCallback OnGameEnded, TrueSyncPlayerDisconnectionCallback OnPlayerDisconnection, TrueSyncUpdateCallback OnStepUpdate, TrueSyncInputCallback GetLocalData) : base(deltaTime, communicator, physicsManager, syncWindow, panicTime, rollbackWindow, OnGameStarted, OnGamePaused, OnGameUnPaused, OnGameEnded, OnPlayerDisconnection, OnStepUpdate, GetLocalData)
 {
     this.bufferWorldClone = new GenericBufferWindow <IWorldClone>(rollbackWindow, new GenericBufferWindow <IWorldClone> .NewInstance(physicsManager.GetWorldClone));
     this.rollbackIndex    = rollbackWindow;
     StateTracker.Init(rollbackWindow);
 }
示例#20
0
 public TrueSyncManagedBehaviour(ITrueSyncBehaviour trueSyncBehavior)
 {
     StateTracker.AddTracking(this);
     StateTracker.AddTracking(trueSyncBehavior);
     this.trueSyncBehavior = trueSyncBehavior;
 }
示例#21
0
 public static void CleanUp()
 {
     instance = null;
 }
示例#22
0
 public static void Init(int rollbackWindow)
 {
     StateTracker.instance        = new StateTracker();
     StateTracker.instance.states = new GenericBufferWindow <List <StateTracker.State> >(rollbackWindow);
 }
示例#23
0
 public static void Init()
 {
     StateTracker.instance = new StateTracker();
     TSRandom.Init();
 }
示例#24
0
 public static void CleanUp()
 {
     StateTracker.instance = null;
 }
示例#25
0
 public void Initialize()
 {
     StateTracker.AddTracking(this);
     InitTransformCache();
 }
        // LOGIC

        public void Initialize(TrueSyncConfig i_Config = null)
        {
            TrueSyncConfig config = (i_Config != null) ? i_Config : (Resources.Load <TrueSyncConfig>(s_TrueSyncConfigResourcePath));

            // Load config.

            m_Config = config;

            if (config == null)
            {
                return;
            }

            m_LockedTimeStep = config.lockedTimeStep;

            // Init state tracker.

            StateTracker.Init(config.rollbackWindow);

            // Init time.

            m_TimeScaler = new TSTimeScaler();
            m_TimeScaler.Init();

            // Create physics world.

            IPhysicsManager worldManager = new Physics2DWorldManager();

            worldManager.Gravity             = new TSVector(config.gravity.x, config.gravity.y, 0);
            worldManager.SpeculativeContacts = config.speculativeContacts;
            worldManager.LockedTimeStep      = config.lockedTimeStep;

            worldManager.Init();

            // Create communicator.

            ICommunicator communicator = null;

            if (isOnline)
            {
                communicator = new PhotonTrueSyncCommunicator(PhotonNetwork.networkingPeer);
            }
            else
            {
                Debug.Log("You are not connected to Photon. TrueSync will start in offline mode.");
            }

            // Create lockstep.

            m_Lockstep = AbstractLockstep.NewInstance(m_LockedTimeStep, communicator, worldManager, m_Config.syncWindow, m_Config.panicWindow, m_Config.rollbackWindow, OnGameStarted, OnGamePaused, OnGameUnPaused, OnGameEnded, OnPlayerDisconnection, OnStepUpdate, GetLocalData);

            Debug.Log("Lockstep initialized (Sync: " + m_Config.syncWindow + ", Rollback: " + m_Config.rollbackWindow + ")");

            // Stats

            if (m_Config.showStats)
            {
                TrueSyncStats statsComponent = gameObject.AddComponent <TrueSyncStats>();
                statsComponent.Lockstep = m_Lockstep;
            }

            // Add player on lockestep.

            if (isOnline)
            {
                List <PhotonPlayer> photonPlayers = new List <PhotonPlayer>(PhotonNetwork.playerList);
                photonPlayers.Sort(UnityUtils.playerComparer);

                for (int photonPlayerIndex = 0; photonPlayerIndex < photonPlayers.Count; ++photonPlayerIndex)
                {
                    PhotonPlayer photonPlayer = photonPlayers[photonPlayerIndex];
                    m_Lockstep.AddPlayer((byte)photonPlayer.ID, photonPlayer.NickName, photonPlayer.IsLocal);
                }
            }
            else
            {
                m_Lockstep.AddPlayer(0, "Local_Player", true);
            }

            // Fill behaviours per player dictionary.

            foreach (TSPlayer player in m_Lockstep.Players.Values)
            {
                List <TrueSyncManagedBehaviour> behaviours = new List <TrueSyncManagedBehaviour>();
                m_BehavioursPerPlayer.Add(player.ID, behaviours);
            }

            // Initialize Physics Manager.

            PhysicsManager.Initialize(worldManager);
            PhysicsManager.OnRemoveBody(OnRemovedRigidbody);
        }
        // LOGIC

        public void Init()
        {
            StateTracker.AddTracking(this);
        }