@gamepark/react-game 7.3.2 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/components/GameProvider/GameProvider.js +2 -3
  2. package/dist/components/GameProvider/GameProvider.js.map +1 -1
  3. package/dist/components/Header/HeaderText.d.ts +6 -1
  4. package/dist/components/Header/HeaderText.js +14 -5
  5. package/dist/components/Header/HeaderText.js.map +1 -1
  6. package/dist/components/JournalTabs/JournalTabs.js +1 -1
  7. package/dist/components/JournalTabs/JournalTabs.js.map +1 -1
  8. package/dist/components/LoadingScreen/LoadingScreen.js +5 -0
  9. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  10. package/dist/components/material/DraggableMaterial.d.ts +12 -2
  11. package/dist/components/material/DraggableMaterial.js +47 -57
  12. package/dist/components/material/DraggableMaterial.js.map +1 -1
  13. package/dist/components/material/GameTable/DynamicItemsDisplay.js +53 -8
  14. package/dist/components/material/GameTable/DynamicItemsDisplay.js.map +1 -1
  15. package/dist/components/material/GameTable/GameMaterialDisplay.js +5 -2
  16. package/dist/components/material/GameTable/GameMaterialDisplay.js.map +1 -1
  17. package/dist/components/material/GameTable/GameTable.d.ts +1 -0
  18. package/dist/components/material/GameTable/GameTable.js +49 -18
  19. package/dist/components/material/GameTable/GameTable.js.map +1 -1
  20. package/dist/components/material/GameTable/GameTableNavigation.js +7 -0
  21. package/dist/components/material/GameTable/GameTableNavigation.js.map +1 -1
  22. package/dist/components/material/GameTable/ItemDisplay.js +4 -4
  23. package/dist/components/material/GameTable/ItemDisplay.js.map +1 -1
  24. package/dist/components/material/GameTable/StaticItemsDisplay.js +21 -6
  25. package/dist/components/material/GameTable/StaticItemsDisplay.js.map +1 -1
  26. package/dist/components/material/GameTable/focus/FocusProvider.js +11 -5
  27. package/dist/components/material/GameTable/focus/FocusProvider.js.map +1 -1
  28. package/dist/components/material/GameTable/focus/NoZoomFocusProvider.js +2 -2
  29. package/dist/components/material/GameTable/focus/NoZoomFocusProvider.js.map +1 -1
  30. package/dist/components/material/GameTable/focus/index.d.ts +1 -0
  31. package/dist/components/material/GameTable/focus/index.js +1 -0
  32. package/dist/components/material/GameTable/focus/index.js.map +1 -1
  33. package/dist/components/material/GameTable/index.d.ts +2 -0
  34. package/dist/components/material/GameTable/index.js +2 -0
  35. package/dist/components/material/GameTable/index.js.map +1 -1
  36. package/dist/components/material/MaterialDescription.d.ts +1 -1
  37. package/dist/components/material/MaterialDescription.js +10 -13
  38. package/dist/components/material/MaterialDescription.js.map +1 -1
  39. package/dist/components/material/animations/AnimationBuilder.d.ts +160 -0
  40. package/dist/components/material/animations/AnimationBuilder.js +287 -0
  41. package/dist/components/material/animations/AnimationBuilder.js.map +1 -0
  42. package/dist/components/material/animations/CreateItemAnimations.d.ts +4 -2
  43. package/dist/components/material/animations/CreateItemAnimations.js +91 -10
  44. package/dist/components/material/animations/CreateItemAnimations.js.map +1 -1
  45. package/dist/components/material/animations/DeleteItemAnimations.d.ts +4 -8
  46. package/dist/components/material/animations/DeleteItemAnimations.js +24 -14
  47. package/dist/components/material/animations/DeleteItemAnimations.js.map +1 -1
  48. package/dist/components/material/animations/DeleteItemAtOnceAnimations.d.ts +3 -1
  49. package/dist/components/material/animations/DeleteItemAtOnceAnimations.js +16 -4
  50. package/dist/components/material/animations/DeleteItemAtOnceAnimations.js.map +1 -1
  51. package/dist/components/material/animations/ItemAnimations.d.ts +46 -1
  52. package/dist/components/material/animations/ItemAnimations.js +155 -1
  53. package/dist/components/material/animations/ItemAnimations.js.map +1 -1
  54. package/dist/components/material/animations/MaterialAnimations.d.ts +2 -1
  55. package/dist/components/material/animations/MaterialAnimations.js +6 -6
  56. package/dist/components/material/animations/MaterialAnimations.js.map +1 -1
  57. package/dist/components/material/animations/MaterialGameAnimations.d.ts +94 -1
  58. package/dist/components/material/animations/MaterialGameAnimations.js +150 -2
  59. package/dist/components/material/animations/MaterialGameAnimations.js.map +1 -1
  60. package/dist/components/material/animations/MoveItemAnimations.d.ts +3 -1
  61. package/dist/components/material/animations/MoveItemAnimations.js +51 -7
  62. package/dist/components/material/animations/MoveItemAnimations.js.map +1 -1
  63. package/dist/components/material/animations/MoveItemAtOnceAnimations.d.ts +5 -2
  64. package/dist/components/material/animations/MoveItemAtOnceAnimations.js +57 -5
  65. package/dist/components/material/animations/MoveItemAtOnceAnimations.js.map +1 -1
  66. package/dist/components/material/animations/Trajectory.d.ts +132 -0
  67. package/dist/components/material/animations/Trajectory.js +87 -0
  68. package/dist/components/material/animations/Trajectory.js.map +1 -0
  69. package/dist/components/material/animations/index.d.ts +3 -0
  70. package/dist/components/material/animations/index.js +3 -0
  71. package/dist/components/material/animations/index.js.map +1 -1
  72. package/dist/hooks/index.d.ts +1 -0
  73. package/dist/hooks/index.js +1 -0
  74. package/dist/hooks/index.js.map +1 -1
  75. package/dist/hooks/useLegalMoves.js +2 -1
  76. package/dist/hooks/useLegalMoves.js.map +1 -1
  77. package/dist/hooks/useMaterialContextRef.d.ts +10 -0
  78. package/dist/hooks/useMaterialContextRef.js +12 -0
  79. package/dist/hooks/useMaterialContextRef.js.map +1 -0
  80. package/dist/hooks/usePlayerName.js +1 -1
  81. package/dist/hooks/usePlayerName.js.map +1 -1
  82. package/dist/hooks/useUndo.js +12 -3
  83. package/dist/hooks/useUndo.js.map +1 -1
  84. package/dist/locators/DeckLocator.d.ts +3 -1
  85. package/dist/locators/DeckLocator.js +6 -0
  86. package/dist/locators/DeckLocator.js.map +1 -1
  87. package/dist/locators/HandLocator.d.ts +1 -0
  88. package/dist/locators/HandLocator.js +3 -0
  89. package/dist/locators/HandLocator.js.map +1 -1
  90. package/dist/locators/ListLocator.d.ts +1 -0
  91. package/dist/locators/ListLocator.js +3 -0
  92. package/dist/locators/ListLocator.js.map +1 -1
  93. package/dist/locators/Locator.d.ts +39 -0
  94. package/dist/locators/Locator.js +74 -1
  95. package/dist/locators/Locator.js.map +1 -1
  96. package/dist/locators/PileLocator.d.ts +1 -0
  97. package/dist/locators/PileLocator.js +3 -0
  98. package/dist/locators/PileLocator.js.map +1 -1
  99. package/dist/utilities/translation.util.js +1 -1
  100. package/dist/utilities/translation.util.js.map +1 -1
  101. package/package.json +79 -78
