Next day timer

This commit is contained in:
ducdat0507 2022-12-06 23:38:35 +07:00
parent 69dcad4eb0
commit 7856d6f5e8
4 changed files with 27 additions and 5 deletions

View file

@ -3,5 +3,6 @@
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
"source.fixAll.eslint": true "source.fixAll.eslint": true
}, },
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
"git.ignoreLimitWarning": true
} }

View file

@ -19,6 +19,7 @@
<div class="doors"></div> <div class="doors"></div>
<div class="date">Dec<br />{{ day }}</div> <div class="date">Dec<br />{{ day }}</div>
<div v-if="!canOpen" class="material-icons lock">lock</div> <div v-if="!canOpen" class="material-icons lock">lock</div>
<div v-if="main.day.value === day && !canOpen" class="timer">{{ formatTime(main.timeUntilNewDay.value, 0) }}</div>
<Notif v-if="canOpen" /> <Notif v-if="canOpen" />
</div> </div>
</template> </template>
@ -26,6 +27,7 @@
<script setup lang="ts"> <script setup lang="ts">
import Notif from "components/Notif.vue"; import Notif from "components/Notif.vue";
import Decimal from "util/bignum"; import Decimal from "util/bignum";
import { formatTime } from "util/break_eternity";
import { ProcessedComputable } from "util/computed"; import { ProcessedComputable } from "util/computed";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { computed, unref } from "vue"; import { computed, unref } from "vue";
@ -166,6 +168,22 @@ function tryUnlock() {
width: 100%; width: 100%;
} }
.timer {
position: absolute;
bottom: -12px;
left: 50%;
padding: 0 3px;
transform: translateX(-50%);
z-index: 3;
pointer-events: none;
user-select: none;
white-space: nowrap;
font-size: small;
border: 2px solid rgba(0, 0, 0, 0.125);
border-radius: var(--border-radius);
background: var(--locked);
}
.icon { .icon {
pointer-events: none; pointer-events: none;
background-size: contain; background-size: contain;

View file

@ -44,6 +44,7 @@ export interface Day extends VueFeature {
export const main = createLayer("main", function (this: BaseLayer) { export const main = createLayer("main", function (this: BaseLayer) {
const day = persistent<number>(1); const day = persistent<number>(1);
const timeUntilNewDay = computed(() => (+new Date(new Date().getFullYear(), 11, day.value) - player.time) / 1000);
const showLoreModal = ref<boolean>(false); const showLoreModal = ref<boolean>(false);
const loreScene = ref<number>(-1); const loreScene = ref<number>(-1);
@ -354,6 +355,7 @@ export const main = createLayer("main", function (this: BaseLayer) {
name: "Calendar", name: "Calendar",
days, days,
day, day,
timeUntilNewDay,
loreScene, loreScene,
loreTitle, loreTitle,
loreBody, loreBody,
@ -382,7 +384,7 @@ export const main = createLayer("main", function (this: BaseLayer) {
}, },
[[]] as Day[][] [[]] as Day[][]
) )
.map(days => renderRow(...days))} .map((days: Day[]) => renderRow(...days))}
</div> </div>
</> </>
)) ))

View file

@ -127,9 +127,10 @@ export function formatWhole(num: DecimalSource): string {
return format(num, 0); return format(num, 0);
} }
export function formatTime(seconds: DecimalSource): string { export function formatTime(seconds: DecimalSource, precision?: number): string {
if (precision == null) precision = projInfo.defaultDecimalsShown;
if (Decimal.lt(seconds, 0)) { if (Decimal.lt(seconds, 0)) {
return "-" + formatTime(Decimal.neg(seconds)); return "-" + formatTime(Decimal.neg(seconds), precision);
} }
if (Decimal.gt(seconds, 2 ** 51)) { if (Decimal.gt(seconds, 2 ** 51)) {
// integer precision limit // integer precision limit
@ -139,7 +140,7 @@ export function formatTime(seconds: DecimalSource): string {
if (seconds < 60) { if (seconds < 60) {
return format(seconds) + "s"; return format(seconds) + "s";
} else if (seconds < 3600) { } else if (seconds < 3600) {
return formatWhole(Math.floor(seconds / 60)) + "m " + format(seconds % 60) + "s"; return formatWhole(Math.floor(seconds / 60)) + "m " + format(seconds % 60, precision) + "s";
} else if (seconds < 86400) { } else if (seconds < 86400) {
return ( return (
formatWhole(Math.floor(seconds / 3600)) + formatWhole(Math.floor(seconds / 3600)) +