public override void ExposeTimeData() { base.ExposeTimeData(); bool AnimEnable = animator.enabled; TimeScribe.Look_Value(ref AnimEnable); animator.enabled = AnimEnable; //State Info AnimatorStateInfo[] infos = null; if (TimeScribe.Mode == ScribeMode.Record) { infos = new AnimatorStateInfo[animator.layerCount]; for (int i = 0; i < animator.layerCount; ++i) { infos[i] = animator.GetCurrentAnimatorStateInfo(i); } } TimeScribe.Look_Array(ref infos, animator.layerCount); if (TimeScribe.Mode == ScribeMode.Rewind) { for (int i = 0; i < animator.layerCount; ++i) { animator.Play(infos[i] .shortNameHash, i, infos[i].normalizedTime); } } //Parameters var rawParms = animator.parameters; foreach (var parm in rawParms) { int nameHash = parm.nameHash; TimeScribe.Look_Value(ref nameHash); var parmType = parm.type; TimeScribe.Look_Value(ref parmType); if (parmType == AnimatorControllerParameterType.Bool) { bool value = animator.GetBool(nameHash); TimeScribe.Look_Value(ref value); animator.SetBool(nameHash, value); } else if (parmType == AnimatorControllerParameterType.Int) { int value = animator.GetInteger(nameHash); TimeScribe.Look_Value(ref value); animator.SetInteger(nameHash, value); } else if (parmType == AnimatorControllerParameterType.Float) { float value = animator.GetFloat(nameHash); TimeScribe.Look_Value(ref value); animator.SetFloat(nameHash, value); } } }
public void ExposeTimeData() { bool newActive = gameObject.activeSelf; TimeScribe.Look_Value(ref newActive); if (newActive != gameObject.activeSelf) { gameObject.SetActive(newActive); } if (RecordTransform) { TimeScribe.Look_Transform(transform); } if (RecordRigidBody) { rb.velocity = TimeScribe.Look_Property(rb.velocity); } TimeScribe.Look_Value(ref FakeDestroyed); }
public override void ExposeTimeData() { base.ExposeTimeData(); Vector2 moveVector; if (DataSource == PlayerTimeDataEnum.Ghost) { moveVector = playerGhostAI.moveVector; } else { moveVector = playerController.moveVector; } TimeScribe.Look_Value(ref moveVector); if (TimeScribe.Mode == ScribeMode.Rewind && DataSource == PlayerTimeDataEnum.Ghost) { playerGhostAI.moveVector = moveVector; } mainSpriteRenderer.flipX = TimeScribe.Look_Property(mainSpriteRenderer.flipX); }
private void GoBackTo(int timeStamp, bool isPreview, bool removeBackPoint = false) { IsPreview = isPreview; PreviewStamp = timeStamp; if (!isPreview) { CurrentTimeStamp = removeBackPoint ? timeStamp - 1 : timeStamp; FakeTime = TimeStampTime[CurrentTimeStamp]; } var listNode = Rewindables.First; while (listNode != null) { var node = listNode.Value; var curListNode = listNode; listNode = listNode.Next; if (node == null) { Rewindables.Remove(curListNode); continue; } var container = node.GetTimeStateContainer; if (container.TryGetStateAtTimeStamp(timeStamp, out var state)) { TimeScribe.EnterNode(ScribeMode.Rewind, state); node.ExposeTimeData(); TimeScribe.ExitNode(); } else { node.RewindToPreBirth(); } if (!isPreview) { container.RemoveStatesAfter(removeBackPoint ? timeStamp - 1 : timeStamp); } } }
private void RecordAll(bool removeExceedingState = true) { ++CurrentTimeStamp; if (TimeStampTime.Count >= CurrentTimeStamp + 1) { TimeStampTime[CurrentTimeStamp] = FakeTime; } else { TimeStampTime.Add(FakeTime); } var listNode = Rewindables.First; while (listNode != null) { var node = listNode.Value; var curListNode = listNode; listNode = listNode.Next; if (node == null) { Rewindables.Remove(curListNode); continue; } TimeScribe.EnterNode(ScribeMode.Probe, null); node.ExposeTimeData(); byte[] state = new byte[TimeScribe.ProbeRes]; TimeScribe.EnterNode(ScribeMode.Record, state); node.ExposeTimeData(); node.GetTimeStateContainer.AddTimeState(state, CurrentTimeStamp); if (removeExceedingState) { node.GetTimeStateContainer.RemoveStatesBefore(EarliestExistingTimeState); } TimeScribe.ExitNode(); } }
public virtual void ExposeTimeData() { enabled = TimeScribe.Look_Property(enabled); }