@@ -2,16 +2,113 @@ import { Animations, AnimationStep } from '@gamepark/react-client';
2
2
  import { isEndPlayerTurn, MoveKind } from '@gamepark/rules-api';
3
3
  import { uniq } from 'es-toolkit';
4
4
  import { ensureMaterialSoundConfig } from '../sound/sound.utils';
5
+ import { AnimationBuilder, isMaterial, isMoveType, isRule } from './AnimationBuilder';
5
6
  import { ItemAnimations } from './ItemAnimations';
6
7
  import { MaterialAnimations } from './MaterialAnimations';
7
8
  export class MaterialGameAnimations extends Animations {
9
+ /** @internal Animation configurations from the legacy .when() API */
8
10
  animationConfigs = [];
11
+ /** @internal Animation builders from the new .configure() API */
12
+ animationBuilders = [];
13
+ /** @internal Default animation configuration */
9
14
  defaultAnimationConfig = new AnimationConfig();
15
+ /** @internal Default animation builder for new API */
16
+ _defaultBuilder = new AnimationBuilder();
17
+ // ==========================================
18
+ // Legacy API (backward compatible)
19
+ // ==========================================
20
+ /**
21
+ * @deprecated Use configure() instead for the new trajectory API.
22
+ * Create a new animation configuration with filter chain.
23
+ */
10
24
  when() {
11
25
  const animationConfig = new AnimationConfig();
12
26
  this.animationConfigs.push(animationConfig);
13
27
  return animationConfig;
14
28
  }
29
+ // ==========================================
30
+ // New API
31
+ // ==========================================
32
+ /**
33
+ * Configure animations for moves matching a predicate.
34
+ * @param predicate Function to determine if this configuration applies
35
+ * @returns AnimationBuilder for fluent configuration
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * animations.configure(and(isRule(RuleId.PlayCard), isMyMove()))
40
+ * .duration(800)
41
+ * .arc(15)
42
+ * ```
43
+ */
44
+ configure(predicate) {
45
+ const builder = new AnimationBuilder();
46
+ builder.filter(predicate);
47
+ this.animationBuilders.push(builder);
48
+ return builder;
49
+ }
50
+ /**
51
+ * Configure animations for moves during a specific rule.
52
+ * @param ruleId The rule ID to match
53
+ * @returns AnimationBuilder for fluent configuration
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * animations.forRule(RuleId.PlayCard)
58
+ * .duration(600)
59
+ * .via(LocationType.TableCenter)
60
+ * ```
61
+ */
62
+ forRule(ruleId) {
63
+ return this.configure(isRule(ruleId));
64
+ }
65
+ /**
66
+ * Configure animations for a specific item move type.
67
+ * @param moveType The item move type to match (Create, Move, Delete, etc.)
68
+ * @returns AnimationBuilder for fluent configuration
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * animations.forMove(ItemMoveType.Move)
73
+ * .duration(500)
74
+ * .arc(12)
75
+ * ```
76
+ */
77
+ forMove(moveType) {
78
+ return this.configure(isMoveType(moveType));
79
+ }
80
+ /**
81
+ * Configure animations for a specific material type.
82
+ * @param materialType The material type to match
83
+ * @returns AnimationBuilder for fluent configuration
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * animations.forMaterial(MaterialType.Card)
88
+ * .duration(400)
89
+ * .flat() // No arc for cards
90
+ * ```
91
+ */
92
+ forMaterial(materialType) {
93
+ return this.configure(isMaterial(materialType));
94
+ }
95
+ /**
96
+ * Configure default animations (applies to all moves not matched by other configurations).
97
+ * @returns AnimationBuilder for fluent configuration
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * animations.defaults()
102
+ * .duration(600)
103
+ * .arc({ height: 8, peak: 0.4 })
104
+ * ```
105
+ */
106
+ defaults() {
107
+ return this._defaultBuilder;
108
+ }
109
+ // ==========================================
110
+ // Internal methods
111
+ // ==========================================
15
112
  getDuration(move, context) {
16
113
  const materialContext = {
17
114
  rules: new context.Rules(context.game),
@@ -20,8 +117,34 @@ export class MaterialGameAnimations extends Animations {
20
117
  player: context.playerId,
21
118
  action: context.action
22
119
  };
120
+ // Check new API builders first
121
+ const builder = this.getAnimationBuilder(move, materialContext);
122
+ if (builder) {
123
+ return builder.getDuration(move, context);
124
+ }
125
+ // Fall back to legacy API
23
126
  return this.getAnimationConfig(move, materialContext).getDuration(move, context);
24
127
  }
128
+ /**
129
+ * Find matching animation builder from new API.
130
+ * @internal
131
+ */
132
+ getAnimationBuilder(move, context) {
133
+ for (const builder of this.animationBuilders) {
134
+ if (builder.matches(move, context)) {
135
+ return builder;
136
+ }
137
+ }
138
+ // Check if default builder has any configuration
139
+ if (this._defaultBuilder.durationSeconds !== undefined || typeof this._defaultBuilder.trajectoryConfig === 'function' || this._defaultBuilder.trajectoryConfig.elevation !== undefined) {
140
+ return this._defaultBuilder;
141
+ }
142
+ return undefined;
143
+ }
144
+ /**
145
+ * Find matching animation config from legacy API.
146
+ * @internal
147
+ */
25
148
  getAnimationConfig(move, context) {
26
149
  for (const animationConfig of this.animationConfigs) {
27
150
  if (animationConfig.filters.every(filter => filter(move, context))) {
@@ -30,15 +153,40 @@ export class MaterialGameAnimations extends Animations {
30
153
  }
31
154
  return this.defaultAnimationConfig;
32
155
  }
156
+ /**
157
+ * Get item animation CSS, checking both new and legacy APIs.
158
+ * @internal
159
+ */
160
+ getItemAnimation(context, animation, action, boundaries) {
161
+ const materialContext = {
162
+ ...context,
163
+ action
164
+ };
165
+ // Check new API builders first
166
+ const builder = this.getAnimationBuilder(animation.move, materialContext);
167
+ if (builder) {
168
+ return builder.getItemAnimation(context, animation, boundaries);
169
+ }
170
+ // Fall back to legacy API
171
+ return this.getAnimationConfig(animation.move, materialContext).getItemAnimation(context, animation, boundaries);
172
+ }
33
173
  getSounds() {
34
- return uniq(this.animationConfigs
174
+ const legacySounds = this.animationConfigs
35
175
  .filter(animationConfig => !!animationConfig.s)
36
- .map(animationConfig => ensureMaterialSoundConfig(animationConfig.s).sound));
176
+ .map(animationConfig => ensureMaterialSoundConfig(animationConfig.s).sound);
177
+ const newSounds = this.animationBuilders
178
+ .filter(builder => builder.soundConfig !== undefined && builder.soundConfig !== false)
179
+ .map(builder => ensureMaterialSoundConfig(builder.soundConfig).sound);
180
+ return uniq([...legacySounds, ...newSounds]);
37
181
  }
38
182
  pauseNextConsequenceAnimation(move, _context) {
39
183
  return isEndPlayerTurn(move);
40
184
  }
41
185
  }
186
+ /**
187
+ * @deprecated Use AnimationBuilder with the new configure() API instead.
188
+ * Legacy animation configuration class for backward compatibility.
189
+ */
42
190
  class AnimationConfig extends ItemAnimations {
43
191
  filters = [];
44
192
  d;
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialGameAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MaterialGameAnimations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaterialGameAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MaterialGameAnimations.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@ import { GridBoundaries, MaterialItem, MoveItem } from '@gamepark/rules-api';
4
4
  import { ItemContext } from '../../../locators';
5
5
  import { ItemAnimations } from './ItemAnimations';
6
6
  import { MaterialGameAnimationContext } from './MaterialGameAnimations';
7
+ import { Trajectory } from './Trajectory';
7
8
  export declare class MoveItemAnimations<P extends number = number, M extends number = number, L extends number = number> extends ItemAnimations<P, M, L> {
8
9
  protected duration: number;
9
10
  protected droppedItemDuration: number;
10
- constructor(duration?: number, droppedItemDuration?: number);
11
+ protected trajectory?: Trajectory<P, M, L> | undefined;
12
+ constructor(duration?: number, droppedItemDuration?: number, trajectory?: Trajectory<P, M, L> | undefined);
11
13
  getPreDuration(move: MoveItem<P, M, L>, context: MaterialGameAnimationContext<P, M, L>): number;
12
14
  getItemAnimation(context: ItemContext<P, M, L>, animation: Animation<MoveItem<P, M, L>>, boundaries: GridBoundaries): Interpolation<Theme>;
13
15
  getMovedItemAnimation(context: ItemContext<P, M, L>, animation: Animation<MoveItem<P, M, L>>, boundaries: GridBoundaries): Interpolation<Theme>;
@@ -8,10 +8,12 @@ import { transformItem } from './transformItem.util';
8
8
  export class MoveItemAnimations extends ItemAnimations {
9
9
  duration;
10
10
  droppedItemDuration;
11
- constructor(duration = 1, droppedItemDuration = 0.2) {
11
+ trajectory;
12
+ constructor(duration = 1, droppedItemDuration = 0.2, trajectory) {
12
13
  super();
13
14
  this.duration = duration;
14
15
  this.droppedItemDuration = droppedItemDuration;
16
+ this.trajectory = trajectory;
15
17
  }
16
18
  getPreDuration(move, context) {
17
19
  const potentialDroppedItem = { type: move.itemType, index: move.itemIndex };
@@ -45,8 +47,23 @@ export class MoveItemAnimations extends ItemAnimations {
45
47
  // TODO: if animation.move.quantity > 1, we will have to give a different target to each moving item. Formula bellow works only if 1 item moves
46
48
  const futureDisplayIndex = (futureItem.quantity ?? 1) - (animation.move.quantity ?? 1);
47
49
  const futureContext = { ...context, rules: futureRules, index: futureIndex, displayIndex: futureDisplayIndex };
48
- const currentTransforms = toSingleRotation(transformItem(context));
49
50
  const targetTransforms = toSingleRotation(description?.getItemTransform(futureItem, futureContext) ?? []);
51
+ // For dropped items, the drag transform is not available in the animation context,
52
+ // so we only specify the target keyframe and let CSS animate from the current visual position (the drop position).
53
+ if (isDroppedItem(context)) {
54
+ const item = getItemFromContext(context);
55
+ const currentOrigin = context.locators[item.location.type]?.getLocationOrigin(item.location, context) ?? defaultOrigin;
56
+ const futureOrigin = context.locators[futureItem.location.type]?.getLocationOrigin(futureItem.location, futureContext) ?? defaultOrigin;
57
+ if (currentOrigin.x !== futureOrigin.x) {
58
+ targetTransforms.unshift(`translateX(${getOriginDeltaPosition(boundaries.xMin, boundaries.xMax, futureOrigin.x, currentOrigin.x)}em)`);
59
+ }
60
+ if (currentOrigin.y !== futureOrigin.y) {
61
+ targetTransforms.unshift(`translateY(${getOriginDeltaPosition(boundaries.yMin, boundaries.yMax, futureOrigin.y, currentOrigin.y)}em)`);
62
+ }
63
+ const animationKeyframes = this.getKeyframesToDestination(targetTransforms.join(' '), animation, context);
64
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
65
+ }
66
+ const currentTransforms = toSingleRotation(transformItem(context));
50
67
  toClosestRotations(currentTransforms, targetTransforms);
51
68
  const item = getItemFromContext(context);
52
69
  const currentOrigin = context.locators[item.location.type]?.getLocationOrigin(item.location, context) ?? defaultOrigin;
@@ -57,8 +74,20 @@ export class MoveItemAnimations extends ItemAnimations {
57
74
  if (currentOrigin.y !== futureOrigin.y) {
58
75
  targetTransforms.unshift(`translateY(${getOriginDeltaPosition(boundaries.yMin, boundaries.yMax, futureOrigin.y, currentOrigin.y)}em)`);
59
76
  }
60
- const animationKeyframes = this.getTransformKeyframes(currentTransforms.join(' '), targetTransforms.join(' '), animation, context);
61
- return description?.getAnimationCss(animationKeyframes, animation.duration);
77
+ // Check if trajectory is configured (either in this instance or in context)
78
+ const contextWithTrajectory = context;
79
+ const trajectory = this.trajectory ?? contextWithTrajectory.trajectory;
80
+ if (trajectory) {
81
+ // Use new trajectory-based animation (single div, integrated elevation)
82
+ const trajectoryContext = { ...context, trajectory };
83
+ const animationKeyframes = this.getTrajectoryKeyframes(currentTransforms, targetTransforms, animation, trajectoryContext);
84
+ return this.getAnimationCssWithTrajectory(animationKeyframes, animation.duration, trajectory.easing, trajectory.elevation);
85
+ }
86
+ else {
87
+ // Use legacy two-div animation
88
+ const animationKeyframes = this.getTransformKeyframes(currentTransforms.join(' '), targetTransforms.join(' '), animation, context);
89
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
90
+ }
62
91
  }
63
92
  getItemIndexAfterMove({ rules }, move) {
64
93
  const items = rules.game.items[move.itemType];
@@ -83,11 +112,26 @@ export class MoveItemAnimations extends ItemAnimations {
83
112
  const futureRules = new Rules(JSON.parse(JSON.stringify(rules.game)), { player });
84
113
  futureRules.play(animation.move);
85
114
  const futureContext = { ...context, rules: futureRules };
86
- const originTransforms = transformItem(context);
87
115
  const targetTransforms = description?.getItemTransform(item, futureContext) ?? [];
116
+ // For children of dropped items, only specify the target keyframe (no origin).
117
+ if (isDroppedItem(context)) {
118
+ const animationKeyframes = this.getKeyframesToDestination(targetTransforms.join(' '), animation, context);
119
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
120
+ }
121
+ const originTransforms = transformItem(context);
88
122
  toClosestRotations(originTransforms, targetTransforms);
89
- const animationKeyframes = this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
90
- return description?.getAnimationCss(animationKeyframes, animation.duration);
123
+ // Check if trajectory is configured
124
+ const contextWithTrajectory = context;
125
+ const trajectory = this.trajectory ?? contextWithTrajectory.trajectory;
126
+ if (trajectory) {
127
+ const trajectoryContext = { ...context, trajectory };
128
+ const animationKeyframes = this.getTrajectoryKeyframes(originTransforms, targetTransforms, animation, trajectoryContext);
129
+ return this.getAnimationCssWithTrajectory(animationKeyframes, animation.duration, trajectory.easing, trajectory.elevation);
130
+ }
131
+ else {
132
+ const animationKeyframes = this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
133
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
134
+ }
91
135
  }
92
136
  }
93
137
  //# sourceMappingURL=MoveItemAnimations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MoveItemAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MoveItemAnimations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MoveItemAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MoveItemAnimations.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  import { Interpolation, Theme } from '@emotion/react';
2
2
  import { Animation } from '@gamepark/react-client';
3
- import { GridBoundaries, MoveItemsAtOnce } from '@gamepark/rules-api';
3
+ import { GridBoundaries, MaterialItem, MoveItemsAtOnce } from '@gamepark/rules-api';
4
4
  import { ItemContext } from '../../../locators';
5
5
  import { ItemAnimations } from './ItemAnimations';
6
6
  import { MaterialGameAnimationContext } from './MaterialGameAnimations';
7
+ import { Trajectory } from './Trajectory';
7
8
  export declare class MoveItemAtOnceAnimations<P extends number = number, M extends number = number, L extends number = number> extends ItemAnimations<P, M, L> {
8
9
  protected duration: number;
10
+ protected trajectory?: Trajectory<P, M, L> | undefined;
9
11
  protected droppedItemDuration: number;
10
- constructor(duration?: number, droppedItemDuration?: number);
12
+ constructor(duration?: number, trajectory?: Trajectory<P, M, L> | undefined, droppedItemDuration?: number);
11
13
  getPreDuration(move: MoveItemsAtOnce<P, M, L>, context: MaterialGameAnimationContext<P, M, L>): number;
12
14
  getItemAnimation(context: ItemContext<P, M, L>, animation: Animation<MoveItemsAtOnce<P, M, L>>, boundaries: GridBoundaries): Interpolation<Theme>;
13
15
  getMovedItemAnimation(context: ItemContext<P, M, L>, animation: Animation<MoveItemsAtOnce<P, M, L>>, boundaries: GridBoundaries): Interpolation<Theme>;
16
+ getChildItemAnimation(item: MaterialItem<P, L>, context: ItemContext<P, M, L>, animation: Animation<MoveItemsAtOnce<P, M, L>>): Interpolation<Theme>;
14
17
  }
@@ -1,14 +1,17 @@
1
1
  import { defaultOrigin, getItemFromContext, getOriginDeltaPosition } from '../../../locators';
2
2
  import { isDroppedItem } from '../utils/isDroppedItem';
3
+ import { isPlacedOnItem } from '../utils/isPlacedOnItem';
3
4
  import { ItemAnimations } from './ItemAnimations';
4
5
  import { toClosestRotations, toSingleRotation } from './rotations.utils';
5
6
  import { transformItem } from './transformItem.util';
6
7
  export class MoveItemAtOnceAnimations extends ItemAnimations {
7
8
  duration;
9
+ trajectory;
8
10
  droppedItemDuration;
9
- constructor(duration = 1, droppedItemDuration = 0.2) {
11
+ constructor(duration = 1, trajectory, droppedItemDuration = 0.2) {
10
12
  super();
11
13
  this.duration = duration;
14
+ this.trajectory = trajectory;
12
15
  this.droppedItemDuration = droppedItemDuration;
13
16
  }
14
17
  getPreDuration(move, context) {
@@ -22,6 +25,13 @@ export class MoveItemAtOnceAnimations extends ItemAnimations {
22
25
  if (context.type === animation.move.itemType && animation.move.indexes.includes(context.index)) {
23
26
  return this.getMovedItemAnimation(context, animation, boundaries);
24
27
  }
28
+ const item = getItemFromContext(context);
29
+ for (const index of animation.move.indexes) {
30
+ const animatedItemContext = { ...context, type: animation.move.itemType, index };
31
+ if (isPlacedOnItem(item, animatedItemContext)) {
32
+ return this.getChildItemAnimation(item, context, animation);
33
+ }
34
+ }
25
35
  }
26
36
  getMovedItemAnimation(context, animation, boundaries) {
27
37
  const { type, rules, material, player } = context;
@@ -32,9 +42,7 @@ export class MoveItemAtOnceAnimations extends ItemAnimations {
32
42
  const futureItem = futureRules.material(type).getItem(context.index);
33
43
  // TODO: if animation.move.quantity > 1, we will have to give a different target to each moving item. Formula bellow works only if 1 item moves
34
44
  const futureContext = { ...context, rules: futureRules, index: context.index, displayIndex: context.displayIndex };
35
- const originTransforms = toSingleRotation(transformItem(context));
36
45
  const targetTransforms = toSingleRotation(description?.getItemTransform(futureItem, futureContext) ?? []);
37
- toClosestRotations(originTransforms, targetTransforms);
38
46
  const item = getItemFromContext(context);
39
47
  const currentOrigin = context.locators[item.location.type]?.getLocationOrigin(item.location, context) ?? defaultOrigin;
40
48
  const futureOrigin = context.locators[futureItem.location.type]?.getLocationOrigin(futureItem.location, futureContext) ?? defaultOrigin;
@@ -44,8 +52,52 @@ export class MoveItemAtOnceAnimations extends ItemAnimations {
44
52
  if (currentOrigin.y !== futureOrigin.y) {
45
53
  targetTransforms.unshift(`translateY(${getOriginDeltaPosition(boundaries.yMin, boundaries.yMax, futureOrigin.y, currentOrigin.y)}em)`);
46
54
  }
47
- const animationKeyframes = this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
48
- return description?.getAnimationCss(animationKeyframes, animation.duration);
55
+ // For dropped items, only specify the target keyframe (no origin) so CSS animates from the current visual position.
56
+ if (isDroppedItem(context)) {
57
+ const animationKeyframes = this.getKeyframesToDestination(targetTransforms.join(' '), animation, context);
58
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
59
+ }
60
+ const originTransforms = toSingleRotation(transformItem(context));
61
+ toClosestRotations(originTransforms, targetTransforms);
62
+ // Check if trajectory is configured
63
+ const contextWithTrajectory = context;
64
+ const trajectory = this.trajectory ?? contextWithTrajectory.trajectory;
65
+ if (trajectory) {
66
+ const trajectoryContext = { ...context, trajectory };
67
+ const animationKeyframes = this.getTrajectoryKeyframes(originTransforms, targetTransforms, animation, trajectoryContext);
68
+ return this.getAnimationCssWithTrajectory(animationKeyframes, animation.duration, trajectory.easing, trajectory.elevation);
69
+ }
70
+ else {
71
+ const animationKeyframes = this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
72
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
73
+ }
74
+ }
75
+ getChildItemAnimation(item, context, animation) {
76
+ const { type, rules, material, player } = context;
77
+ const description = material[type];
78
+ const Rules = rules.constructor;
79
+ const futureRules = new Rules(JSON.parse(JSON.stringify(rules.game)), { player });
80
+ futureRules.play(animation.move);
81
+ const futureContext = { ...context, rules: futureRules };
82
+ const targetTransforms = description?.getItemTransform(item, futureContext) ?? [];
83
+ // For children of dropped items, only specify the target keyframe (no origin).
84
+ if (isDroppedItem(context)) {
85
+ const animationKeyframes = this.getKeyframesToDestination(targetTransforms.join(' '), animation, context);
86
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
87
+ }
88
+ const originTransforms = transformItem(context);
89
+ toClosestRotations(originTransforms, targetTransforms);
90
+ const contextWithTrajectory = context;
91
+ const trajectory = this.trajectory ?? contextWithTrajectory.trajectory;
92
+ if (trajectory) {
93
+ const trajectoryContext = { ...context, trajectory };
94
+ const animationKeyframes = this.getTrajectoryKeyframes(originTransforms, targetTransforms, animation, trajectoryContext);
95
+ return this.getAnimationCssWithTrajectory(animationKeyframes, animation.duration, trajectory.easing, trajectory.elevation);
96
+ }
97
+ else {
98
+ const animationKeyframes = this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
99
+ return description?.getAnimationCss(animationKeyframes, animation.duration);
100
+ }
49
101
  }
50
102
  }
51
103
  //# sourceMappingURL=MoveItemAtOnceAnimations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MoveItemAtOnceAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MoveItemAtOnceAnimations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MoveItemAtOnceAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/MoveItemAtOnceAnimations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAe,MAAM,mBAAmB,CAAA;AAC1G,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,cAAc,EAA6B,MAAM,kBAAkB,CAAA;AAE5E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,OAAO,wBACX,SAAQ,cAAuB;IAGnB;IACA;IACA;IAHZ,YACY,WAAW,CAAC,EACZ,UAAgC,EAChC,sBAAsB,GAAG;QAEnC,KAAK,EAAE,CAAA;QAJG,aAAQ,GAAR,QAAQ,CAAI;QACZ,eAAU,GAAV,UAAU,CAAsB;QAChC,wBAAmB,GAAnB,mBAAmB,CAAM;IAGrC,CAAC;IAEQ,cAAc,CAAC,IAA8B,EAAE,OAA8C;QACpG,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3F,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,IAAI,CAAC,mBAAmB,CAAA;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,gBAAgB,CAAC,OAA6B,EAAE,SAA8C,EAAE,UAA0B;QACxH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/F,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACxC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,mBAAmB,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAA;YAChF,IAAI,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,OAA6B,EAAE,SAA8C,EAAE,UAA0B;QAC7H,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,WAA4C,CAAA;QAChE,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QACjF,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAE,CAAA;QACrE,+IAA+I;QAC/I,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAA;QAClH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;QACzG,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,aAAa,CAAA;QACtH,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,aAAa,CAAA;QACvI,IAAI,aAAa,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC;YACvC,gBAAgB,CAAC,OAAO,CAAC,cAAc,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACxI,CAAC;QACD,IAAI,aAAa,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC;YACvC,gBAAgB,CAAC,OAAO,CAAC,cAAc,sBAAsB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACxI,CAAC;QAED,oHAAoH;QACpH,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACzG,OAAO,WAAW,EAAE,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7E,CAAC;QAED,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QACjE,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;QAEtD,oCAAoC;QACpC,MAAM,qBAAqB,GAAG,OAA6C,CAAA;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,qBAAqB,CAAC,UAAU,CAAA;QAEtE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,iBAAiB,GAAuC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAA;YACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;YACxH,OAAO,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;QAC5H,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACjI,OAAO,WAAW,EAAE,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,IAAwB,EAAE,OAA6B,EAAE,SAA8C;QAC3H,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,WAA4C,CAAA;QAChE,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QACjF,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;QACxD,MAAM,gBAAgB,GAAG,WAAW,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAA;QAEjF,+EAA+E;QAC/E,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACzG,OAAO,WAAW,EAAE,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7E,CAAC;QAED,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QAC/C,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;QAEtD,MAAM,qBAAqB,GAAG,OAA6C,CAAA;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,qBAAqB,CAAC,UAAU,CAAA;QAEtE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,iBAAiB,GAAuC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAA;YACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;YACxH,OAAO,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAA;QAC5H,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACjI,OAAO,WAAW,EAAE,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,132 @@
1
+ import { keyframes } from '@emotion/react';
2
+ import { Coordinates, Location, MaterialItem } from '@gamepark/rules-api';
3
+ import type { Locator } from '../../../locators';
4
+ /**
5
+ * Configuration for the elevation arc during animation.
6
+ * The elevation is applied in world coordinates (before rotation transforms).
7
+ */
8
+ export interface ElevationConfig {
9
+ /**
10
+ * Maximum height of the arc in em units.
11
+ * @default 10
12
+ */
13
+ height: number;
14
+ /**
15
+ * Position of the peak in the animation (0-1).
16
+ * @default 0.5
17
+ */
18
+ peak?: number;
19
+ /**
20
+ * Shape of the elevation curve.
21
+ * - 'parabolic': smooth parabolic arc (default)
22
+ * - 'linear': triangular arc with linear segments
23
+ * - 'ease': uses CSS ease timing for smoother feel
24
+ */
25
+ curve?: 'parabolic' | 'linear' | 'ease';
26
+ }
27
+ /**
28
+ * A waypoint defines an intermediate position during an animation.
29
+ * @typeParam P - Player ID type
30
+ * @typeParam M - Material type (unused but kept for type consistency)
31
+ * @typeParam L - Location type
32
+ */
33
+ export interface Waypoint<P extends number = number, M extends number = number, L extends number = number> {
34
+ /**
35
+ * Position in the animation timeline (0-1).
36
+ * 0 = start, 1 = end, 0.5 = middle
37
+ */
38
+ at: number;
39
+ /**
40
+ * Use a locator instance to determine the position.
41
+ * The locator will be used with the provided location to compute coordinates.
42
+ */
43
+ locator?: Locator<P, M, L>;
44
+ /**
45
+ * Location parameters to pass to the locator.
46
+ * Can be a static partial location, or a function receiving the animated item
47
+ * to derive location dynamically (e.g., to preserve coordinates from origin).
48
+ *
49
+ * @example
50
+ * // Static location
51
+ * { locator: LocationType.Panel, location: { player: nextPlayer } }
52
+ *
53
+ * // Dynamic: preserve x from item's current location
54
+ * { locator: LocationType.FaceDown, location: (item) => ({ x: item.location.x }) }
55
+ */
56
+ location?: Partial<Location<P, L>> | ((item: MaterialItem<P, L>) => Partial<Location<P, L>>);
57
+ /**
58
+ * Absolute coordinates for this waypoint.
59
+ * Use this instead of locator for fixed positions.
60
+ */
61
+ coordinates?: Partial<Coordinates>;
62
+ /**
63
+ * Offset relative to the linear interpolation between origin and destination.
64
+ * Useful for creating arcs or detours without specifying absolute positions.
65
+ */
66
+ offset?: Partial<Coordinates>;
67
+ /**
68
+ * Override the elevation at this specific waypoint.
69
+ * If not specified, uses the global elevation curve.
70
+ */
71
+ elevation?: number;
72
+ /**
73
+ * Z-axis rotation at this waypoint (in the locator's rotation unit).
74
+ * If not specified, rotation is interpolated linearly.
75
+ */
76
+ rotation?: number;
77
+ /**
78
+ * CSS easing function to use when animating TOWARDS this waypoint.
79
+ * @example 'ease-in', 'ease-out', 'cubic-bezier(0.4, 0, 0.2, 1)'
80
+ */
81
+ easing?: string;
82
+ /** @internal Type brand to ensure M is used */
83
+ _brand?: M;
84
+ }
85
+ /**
86
+ * Complete trajectory configuration for an animation.
87
+ * @typeParam P - Player ID type
88
+ * @typeParam M - Material type (unused but kept for type consistency)
89
+ * @typeParam L - Location type
90
+ */
91
+ export interface Trajectory<P extends number = number, M extends number = number, L extends number = number> {
92
+ /**
93
+ * Elevation configuration for the arc effect.
94
+ * Set to false to disable elevation (flat movement).
95
+ */
96
+ elevation?: ElevationConfig | false;
97
+ /**
98
+ * Intermediate waypoints for the trajectory.
99
+ * Waypoints are sorted by their 'at' value automatically.
100
+ */
101
+ waypoints?: Waypoint<P, M, L>[];
102
+ /**
103
+ * Global CSS easing function for the animation.
104
+ * @default 'ease-in-out'
105
+ */
106
+ easing?: string;
107
+ }
108
+ /**
109
+ * Default elevation configuration (arc of 10em at 50%).
110
+ */
111
+ export declare const defaultElevation: ElevationConfig;
112
+ /**
113
+ * Calculate the elevation value at a given point in time.
114
+ * @param t Progress in the animation (0-1)
115
+ * @param config Elevation configuration
116
+ * @returns Elevation in em units
117
+ */
118
+ export declare function calculateElevation(t: number, config: ElevationConfig | false | undefined): number;
119
+ /**
120
+ * Parse a transform string and extract x, y, z translations.
121
+ * This is used to interpolate between waypoints.
122
+ */
123
+ export declare function extractTranslation(transforms: string[]): Coordinates;
124
+ /**
125
+ * Generate simple elevation keyframes for the parent div.
126
+ * Creates a 3-keyframe arc: from (0) → peak (height) → to (0).
127
+ */
128
+ export declare function getElevationKeyframes(config: ElevationConfig): ReturnType<typeof keyframes>;
129
+ /**
130
+ * Interpolate between two coordinate values.
131
+ */
132
+ export declare function interpolateCoordinate(from: number, to: number, t: number): number;