|
@@ -5,7 +5,7 @@ import {
|
|
|
AnimationModelPath,
|
|
|
AnimationModelSubtitle,
|
|
|
} from "@/api";
|
|
|
-import {
|
|
|
+import sdk, {
|
|
|
AnimationGroup,
|
|
|
AnimationModel3D,
|
|
|
AnimationModelAction3D,
|
|
@@ -66,6 +66,7 @@ export const addAM = (data: AnimationModel): Promise<AnimationModel3D> => {
|
|
|
const am = animationGroup.addAnimationModel(data);
|
|
|
am.bus.on("loadDone", () => {
|
|
|
amMap[key].am = am;
|
|
|
+ console.log('0.0', am)
|
|
|
});
|
|
|
}
|
|
|
},
|
|
@@ -312,27 +313,31 @@ export const addSubtitle = (data: AnimationModelSubtitle) => {
|
|
|
([map, exists]) => {
|
|
|
if (!map?.am) return;
|
|
|
if (exists && !map.subtitles[data.id]) {
|
|
|
- const mountEl = document.querySelector("#app")!
|
|
|
- const layer = document.createElement('div')
|
|
|
- layer.className = 'subtitle'
|
|
|
+ const mountEl = document.querySelector("#app")!;
|
|
|
+ const layer = document.createElement("div");
|
|
|
+ layer.className = "subtitle";
|
|
|
const cleanups = [
|
|
|
watchEffect(() => {
|
|
|
- layer.innerHTML = data.content
|
|
|
- size.value = { width: layer.offsetWidth, height: layer.offsetHeight }
|
|
|
+ layer.innerHTML = data.content;
|
|
|
+ size.value = {
|
|
|
+ width: layer.offsetWidth,
|
|
|
+ height: layer.offsetHeight,
|
|
|
+ };
|
|
|
}),
|
|
|
- watchEffect(() => layer.style.background = data.background),
|
|
|
+ watchEffect(() => (layer.style.background = data.background)),
|
|
|
watchEffect(() => {
|
|
|
- layer.style.visibility = pixel.value && show.value ? 'visible' : 'hidden'
|
|
|
+ layer.style.visibility =
|
|
|
+ pixel.value && show.value ? "visible" : "hidden";
|
|
|
}),
|
|
|
watchEffect(() => {
|
|
|
if (pixel.value) {
|
|
|
- layer.style.transform = `translate(${pixel.value.x}px, ${pixel.value.y}px)`;
|
|
|
+ layer.style.transform = `translate(${pixel.value.x}px, calc(${pixel.value.y}px - 50%))`;
|
|
|
}
|
|
|
}),
|
|
|
- () => mountEl.removeChild(layer)
|
|
|
- ]
|
|
|
- mountEl.appendChild(layer)
|
|
|
- map.subtitles[data.id] = mergeFuns(cleanups)
|
|
|
+ () => mountEl.removeChild(layer),
|
|
|
+ ];
|
|
|
+ mountEl.appendChild(layer);
|
|
|
+ map.subtitles[data.id] = mergeFuns(cleanups);
|
|
|
} else if (!exists && map.subtitles[data.id]) {
|
|
|
map.subtitles[data.id]();
|
|
|
delete map.subtitles[data.id];
|
|
@@ -341,21 +346,19 @@ export const addSubtitle = (data: AnimationModelSubtitle) => {
|
|
|
|
|
|
{ immediate: true }
|
|
|
);
|
|
|
- let isRun = false
|
|
|
+ let isRun = false;
|
|
|
const update = () => {
|
|
|
// if (isRun) return;
|
|
|
// isRun = true
|
|
|
// setTimeout(() => {
|
|
|
- pixel.value = amMap[am.id]?.am?.getCurrentSubtitlePixel(
|
|
|
- size.value
|
|
|
- );
|
|
|
+ pixel.value = amMap[am.id]?.am?.getCurrentSubtitlePixel(size.value);
|
|
|
// isRun = false
|
|
|
// }, 16);
|
|
|
};
|
|
|
|
|
|
const stopAttrib = mergeFuns(
|
|
|
watch(
|
|
|
- [currentTime, () => amMap[am.id]?.am, size, play],
|
|
|
+ [currentTime, () => amMap[am.id]?.am, size, play, () => amMap[key]?.am],
|
|
|
(_a, _b, onCleanup) => {
|
|
|
if (
|
|
|
!play.value &&
|
|
@@ -368,6 +371,19 @@ export const addSubtitle = (data: AnimationModelSubtitle) => {
|
|
|
) {
|
|
|
update();
|
|
|
show.value = true;
|
|
|
+
|
|
|
+ onCleanup(
|
|
|
+ watch(
|
|
|
+ play,
|
|
|
+ (play, _a, onCleanup) => {
|
|
|
+ if (!play && _sdk) {
|
|
|
+ _sdk.sceneBus.on("cameraChange", update);
|
|
|
+ onCleanup(() => _sdk.sceneBus.off("cameraChange", update));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ { immediate: true }
|
|
|
+ )
|
|
|
+ );
|
|
|
} else {
|
|
|
show.value = false;
|
|
|
}
|
|
@@ -399,6 +415,7 @@ export const endTime = computed(() => {
|
|
|
].map((item) => item.time + (item.duration || 0));
|
|
|
return Math.max(...endPoints);
|
|
|
});
|
|
|
+ console.log('amsEndTime', amsEndTime, ams.value)
|
|
|
return (
|
|
|
Math.max(...amsEndTime) +
|
|
|
((animationGroup.delayEndTime && animationGroup.delayEndTime()) || 0)
|
|
@@ -410,6 +427,7 @@ watch(play, (_a, _b, onCleanup) => {
|
|
|
play.value ? animationGroup?.play() : animationGroup?.pause();
|
|
|
onCleanup(
|
|
|
watchEffect(() => {
|
|
|
+ console.error('endTime.value', endTime.value)
|
|
|
if (currentTime.value >= endTime.value) {
|
|
|
play.value = false;
|
|
|
}
|