/** * @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>(); } 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; }
// 添加追踪 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++; } } }
// 添加追踪 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++; } } } }
// 初始化 public static void Init(int rollbackWindow) { StateTracker.instance = new StateTracker(); StateTracker.instance.states = new GenericBufferWindow <List <StateTracker.State> >(rollbackWindow); }
// 清空 public static void CleanUp() { StateTracker.instance = null; }
/** * @brief Instantiate a new prefab in a deterministic way. * * @param prefab GameObject's prefab to instantiate. **/ /** * @brief Clean up references to be collected by gc. **/ public static void CleanUp() { ResourcePool.CleanUpAll(); StateTracker.CleanUp(); instance = null; }