thepaperpilot
e2126472b2
Entire demo tree has been tested and is fully functional, including all the options and save manager functionality
118 lines
4.4 KiB
TypeScript
118 lines
4.4 KiB
TypeScript
import Modal from "@/components/system/Modal.vue";
|
|
import Spacer from "@/components/system/Spacer.vue";
|
|
import { jsx } from "@/features/feature";
|
|
import { createResource, trackBest, trackOOMPS, trackTotal } from "@/features/resource";
|
|
import { branchedResetPropagation, createTree, GenericTree } from "@/features/tree";
|
|
import { globalBus } from "@/game/events";
|
|
import { createLayer, GenericLayer } from "@/game/layers";
|
|
import player, { PlayerData } from "@/game/player";
|
|
import { DecimalSource } from "@/lib/break_eternity";
|
|
import Decimal, { format, formatTime } from "@/util/bignum";
|
|
import { render } from "@/util/vue";
|
|
import { computed, ref, toRaw } from "vue";
|
|
import a from "./layers/aca/a";
|
|
import c from "./layers/aca/c";
|
|
import f from "./layers/aca/f";
|
|
|
|
export const main = createLayer(() => {
|
|
const points = createResource<DecimalSource>(10);
|
|
const best = trackBest(points);
|
|
const total = trackTotal(points);
|
|
const showAchievements = ref(false);
|
|
|
|
const pointGain = computed(() => {
|
|
if (!c.generatorUpgrade.bought.value) return new Decimal(0);
|
|
let gain = new Decimal(3.19);
|
|
if (c.lollipopMultiplierUpgrade.bought.value)
|
|
gain = gain.times(c.lollipopMultiplierEffect.value);
|
|
return gain;
|
|
});
|
|
globalBus.on("update", diff => {
|
|
points.value = Decimal.add(points.value, Decimal.times(pointGain.value, diff));
|
|
});
|
|
const oomps = trackOOMPS(points, pointGain);
|
|
|
|
// Note: Casting as generic tree to avoid recursive type definitions
|
|
const tree = createTree(() => ({
|
|
nodes: [[c.treeNode], [f.treeNode, c.spook]],
|
|
leftSideNodes: [a.treeNode, c.h],
|
|
branches: [
|
|
{
|
|
startNode: f.treeNode,
|
|
endNode: c.treeNode,
|
|
stroke: "blue",
|
|
"stroke-width": "25px",
|
|
style: {
|
|
filter: "blur(5px)"
|
|
}
|
|
},
|
|
{ startNode: c.treeNode, endNode: c.g }
|
|
],
|
|
onReset() {
|
|
points.value = toRaw(this.resettingNode.value) === toRaw(c.treeNode) ? 0 : 10;
|
|
best.value = points.value;
|
|
total.value = points.value;
|
|
},
|
|
resetPropagation: branchedResetPropagation
|
|
})) as GenericTree;
|
|
|
|
// Note: layers don't _need_ a reference to everything,
|
|
// but I'd recommend it over trying to remember what does and doesn't need to be included.
|
|
// Officially all you need are anything with persistency or that you want to access elsewhere
|
|
return {
|
|
id: "main",
|
|
name: "Tree",
|
|
links: tree.links,
|
|
display: jsx(() => (
|
|
<>
|
|
<div v-show={player.devSpeed === 0}>Game Paused</div>
|
|
<div v-show={player.devSpeed && player.devSpeed !== 1}>
|
|
Dev Speed: {format(player.devSpeed || 0)}x
|
|
</div>
|
|
<div v-show={player.offlineTime != undefined}>
|
|
Offline Time: {formatTime(player.offlineTime || 0)}
|
|
</div>
|
|
<div>
|
|
<span v-show={Decimal.lt(points.value, "1e1000")}>You have </span>
|
|
<h2>{format(points.value)}</h2>
|
|
<span v-show={Decimal.lt(points.value, "1e1e6")}> points</span>
|
|
</div>
|
|
<div v-show={Decimal.gt(pointGain.value, 0)}>({oomps.value})</div>
|
|
<Spacer />
|
|
<button onClick={() => (showAchievements.value = true)}>open achievements</button>
|
|
<Modal
|
|
modelValue={showAchievements.value}
|
|
onUpdate:modelValue={value => (showAchievements.value = value)}
|
|
v-slots={{
|
|
header: () => <h2>Achievements</h2>,
|
|
body: a.display
|
|
}}
|
|
/>
|
|
{render(tree)}
|
|
</>
|
|
)),
|
|
points,
|
|
best,
|
|
total,
|
|
oomps,
|
|
tree,
|
|
showAchievements
|
|
};
|
|
});
|
|
|
|
export const getInitialLayers = (
|
|
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
|
player: Partial<PlayerData>
|
|
): Array<GenericLayer> => [main, f, c, a];
|
|
|
|
export const hasWon = computed(() => {
|
|
return false;
|
|
});
|
|
|
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
export function fixOldSave(
|
|
oldVersion: string | undefined,
|
|
player: Partial<PlayerData>
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
): void {}
|
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|