using System; using System.Collections.Generic; using System.Text; using SalsaModel.Scheduling; namespace SalsaModel.Actions { class SRTurn : IAction { readonly PositionModel.Side _stepWith; readonly double _stepDistance; readonly SalsaMover _mover; double _initAngle; double _addToAngle; public SRTurn(SalsaMover mover, PositionModel.Side stepWith, double distance) { _mover = mover; _stepWith = stepWith; _stepDistance = distance; } TimeLine _timeLine = new TimeLine(); public void Start() { _initAngle = _mover.Model.ForwardUnit().XYOrientation(); _addToAngle = Math.PI * 2; // two steps CubanMotionAction.AddTo(_timeLine, 0, 0.33, _mover, _stepWith, _stepDistance, Math.PI); CubanMotionAction.AddTo(_timeLine, 0.33, 0.67, _mover, PositionModel.Other(_stepWith), _stepDistance, Math.PI); _prev = -1; _timeLine.RunActions(_prev, 0); _prev = 0; } double _prev; public void Update(double now) { _mover.RotateFootAroundToeBy(PositionModel.Side.Left, _addToAngle * (now - _prev)); _mover.RotateFootAroundToeBy(PositionModel.Side.Right, _addToAngle * (now - _prev)); _timeLine.RunActions(_prev, now); _prev = now; } public void End() { } public string DescriptiveCode { get { return "SR turn"; } } } }