<template> <Modal :show="hasNaN" v-bind="$attrs"> <template v-slot:header> <div class="nan-modal-header"> <h2>NaN value detected!</h2> </div> </template> <template v-slot:body> <div> Attempted to assign "{{ path }}" to NaN (previously {{ format(previous) }}). Auto-saving has been {{ autosave ? "enabled" : "disabled" }}. Check the console for more details, and consider sharing it with the developers on discord. </div> <br /> <div> <a :href="discordLink" class="nan-modal-discord-link"> <img src="images/discord.png" class="nan-modal-discord" /> {{ discordName }} </a> </div> <br /> <Toggle title="Autosave" :value="autosave" @change="setAutosave" /> <Toggle title="Pause game" :value="paused" @change="togglePaused" /> </template> <template v-slot:footer> <div class="nan-footer"> <button @click="toggleSavesManager" class="button"> Open Saves Manager </button> <button @click="setZero" class="button">Set to 0</button> <button @click="setOne" class="button">Set to 1</button> <button @click="setPrev" class="button" v-if="previous && previous.neq(0) && previous.neq(1)" > Set to previous </button> <button @click="ignore" class="button danger">Ignore</button> </div> </template> </Modal> <SavesManager :show="showSaves" @closeDialog="toggleSavesManager" /> </template> <script lang="ts"> import modInfo from "@/data/modInfo.json"; import player from "@/game/player"; import Decimal, { format } from "@/util/bignum"; import { mapState } from "@/util/vue"; import { defineComponent } from "vue"; export default defineComponent({ name: "NaNScreen", data() { const { discordName, discordLink } = modInfo; return { discordName, discordLink, format, showSaves: false }; }, computed: { ...mapState(["hasNaN", "autosave"]), path(): string | undefined { return player.NaNPath?.join("."); }, previous(): any { if (player.NaNReceiver && this.property) { return player.NaNReceiver[this.property]; } return null; }, paused() { return player.devSpeed === 0; }, property(): string | undefined { return player.NaNPath?.slice(-1)[0]; } }, methods: { setZero() { if (player.NaNReceiver && this.property) { player.NaNReceiver[this.property] = new Decimal(0); player.hasNaN = false; } }, setOne() { if (player.NaNReceiver && this.property) { player.NaNReceiver[this.property] = new Decimal(1); player.hasNaN = false; } }, setPrev() { player.hasNaN = false; }, ignore() { if (player.NaNReceiver && this.property) { player.NaNReceiver[this.property] = new Decimal(NaN); player.hasNaN = false; } }, setAutosave(autosave: boolean) { player.autosave = autosave; }, toggleSavesManager() { this.showSaves = !this.showSaves; }, togglePaused() { player.devSpeed = this.paused ? 1 : 0; } } }); </script> <style scoped> .nan-modal-header { padding: 10px 0; margin-left: 10px; } .nan-footer { display: flex; justify-content: flex-end; } .nan-footer button { margin: 0 10px; } .nan-modal-discord-link { display: flex; align-items: center; } .nan-modal-discord { height: 2em; margin: 0; margin-right: 4px; } </style>