From c3b8948f7015ba814562d4074900f62e382efb8d Mon Sep 17 00:00:00 2001 From: keoinn Date: Fri, 4 Oct 2024 12:29:20 +0800 Subject: [PATCH] Finsh Control Bar. --- src/components/SmorreryScence.vue | 119 +++++++++++++++++++++++++---- src/layouts/default.vue | 2 +- src/utils/SpaceScene/SpaceScene.js | 1 - src/utils/SpaceScene/core/loop.js | 25 +++++- 4 files changed, 130 insertions(+), 17 deletions(-) diff --git a/src/components/SmorreryScence.vue b/src/components/SmorreryScence.vue index 6960edb..77145bb 100644 --- a/src/components/SmorreryScence.vue +++ b/src/components/SmorreryScence.vue @@ -1,7 +1,6 @@ @@ -71,31 +109,67 @@ onMounted(() => {
+ + + + - +
+ + + {{ showFixedSpeedVal(timeSpeed) }}x +
+ + {{ showDateString(currentDate) }} + JD {{ showJDText(currentDate) }}
@@ -114,21 +188,38 @@ onMounted(() => { } #timeControl { position: absolute; + bottom: 5%; left: 50%; - bottom: 13%; transform: translateX(-50%); - background: rgba(205, 140, 140, 0.7); + background: rgba(0, 0, 0, 0.7); padding: 10px; border-radius: 5px; display: flex; align-items: center; color: white; - font-family: monospace; - z-index: 1; + font-family: Arial, sans-serif; + z-index: 1000; .video-btn { margin-left: 10px; } + + .speedControl { + display: flex; + align-items: center; + label { + padding-left: 10px; + } + + input { + width: 100px; + } + } + + .info-text { + min-width: 150px; + text-align: center; + } } } diff --git a/src/layouts/default.vue b/src/layouts/default.vue index 85ddb82..8fc4e4c 100644 --- a/src/layouts/default.vue +++ b/src/layouts/default.vue @@ -9,7 +9,7 @@ - + diff --git a/src/utils/SpaceScene/SpaceScene.js b/src/utils/SpaceScene/SpaceScene.js index 78d2fd4..81e53df 100644 --- a/src/utils/SpaceScene/SpaceScene.js +++ b/src/utils/SpaceScene/SpaceScene.js @@ -48,7 +48,6 @@ class SpaceScene extends EmptyScene { set OrbitingRecordTrace (flag) { const st = (flag === true)? true : false; this.orbitingObjects.forEach(obj => { - console.log(flag, st, obj.isTrace) obj.isTrace = st if(!st) { obj.trace = [] diff --git a/src/utils/SpaceScene/core/loop.js b/src/utils/SpaceScene/core/loop.js index 81ee24c..0cd65e7 100644 --- a/src/utils/SpaceScene/core/loop.js +++ b/src/utils/SpaceScene/core/loop.js @@ -1,4 +1,5 @@ import { Clock } from "three"; +import { ref } from 'vue'; import { RENDER_TIMES } from "@/utils/SpaceScene/utils/smorrery_const.js"; import { calculateJulianDateSinceJ2000} from "@/utils/SpaceScene/utils/calculator.js"; // const clock = new Clock(); @@ -18,6 +19,10 @@ class Loop { this.currentDate = currentDate; this.timeDirection = timeDirection; this.isPlayed = isPlayed + + // Reactivity API for watch from Outer + this.currentDate_ref = ref('') + this.currentDate_ref.value = currentDate.getTime(); } start() { @@ -37,6 +42,18 @@ class Loop { }); } + // 改變日期 + set shiftDate(val) { + this.currentDate = new Date(val) + this.currentDate_ref.value = this.currentDate.getTime(); + const delta = calculateJulianDateSinceJ2000(this.currentDate) + for (const object of this.updatables) { + object.tick(delta, this.scene); + object.trace = [] + } + + } + set played(display_st) { if(display_st === 1) { @@ -54,6 +71,10 @@ class Loop { } } + set timeScaleRate(rate) { + this.timeScale = rate + } + stop() { fps_timer = 0 this.renderer.setAnimationLoop(null); @@ -73,9 +94,11 @@ class Loop { } else if (this.currentDate > MAX_DATE) { this.currentDate = MAX_DATE; } - console.log(this.timeDirection) const delta = calculateJulianDateSinceJ2000(this.currentDate) + // Reactivity API for watch from Outer + this.currentDate_ref.value = this.currentDate.getTime() + for (const object of this.updatables) { object.tick(delta, this.scene); }