public void Rewind() { int currentRewindSpeed = TimeController.CurrentRewindSpeed; FizzleStack <IRewindStatus> fizzleStack1; FizzleStack <IRewindStatus> fizzleStack2; if (TimeController.CurrentRewindSpeed < 0) { fizzleStack1 = rewindStack; fizzleStack2 = reverseStack; } else { if (TimeController.CurrentRewindSpeed <= 0) { return; } fizzleStack1 = reverseStack; fizzleStack2 = rewindStack; } for (int index = 0; index < Mathf.Abs(currentRewindSpeed) && fizzleStack1.Count != 0L; ++index) { IRewindStatus rewindStatus = fizzleStack1.Pop(); PopFromStack(rewindStatus); fizzleStack2.Push(rewindStatus); } }
protected override void PopFromStack(IRewindStatus rewindStatus) { FizzleElevatorRewindStatus status = rewindStatus.Cast <FizzleElevatorRewindStatus>(); elevator.transform.position = status.position; elevator.status = status.status; }
protected override void PopFromStack(IRewindStatus obj) { CameraRewindStatus cameraRewindStatus = (CameraRewindStatus)obj; transform.localPosition = cameraRewindStatus.position; transform.localRotation = cameraRewindStatus.rotation; }
protected override void PopFromStack(IRewindStatus rewindStatus) { if (!(((FizzleButtonRewindStatus)rewindStatus).activated ^ lastActivate)) { return; } button.ToggleActive(); lastActivate = !lastActivate; }
protected override void PopFromStack(IRewindStatus rewindStatus) { if (!(((FizzleLogicCurtainRewindStatus)rewindStatus).activate ^ lastActivate)) { return; } curtain.ToggleActive(); lastActivate = !lastActivate; }
protected override void PopFromStack(IRewindStatus obj) { anim.Continue(); FirstPersonRewindStatus personRewindStatus = obj.Cast <FirstPersonRewindStatus>(); transform.localPosition = personRewindStatus.position; transform.localRotation = personRewindStatus.rotation; anim.Velocity = personRewindStatus.animationVelocity; anim.Grounded = personRewindStatus.grounded; }
protected override void ForkStatus(IRewindStatus obj) { FirstPersonRewindStatus personRewindStatus = (FirstPersonRewindStatus)obj; ForkEffect componentInChildren = forkChar.GetComponentInChildren <ForkEffect>(); ForkCharacterAction component = forkChar.GetComponent <ForkCharacterAction>(); componentInChildren.Grounded = personRewindStatus.grounded; componentInChildren.Velocity = personRewindStatus.animationVelocity; forkChar.transform.position = personRewindStatus.position; forkChar.transform.rotation = personRewindStatus.rotation; component.currentInteractiveItem = personRewindStatus.currentItem; component.IsCarrying = personRewindStatus.isCarrying; component.CameraRay = personRewindStatus.cameraRay; }
protected override void PopFromStack(IRewindStatus obj) { FizzleBoxRewindStatus status = (FizzleBoxRewindStatus)obj; transform.position = status.position; transform.rotation = status.rotation; rigidbody.velocity = status.velocity; rigidbody.angularVelocity = status.angularVelocity; if (fizzleBox.Carrier && !status.carrier) { fizzleBox.Release(fizzleBox.Carrier); } else { if (fizzleBox.Carrier || !status.carrier) { return; } status.carrier.GetComponent <BaseCharacterAction>().carryingObject?.Release(status.carrier); fizzleBox.Carry(status.carrier); } }
protected abstract void PopFromStack(IRewindStatus rewindStatus);
protected abstract void ForkStatus(IRewindStatus obj);