Skip to content

Commit 5b0f2fc

Browse files
committed
feat: add support of "repeatCount" in animation groups in cinematic editor
1 parent 28299fd commit 5b0f2fc

File tree

6 files changed

+41
-4
lines changed

6 files changed

+41
-4
lines changed

editor/src/editor/layout/cinematic/inspector/animation-group.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ export function CinematicEditorAnimationGroupKeyInspector(props: ICinematicEdito
6969
props.cinematicEditor.updateTracksAtCurrentTime();
7070
}}
7171
/>
72+
73+
<EditorInspectorNumberField
74+
object={props.cinematicKey}
75+
property="repeatCount"
76+
label="Repeat Count"
77+
step={1}
78+
min={0}
79+
onChange={() => {
80+
props.cinematicEditor.inspector.forceUpdate();
81+
props.cinematicEditor.updateTracksAtCurrentTime();
82+
}}
83+
/>
7284
</EditorInspectorSectionField>
7385
);
7486
}

editor/src/editor/layout/cinematic/timelines/keys/animation-group.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ export interface ICinematicEditorAnimationGroupKeyProps {
1111

1212
export function CinematicEditorAnimationGroupKey(props: ICinematicEditorAnimationGroupKeyProps) {
1313
function getAnimationGroupFramesCount() {
14-
return props.cinematicKey.endFrame - props.cinematicKey.startFrame;
14+
let framesCount = props.cinematicKey.endFrame - props.cinematicKey.startFrame;
15+
if (props.cinematicKey.repeatCount) {
16+
framesCount += framesCount * props.cinematicKey.repeatCount;
17+
}
18+
19+
return framesCount;
1520
}
1621

1722
return (

editor/src/editor/layout/cinematic/tools/sync.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ export function syncAnimationGroupsToFrame(frame: number, cinematic: ICinematic,
1414
}
1515

1616
track.animationGroups?.forEach((configuration) => {
17-
const endFrame = configuration.frame + (configuration.endFrame - configuration.startFrame) / configuration.speed;
17+
let framesCount = configuration.endFrame - configuration.startFrame;
18+
if (configuration.repeatCount) {
19+
framesCount += framesCount * configuration.repeatCount;
20+
}
21+
22+
const endFrame = configuration.frame + framesCount / configuration.speed;
1823
if (configuration.frame > frame || endFrame < frame) {
1924
return;
2025
}

editor/src/editor/layout/inspector/material/pbr.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ export class EditorPBRMaterialInspector extends Component<IEditorPBRMaterialInsp
256256
<EditorInspectorNumberField label="Z Offset" object={this.props.material} property="zOffset" />
257257
<EditorInspectorNumberField label="Z Offset Units" object={this.props.material} property="zOffsetUnits" />
258258
<EditorInspectorSwitchField label="Fog Enabled" object={this.props.material} property="fogEnabled" />
259+
<EditorInspectorSwitchField label="Use Logarithmic Depth" object={this.props.material} property="useLogarithmicDepth" />
259260
</EditorInspectorSectionField>
260261
</>
261262
);

tools/src/cinematic/generate.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,24 @@ export function generateCinematicAnimationGroup(cinematic: ICinematic, scene: Sc
7171
track.animationGroups.forEach((configuration) => {
7272
animationGroupsAnimation.addEvent(
7373
new AnimationEvent(configuration.frame, () => {
74-
effectiveAnimationGroup.from = configuration.startFrame;
74+
const repeatCount = configuration.repeatCount ?? 0;
75+
7576
effectiveAnimationGroup.to = configuration.endFrame;
7677
effectiveAnimationGroup.speedRatio = configuration.speed;
7778
effectiveAnimationGroup.stop();
79+
effectiveAnimationGroup.play(repeatCount > 0);
7880
effectiveAnimationGroup.goToFrame(configuration.startFrame);
79-
effectiveAnimationGroup.play(false);
81+
82+
if (repeatCount) {
83+
let currentRepeatCount = 0;
84+
effectiveAnimationGroup.onAnimationGroupLoopObservable.add(() => {
85+
++currentRepeatCount;
86+
87+
if (currentRepeatCount > repeatCount) {
88+
effectiveAnimationGroup.stop();
89+
}
90+
});
91+
}
8092
})
8193
);
8294
});

tools/src/cinematic/typings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ export interface ICinematicAnimationGroup {
3434
speed: number;
3535
startFrame: number;
3636
endFrame: number;
37+
38+
repeatCount?: number;
3739
}
3840

3941
export interface ICinematicKey extends IAnimationKey {

0 commit comments

Comments
 (0)