forked from profectus/Profectus
Created utility function for opening layers as a modal
This commit is contained in:
parent
53d4c40aba
commit
690b963afd
3 changed files with 38 additions and 16 deletions
|
@ -27,7 +27,7 @@ const layer = createLayer(() => {
|
||||||
right: true
|
right: true
|
||||||
},
|
},
|
||||||
onClick() {
|
onClick() {
|
||||||
main.showAchievements.value = true;
|
main.showAchievements();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
import Modal from "@/components/Modal.vue";
|
|
||||||
import Profectus from "@/components/Profectus.vue";
|
import Profectus from "@/components/Profectus.vue";
|
||||||
import Spacer from "@/components/layout/Spacer.vue";
|
import Spacer from "@/components/layout/Spacer.vue";
|
||||||
import { jsx } from "@/features/feature";
|
import { jsx } from "@/features/feature";
|
||||||
import { createResource, trackBest, trackOOMPS, trackTotal } from "@/features/resources/resource";
|
import { createResource, trackBest, trackOOMPS, trackTotal } from "@/features/resources/resource";
|
||||||
import { branchedResetPropagation, createTree, GenericTree } from "@/features/trees/tree";
|
import { branchedResetPropagation, createTree, GenericTree } from "@/features/trees/tree";
|
||||||
import { globalBus } from "@/game/events";
|
import { globalBus } from "@/game/events";
|
||||||
import { createLayer, GenericLayer } from "@/game/layers";
|
import { createLayer, GenericLayer, setupLayerModal } from "@/game/layers";
|
||||||
import player, { PlayerData } from "@/game/player";
|
import player, { PlayerData } from "@/game/player";
|
||||||
import { DecimalSource } from "@/lib/break_eternity";
|
import { DecimalSource } from "@/lib/break_eternity";
|
||||||
import Decimal, { format, formatTime } from "@/util/bignum";
|
import Decimal, { format, formatTime } from "@/util/bignum";
|
||||||
import { render } from "@/util/vue";
|
import { render } from "@/util/vue";
|
||||||
import { computed, ref, toRaw } from "vue";
|
import { computed, toRaw } from "vue";
|
||||||
import a from "./layers/aca/a";
|
import a from "./layers/aca/a";
|
||||||
import c from "./layers/aca/c";
|
import c from "./layers/aca/c";
|
||||||
import f from "./layers/aca/f";
|
import f from "./layers/aca/f";
|
||||||
|
@ -19,7 +18,6 @@ export const main = createLayer(() => {
|
||||||
const points = createResource<DecimalSource>(10);
|
const points = createResource<DecimalSource>(10);
|
||||||
const best = trackBest(points);
|
const best = trackBest(points);
|
||||||
const total = trackTotal(points);
|
const total = trackTotal(points);
|
||||||
const showAchievements = ref(false);
|
|
||||||
|
|
||||||
const pointGain = computed(() => {
|
const pointGain = computed(() => {
|
||||||
if (!c.generatorUpgrade.bought.value) return new Decimal(0);
|
if (!c.generatorUpgrade.bought.value) return new Decimal(0);
|
||||||
|
@ -33,6 +31,8 @@ export const main = createLayer(() => {
|
||||||
});
|
});
|
||||||
const oomps = trackOOMPS(points, pointGain);
|
const oomps = trackOOMPS(points, pointGain);
|
||||||
|
|
||||||
|
const { openModal, modal } = setupLayerModal(a);
|
||||||
|
|
||||||
// Note: Casting as generic tree to avoid recursive type definitions
|
// Note: Casting as generic tree to avoid recursive type definitions
|
||||||
const tree = createTree(() => ({
|
const tree = createTree(() => ({
|
||||||
nodes: [[c.treeNode], [f.treeNode, c.spook]],
|
nodes: [[c.treeNode], [f.treeNode, c.spook]],
|
||||||
|
@ -80,15 +80,8 @@ export const main = createLayer(() => {
|
||||||
</div>
|
</div>
|
||||||
<div v-show={Decimal.gt(pointGain.value, 0)}>({oomps.value})</div>
|
<div v-show={Decimal.gt(pointGain.value, 0)}>({oomps.value})</div>
|
||||||
<Spacer />
|
<Spacer />
|
||||||
<button onClick={() => (showAchievements.value = true)}>open achievements</button>
|
<button onClick={openModal}>open achievements</button>
|
||||||
<Modal
|
{render(modal)}
|
||||||
modelValue={showAchievements.value}
|
|
||||||
onUpdate:modelValue={value => (showAchievements.value = value)}
|
|
||||||
v-slots={{
|
|
||||||
header: () => <h2>Achievements</h2>,
|
|
||||||
body: a.display
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
{render(tree)}
|
{render(tree)}
|
||||||
<Profectus height="200px" style="margin: 10px auto; display: block" />
|
<Profectus height="200px" style="margin: 10px auto; display: block" />
|
||||||
</>
|
</>
|
||||||
|
@ -98,7 +91,7 @@ export const main = createLayer(() => {
|
||||||
total,
|
total,
|
||||||
oomps,
|
oomps,
|
||||||
tree,
|
tree,
|
||||||
showAchievements
|
showAchievements: openModal
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
import { CoercableComponent, Replace, setDefault, StyleValue } from "@/features/feature";
|
import Modal from "@/components/Modal.vue";
|
||||||
|
import {
|
||||||
|
CoercableComponent,
|
||||||
|
jsx,
|
||||||
|
JSXFunction,
|
||||||
|
Replace,
|
||||||
|
setDefault,
|
||||||
|
StyleValue
|
||||||
|
} from "@/features/feature";
|
||||||
import { Link } from "@/features/links";
|
import { Link } from "@/features/links";
|
||||||
import Decimal from "@/util/bignum";
|
import Decimal from "@/util/bignum";
|
||||||
import {
|
import {
|
||||||
|
@ -10,6 +18,7 @@ import {
|
||||||
} from "@/util/computed";
|
} from "@/util/computed";
|
||||||
import { createLazyProxy } from "@/util/proxies";
|
import { createLazyProxy } from "@/util/proxies";
|
||||||
import { createNanoEvents, Emitter } from "nanoevents";
|
import { createNanoEvents, Emitter } from "nanoevents";
|
||||||
|
import { ref, unref } from "vue";
|
||||||
import { globalBus } from "./events";
|
import { globalBus } from "./events";
|
||||||
import { persistent, PersistentRef } from "./persistence";
|
import { persistent, PersistentRef } from "./persistence";
|
||||||
import player from "./player";
|
import player from "./player";
|
||||||
|
@ -145,6 +154,26 @@ export function reloadLayer(layer: GenericLayer): void {
|
||||||
addLayer(layer, player);
|
addLayer(layer, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setupLayerModal(layer: GenericLayer): {
|
||||||
|
openModal: VoidFunction;
|
||||||
|
modal: JSXFunction;
|
||||||
|
} {
|
||||||
|
const showModal = ref(false);
|
||||||
|
return {
|
||||||
|
openModal: () => (showModal.value = true),
|
||||||
|
modal: jsx(() => (
|
||||||
|
<Modal
|
||||||
|
modelValue={showModal.value}
|
||||||
|
onUpdate:modelValue={value => (showModal.value = value)}
|
||||||
|
v-slots={{
|
||||||
|
header: () => <h2>{unref(layer.name)}</h2>,
|
||||||
|
body: unref(layer.display)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
globalBus.on("update", function updateLayers(diff) {
|
globalBus.on("update", function updateLayers(diff) {
|
||||||
Object.values(layers).forEach(layer => {
|
Object.values(layers).forEach(layer => {
|
||||||
layer?.emit("preUpdate", diff);
|
layer?.emit("preUpdate", diff);
|
Loading…
Reference in a new issue