Compare commits
2 Commits
c7fe7fe43c
...
14c31583e5
Author | SHA1 | Date | |
---|---|---|---|
14c31583e5 | |||
1c0478c044 |
|
@ -4,46 +4,10 @@ import * as common from "./danceCommon.js";
|
|||
import { Hand, setDistance, setHeight } from "./rendererConstants.js";
|
||||
import { nameLibFigureParameters, Move, LibFigureDance, chooser_pairz } from "./libfigureMapper.js";
|
||||
import { LowLevelMove, SemanticAnimation, SemanticAnimationKind, animateFromLowLevelMoves } from "./lowLevelMove.js";
|
||||
import { BalanceWeight, CirclePosition, CircleSide, CircleSideOrCenter, DancerDistance, Facing, HandConnection, HandTo, LongLines, PositionKind, SemanticPosition, ShortLinesPosition, StarGrip, oppositeFacing } from "./interpreterCommon.js";
|
||||
import { BalanceWeight, CirclePosition, CircleSide, CircleSideOrCenter, DancerDistance, Facing, HandConnection, HandTo, LongLines, PositionKind, SemanticPosition, ShortLinesPosition, StarGrip, handsFourImproper, handsInCircle, oppositeFacing } from "./interpreterCommon.js";
|
||||
import { dancerIsPair } from "./libfigure/util.js";
|
||||
|
||||
|
||||
const handsInCircle = new Map<Hand, HandConnection>([
|
||||
[Hand.Left, {
|
||||
to: HandTo.LeftInCircle,
|
||||
hand: Hand.Right,
|
||||
}],
|
||||
[Hand.Right, {
|
||||
to: HandTo.RightInCircle,
|
||||
hand: Hand.Left,
|
||||
}],
|
||||
]);
|
||||
const handsFourImproper: Map<common.DancerIdentity, SemanticPosition> = new Map<common.DancerIdentity, SemanticPosition>([
|
||||
[DancerIdentity.OnesLark, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.TopLeft,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.OnesRobin, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.TopRight,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.TwosLark, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.BottomRight,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.TwosRobin, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.BottomLeft,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
]);
|
||||
function handsInShortLine({ which, facing, wavy }: { which: ShortLinesPosition; facing: Facing.Up | Facing.Down; wavy: boolean; }): Map<Hand, HandConnection> {
|
||||
return which.isMiddle() ? new Map<Hand, HandConnection>([
|
||||
[Hand.Left, { hand: wavy ? Hand.Right : Hand.Left, to: HandTo.DancerLeft }],
|
||||
|
@ -1637,6 +1601,39 @@ function moveAsLowLevelMoves({ move, nextMove, startingPos, numProgessions }: {
|
|||
}
|
||||
});
|
||||
|
||||
case "right left through":
|
||||
if (move.parameters.dir !== "across") {
|
||||
throw new Error(move.move + " with dir " + move.parameters.dir + " is unsupported.");
|
||||
}
|
||||
|
||||
return handleCircleMove(({startPos}) => {
|
||||
const startingPos = { ...startPos, facing: startPos.which.facingAcross() };
|
||||
return combine([
|
||||
{
|
||||
beats: move.beats / 2,
|
||||
endPosition: {...startingPos, which: startingPos.which.swapAcross()},
|
||||
movementPattern: {
|
||||
kind: SemanticAnimationKind.PassBy,
|
||||
side: Hand.Right,
|
||||
withHands: true,
|
||||
facing: "Start",
|
||||
around: startingPos.which.topBottomSide(),
|
||||
},
|
||||
},
|
||||
{
|
||||
beats: move.beats / 2,
|
||||
endPosition: {
|
||||
...startingPos,
|
||||
which: startingPos.which.swapDiagonal(),
|
||||
facing: startingPos.which.facingOut()
|
||||
},
|
||||
movementPattern: {
|
||||
kind: SemanticAnimationKind.CourtesyTurn,
|
||||
},
|
||||
}
|
||||
], startingPos);
|
||||
});
|
||||
|
||||
case "hey":
|
||||
if (move.parameters.dir !== "across") {
|
||||
throw new Error("Unsupported hey direction: " + move.parameters.dir);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Rotation } from "./danceCommon.js";
|
||||
import { DancerIdentity, Rotation } from "./danceCommon.js";
|
||||
import { Hand } from "./rendererConstants.js";
|
||||
|
||||
export enum PositionKind {
|
||||
|
@ -326,3 +326,40 @@ export type SemanticPosition = {
|
|||
balance?: BalanceWeight,
|
||||
dancerDistance?: DancerDistance,
|
||||
};
|
||||
|
||||
export const handsInCircle = new Map<Hand, HandConnection>([
|
||||
[Hand.Left, {
|
||||
to: HandTo.LeftInCircle,
|
||||
hand: Hand.Right,
|
||||
}],
|
||||
[Hand.Right, {
|
||||
to: HandTo.RightInCircle,
|
||||
hand: Hand.Left,
|
||||
}],
|
||||
]);
|
||||
export const handsFourImproper: Map<DancerIdentity, SemanticPosition> = new Map<DancerIdentity, SemanticPosition>([
|
||||
[DancerIdentity.OnesLark, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.TopLeft,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.OnesRobin, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.TopRight,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.TwosLark, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.BottomRight,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
[DancerIdentity.TwosRobin, {
|
||||
kind: PositionKind.Circle,
|
||||
which: CirclePosition.BottomLeft,
|
||||
facing: Facing.CenterOfCircle,
|
||||
hands: handsInCircle,
|
||||
}],
|
||||
]);
|
|
@ -1,7 +1,7 @@
|
|||
import * as animation from "./animation.js";
|
||||
import * as common from "./danceCommon.js";
|
||||
import { DanceRole, DancerIdentity, Rotation } from "./danceCommon.js";
|
||||
import { BalanceWeight, CirclePosition, CircleSide, CircleSideOrCenter, DancerDistance, Facing, HandConnection, HandTo, LongLines, PositionKind, SemanticPosition, ShortLinesPosition, StarGrip } from "./interpreterCommon.js";
|
||||
import { BalanceWeight, CirclePosition, CircleSide, CircleSideOrCenter, DancerDistance, Facing, HandConnection, HandTo, LongLines, PositionKind, SemanticPosition, ShortLinesPosition, StarGrip, handsInCircle } from "./interpreterCommon.js";
|
||||
import { Move } from "./libfigureMapper.js";
|
||||
import { DancerSetPosition, Hand, Offset, OffsetPlus, OffsetRotate, OffsetTimes, OffsetTranspose, dancerHeightOffset, dancerWidth, lineDistance, offsetZero, setDistance, setHeight, setSpacing, setWidth } from "./rendererConstants.js";
|
||||
|
||||
|
@ -532,6 +532,12 @@ function animateLowLevelMoveWithoutSlide(move: LowLevelMove): animation.Animatio
|
|||
throw "Circle must start and end in a circle.";
|
||||
}
|
||||
|
||||
const posWithHands = SemanticToSetPosition({...move.endPosition, hands: handsInCircle})
|
||||
const circleHands = new Map<Hand, Offset>([
|
||||
[Hand.Left, posWithHands.leftArmEnd!],
|
||||
[Hand.Right, posWithHands.rightArmEnd!],
|
||||
]);
|
||||
|
||||
return [
|
||||
new animation.TransitionAnimationSegment({
|
||||
actualAnimation: new animation.RotationAnimationSegment({
|
||||
|
@ -553,6 +559,7 @@ function animateLowLevelMoveWithoutSlide(move: LowLevelMove): animation.Animatio
|
|||
}),
|
||||
flags: {
|
||||
hands: true,
|
||||
handsDuring: circleHands,
|
||||
},
|
||||
startTransitionBeats: 1
|
||||
}),
|
||||
|
@ -581,6 +588,8 @@ function animateLowLevelMoveWithoutSlide(move: LowLevelMove): animation.Animatio
|
|||
}),
|
||||
flags: {
|
||||
rotation: true,
|
||||
hands: true,
|
||||
handsDuring: "None",
|
||||
},
|
||||
startTransitionBeats: 0,
|
||||
endTransitionBeats: 1,
|
||||
|
|
Loading…
Reference in New Issue
Block a user