using System; using System.Collections.Generic; using System.Text; using SalsaModel.Actions; using SalsaModel.Scheduling; namespace SalsaModel.Sequences { [Sequence("Open Hold Demo")] class OpenHoldDemo : ISequenceProvider { public void AddMoves(SalsaModel.Scheduling.TimeLine timeline, double startTime, SalsaMover boy, SalsaMover girl) { DoIt(timeline, startTime, boy, girl, PositionModel.Side.Right, new Hold(GrabBy.Nothing, GrabBy.LeftHand)); DoIt(timeline, startTime + 8, boy, girl, PositionModel.Side.Left, new Hold(GrabBy.RightHand, GrabBy.Nothing)); DoIt(timeline, startTime + 16, boy, girl, PositionModel.Side.Right, new Hold(GrabBy.Nothing, GrabBy.RightHand)); DoIt(timeline, startTime + 24, boy, girl, PositionModel.Side.Right, new Hold(GrabBy.RightHand, GrabBy.LeftHand)); } private static void DoIt(SalsaModel.Scheduling.TimeLine timeline, double startTime, SalsaMover boy, SalsaMover girl, PositionModel.Side leaderHoldSide, Hold hold) { PositionModel.Side followerHoldSide = hold.GetHandSide(leaderHoldSide); double high = girl.Body.Trunk; { double x = getnaturalXPos(leaderHoldSide, followerHoldSide); MoveHandAndFollow(timeline, startTime + 0.0, 1.0, boy, leaderHoldSide, girl, hold, new Location(x, 30, high), PositionModel.Side.Left, -15); MoveHandAndFollow(timeline, startTime + 1.0, 1.0, boy, leaderHoldSide, girl, hold, new Location(x, 30, 15), PositionModel.Side.Right, -15); MoveHandAndFollow(timeline, startTime + 2.0, 2.0, boy, leaderHoldSide, girl, hold, new Location(x, 30, 15), PositionModel.Side.Left, 20); MoveHandAndFollow(timeline, startTime + 4.0, 1.0, boy, leaderHoldSide, girl, hold, new Location(x, 30, 15), PositionModel.Side.Right, 15); MoveHandAndFollow(timeline, startTime + 5.0, 1.0, boy, leaderHoldSide, girl, hold, new Location(x, 30, high), PositionModel.Side.Left, 15); MoveHandAndFollow(timeline, startTime + 6.0, 1.8, boy, leaderHoldSide, girl, hold, new Location(x, 30, high), PositionModel.Side.Right, -20); } } private static double getnaturalXPos(PositionModel.Side leaderHoldSide, PositionModel.Side followerHoldSide) { double x; if (leaderHoldSide == followerHoldSide) { x = 0; } else { x = 10; if (leaderHoldSide == PositionModel.Side.Right) x *= -1; } return x; } public static void MoveHandAndFollow(TimeLine timeline, double start, double duration, SalsaMover leader, PositionModel.Side leaderHoldSide, SalsaMover follower, Hold hold, Location leaderHoldPos, PositionModel.Side leaderStepSide, double distance) { PositionModel.Side followerHoldSide = hold.GetHandSide(leaderHoldSide); timeline.Add(start, duration, new MoveFootAction(leader, leaderStepSide, distance)); CubanMotionAction toFollow = new CubanMotionAction(leader, leaderStepSide, distance, 0); timeline.Add(start, duration, toFollow); timeline.Add(start, duration, new MoveHand(leaderHoldSide, leader, leaderHoldPos)); timeline.Add(start, duration, new LeadWithHand(follower, leader, toFollow, PositionModel.Other(leaderStepSide), followerHoldSide, leaderHoldPos)); if (hold.GetOther(leaderHoldSide) != GrabBy.Nothing) { PositionModel.Side leaderNonLeadHand = PositionModel.Other(leaderHoldSide); PositionModel.Side followerNonLeadHand = hold.GetHandSide(leaderNonLeadHand); timeline.Add(start, duration, new MoveHand(leaderNonLeadHand, leader, leaderHoldPos)); timeline.Add(start, duration, new JustFollowWithHand(follower, followerNonLeadHand, leader, leaderNonLeadHand)); } } } }