/// <summary> /// Advance the controller and return the new position /// </summary> /// <param name="tf">the current virtual position (either TF or World Units)</param> /// <param name="direction">the current direction</param> /// <param name="mode">movement mode</param> /// <param name="absSpeed">speed, always positive</param> /// <param name="clamping">clamping mode</param> protected override void Advance(ref float tf, ref int direction, MoveModeEnum mode, float absSpeed, CurvyClamping clamping) { _active = this; switch (mode) { case MoveModeEnum.AbsoluteExtrapolate: if (UseCache) { Spline.MoveByFast(ref tf, ref direction, absSpeed, Clamping); if (IsSwitching) { mSwitchEventArgs.Spline.MoveByFast(ref mSwitchEventArgs.TF, ref mSwitchEventArgs.Direction, absSpeed, Clamping); onSwitchEvent(mSwitchEventArgs); } } else { Spline.MoveBy(ref tf, ref direction, absSpeed, Clamping); if (IsSwitching) { mSwitchEventArgs.Spline.MoveBy(ref mSwitchEventArgs.TF, ref mSwitchEventArgs.Direction, absSpeed, Clamping); onSwitchEvent(mSwitchEventArgs); } } break; case MoveModeEnum.AbsolutePrecise: Spline.MoveByLengthFast(ref tf, ref direction, absSpeed, Clamping); if (IsSwitching) { mSwitchEventArgs.Spline.MoveByLengthFast(ref mSwitchEventArgs.TF, ref mSwitchEventArgs.Direction, absSpeed, Clamping); onSwitchEvent(mSwitchEventArgs); } break; default: // Relative if (UseCache) { Spline.MoveFast(ref tf, ref direction, absSpeed, Clamping); if (IsSwitching) { mSwitchEventArgs.Spline.MoveFast(ref mSwitchEventArgs.TF, ref mSwitchEventArgs.Direction, absSpeed, Clamping); onSwitchEvent(mSwitchEventArgs); } } else { Spline.Move(ref tf, ref direction, absSpeed, Clamping); if (IsSwitching) { mSwitchEventArgs.Spline.Move(ref mSwitchEventArgs.TF, ref mSwitchEventArgs.Direction, absSpeed, Clamping); onSwitchEvent(mSwitchEventArgs); } } break; } _active = null; }
/// <summary> /// Advance the controller and return the new position /// </summary> /// <param name="virtualPosition">the current virtual position (either TF or World Units) </param> /// <param name="direction">the current direction</param> /// <param name="mode">movement mode</param> /// <param name="absSpeed">speed, always positive</param> /// <param name="clamping">clamping mode</param> protected override void Advance(ref float virtualPosition, ref int direction, MoveModeEnum mode, float absSpeed, CurvyClamping clamping) { switch (mode) { case MoveModeEnum.Relative: VolumeData.Move(ref virtualPosition, ref direction, absSpeed, clamping); break; default: VolumeData.MoveBy(ref virtualPosition, ref direction, absSpeed, clamping); break; } }
/// <summary> /// Advances the specified virtual position. /// </summary> /// <param name="virtualPosition">The virtual position.</param> /// <param name="direction">The direction.</param> /// <param name="mode">The mode.</param> /// <param name="absSpeed">The abs speed.</param> /// <param name="clamping">The clamping.</param> protected override void Advance(ref float virtualPosition, ref int direction, MoveModeEnum mode, float absSpeed, CurvyClamping clamping) { switch (mode) { case MoveModeEnum.Relative: PathData.Move(ref virtualPosition, ref direction, absSpeed, clamping); break; default: PathData.MoveBy(ref virtualPosition, ref direction, absSpeed, clamping); break; } }
/// <summary> /// Advance the controller and return the new position /// </summary> /// <param name="tf">the current virtual position (either TF or World Units) </param> /// <param name="direction">the current direction</param> /// <param name="mode">movement mode</param> /// <param name="absSpeed">speed, always positive</param> /// <param name="clamping">clamping mode</param> protected virtual void Advance(ref float tf, ref int direction, MoveModeEnum mode, float absSpeed, CurvyClamping clamping) { }