2024-03-10 09:27:31 -05:00
|
|
|
import Node from "components/Node.vue";
|
|
|
|
import Spacer from "components/layout/Spacer.vue";
|
|
|
|
import { createResource, trackBest, trackOOMPS, trackTotal } from "features/resources/resource";
|
Feature rewrite
- Removed `jsx()` and `JSXFunction`. You can now use `JSX.Element` like any other `Computable` value
- `joinJSX` now always requires a joiner. Just pass the array of elements or wrap them in `<>` and `</>` if there's no joiner
- Removed `coerceComponent`, `computeComponent`, and `computeOptionalComponent`; just use the `render` function now
- It's recommended to now do `<MyComponent />` instead of `<component :is="myComponent" />`
- All features no longer take the options as a type parameter, and all generic forms have been removed as a result
- Fixed `forceHideGoBack` not being respected
- Removed `deepUnref` as now things don't get unreffed before being passed into vue components by default
- Moved MarkNode to new wrapper, and removed existing `mark` properties
- Moved Tooltip to new wrapper, and made it take an options function instead of raw object
- VueFeature component now wraps all vue features, and applies styling, classes, and visibility in the wrapping div. It also adds the Node component so features don't need to
- `mergeAdjacent` now works with grids (perhaps should've used scss to reduce the amount of css this took)
- `CoercableComponent` renamed to `Renderable` since it should be used with `render`
- Replaced `isCoercableComponent` with `isJSXElement`
- Replaced `Computable` and `ProcessedComputable` with the vue built-ins `MaybeRefOrGetter` and `MaybeRef`
- `convertComputable` renamed to `processGetter`
- Also removed `GetComputableTypeWithDefault` and `GetComputableType`, which can similarly be replaced
- `dontMerge` is now a property on rows and columns rather than an undocumented css class you'd have to include on every feature within the row or column
- Fixed saves manager not being imported in addiction warning component
- Created `vueFeatureMixin` for simplifying the vue specific parts of a feature. Passes the component's properties in explicitly and directly from the feature itself
- All features should now return an object that includes props typed to omit the options object and satisfies the feature. This will ensure type correctness and pass-through custom properties. (see existing features for more thorough examples of changes)
- Replaced decorators with mixins, which won't require casting. Bonus amount decorators converted into generic bonus amount mixin. Removed effect decorator
- All `render` functions now return `JSX.Element`. The `JSX` variants (e.g. `renderJSX`) (except `joinJSX`) have been removed
- Moved all features that use the clickable component into the clickable folder
- Removed `small` property from clickable, since its a single css rule (`min-height: unset`) (you could add a small css class and pass small to any vue feature's classes property, though)
- Upgrades now use the clickable component
- Added ConversionType symbol
- Removed setDefault, just use `??=`
- Added isType function that uses a type symbol to check
- General cleanup
2024-11-19 08:32:45 -06:00
|
|
|
import { branchedResetPropagation, createTree, Tree } from "features/trees/tree";
|
2024-12-12 07:39:10 -06:00
|
|
|
import type { Layer } from "game/layers";
|
2022-06-26 19:17:22 -05:00
|
|
|
import { createLayer } from "game/layers";
|
2024-12-25 19:30:23 -06:00
|
|
|
import { noPersist } from "game/persistence";
|
2024-12-03 22:11:01 -06:00
|
|
|
import player, { Player } from "game/player";
|
2024-03-10 09:27:31 -05:00
|
|
|
import type { DecimalSource } from "util/bignum";
|
|
|
|
import Decimal, { format, formatTime } from "util/bignum";
|
2024-03-03 19:59:26 -06:00
|
|
|
import { render } from "util/vue";
|
2024-03-10 09:27:31 -05:00
|
|
|
import { computed, toRaw } from "vue";
|
|
|
|
import prestige from "./layers/prestige";
|
2024-02-28 23:19:11 -06:00
|
|
|
|
2022-03-08 00:25:08 -06:00
|
|
|
/**
|
|
|
|
* @hidden
|
|
|
|
*/
|
2024-12-12 07:39:10 -06:00
|
|
|
export const main = createLayer("main", layer => {
|
2024-03-10 09:27:31 -05:00
|
|
|
const points = createResource<DecimalSource>(10);
|
|
|
|
const best = trackBest(points);
|
|
|
|
const total = trackTotal(points);
|
|
|
|
|
|
|
|
const pointGain = computed(() => {
|
|
|
|
// eslint-disable-next-line prefer-const
|
|
|
|
let gain = new Decimal(1);
|
|
|
|
return gain;
|
2022-01-27 22:47:26 -06:00
|
|
|
});
|
2024-12-12 07:39:10 -06:00
|
|
|
layer.on("update", diff => {
|
2024-03-10 09:27:31 -05:00
|
|
|
points.value = Decimal.add(points.value, Decimal.times(pointGain.value, diff));
|
2024-02-28 23:19:11 -06:00
|
|
|
});
|
2024-03-10 09:27:31 -05:00
|
|
|
const oomps = trackOOMPS(points, pointGain);
|
|
|
|
|
2024-12-03 22:11:01 -06:00
|
|
|
// Note: Casting as generic tree to avoid recursive type definitions
|
2024-03-10 09:27:31 -05:00
|
|
|
const tree = createTree(() => ({
|
2024-12-25 19:30:23 -06:00
|
|
|
nodes: noPersist([[prestige.treeNode]]),
|
2024-03-10 09:27:31 -05:00
|
|
|
branches: [],
|
|
|
|
onReset() {
|
2024-12-03 22:11:01 -06:00
|
|
|
points.value = toRaw(tree.resettingNode.value) === toRaw(prestige.treeNode) ? 0 : 10;
|
2024-03-10 09:27:31 -05:00
|
|
|
best.value = points.value;
|
|
|
|
total.value = points.value;
|
2022-02-27 13:49:34 -06:00
|
|
|
},
|
2024-03-10 09:27:31 -05:00
|
|
|
resetPropagation: branchedResetPropagation
|
Feature rewrite
- Removed `jsx()` and `JSXFunction`. You can now use `JSX.Element` like any other `Computable` value
- `joinJSX` now always requires a joiner. Just pass the array of elements or wrap them in `<>` and `</>` if there's no joiner
- Removed `coerceComponent`, `computeComponent`, and `computeOptionalComponent`; just use the `render` function now
- It's recommended to now do `<MyComponent />` instead of `<component :is="myComponent" />`
- All features no longer take the options as a type parameter, and all generic forms have been removed as a result
- Fixed `forceHideGoBack` not being respected
- Removed `deepUnref` as now things don't get unreffed before being passed into vue components by default
- Moved MarkNode to new wrapper, and removed existing `mark` properties
- Moved Tooltip to new wrapper, and made it take an options function instead of raw object
- VueFeature component now wraps all vue features, and applies styling, classes, and visibility in the wrapping div. It also adds the Node component so features don't need to
- `mergeAdjacent` now works with grids (perhaps should've used scss to reduce the amount of css this took)
- `CoercableComponent` renamed to `Renderable` since it should be used with `render`
- Replaced `isCoercableComponent` with `isJSXElement`
- Replaced `Computable` and `ProcessedComputable` with the vue built-ins `MaybeRefOrGetter` and `MaybeRef`
- `convertComputable` renamed to `processGetter`
- Also removed `GetComputableTypeWithDefault` and `GetComputableType`, which can similarly be replaced
- `dontMerge` is now a property on rows and columns rather than an undocumented css class you'd have to include on every feature within the row or column
- Fixed saves manager not being imported in addiction warning component
- Created `vueFeatureMixin` for simplifying the vue specific parts of a feature. Passes the component's properties in explicitly and directly from the feature itself
- All features should now return an object that includes props typed to omit the options object and satisfies the feature. This will ensure type correctness and pass-through custom properties. (see existing features for more thorough examples of changes)
- Replaced decorators with mixins, which won't require casting. Bonus amount decorators converted into generic bonus amount mixin. Removed effect decorator
- All `render` functions now return `JSX.Element`. The `JSX` variants (e.g. `renderJSX`) (except `joinJSX`) have been removed
- Moved all features that use the clickable component into the clickable folder
- Removed `small` property from clickable, since its a single css rule (`min-height: unset`) (you could add a small css class and pass small to any vue feature's classes property, though)
- Upgrades now use the clickable component
- Added ConversionType symbol
- Removed setDefault, just use `??=`
- Added isType function that uses a type symbol to check
- General cleanup
2024-11-19 08:32:45 -06:00
|
|
|
})) as Tree;
|
2022-01-13 22:25:47 -06:00
|
|
|
|
2024-12-03 22:11:01 -06:00
|
|
|
// 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
|
2022-01-27 22:47:26 -06:00
|
|
|
return {
|
|
|
|
name: "Tree",
|
2024-03-10 09:27:31 -05:00
|
|
|
links: tree.links,
|
Feature rewrite
- Removed `jsx()` and `JSXFunction`. You can now use `JSX.Element` like any other `Computable` value
- `joinJSX` now always requires a joiner. Just pass the array of elements or wrap them in `<>` and `</>` if there's no joiner
- Removed `coerceComponent`, `computeComponent`, and `computeOptionalComponent`; just use the `render` function now
- It's recommended to now do `<MyComponent />` instead of `<component :is="myComponent" />`
- All features no longer take the options as a type parameter, and all generic forms have been removed as a result
- Fixed `forceHideGoBack` not being respected
- Removed `deepUnref` as now things don't get unreffed before being passed into vue components by default
- Moved MarkNode to new wrapper, and removed existing `mark` properties
- Moved Tooltip to new wrapper, and made it take an options function instead of raw object
- VueFeature component now wraps all vue features, and applies styling, classes, and visibility in the wrapping div. It also adds the Node component so features don't need to
- `mergeAdjacent` now works with grids (perhaps should've used scss to reduce the amount of css this took)
- `CoercableComponent` renamed to `Renderable` since it should be used with `render`
- Replaced `isCoercableComponent` with `isJSXElement`
- Replaced `Computable` and `ProcessedComputable` with the vue built-ins `MaybeRefOrGetter` and `MaybeRef`
- `convertComputable` renamed to `processGetter`
- Also removed `GetComputableTypeWithDefault` and `GetComputableType`, which can similarly be replaced
- `dontMerge` is now a property on rows and columns rather than an undocumented css class you'd have to include on every feature within the row or column
- Fixed saves manager not being imported in addiction warning component
- Created `vueFeatureMixin` for simplifying the vue specific parts of a feature. Passes the component's properties in explicitly and directly from the feature itself
- All features should now return an object that includes props typed to omit the options object and satisfies the feature. This will ensure type correctness and pass-through custom properties. (see existing features for more thorough examples of changes)
- Replaced decorators with mixins, which won't require casting. Bonus amount decorators converted into generic bonus amount mixin. Removed effect decorator
- All `render` functions now return `JSX.Element`. The `JSX` variants (e.g. `renderJSX`) (except `joinJSX`) have been removed
- Moved all features that use the clickable component into the clickable folder
- Removed `small` property from clickable, since its a single css rule (`min-height: unset`) (you could add a small css class and pass small to any vue feature's classes property, though)
- Upgrades now use the clickable component
- Added ConversionType symbol
- Removed setDefault, just use `??=`
- Added isType function that uses a type symbol to check
- General cleanup
2024-11-19 08:32:45 -06:00
|
|
|
display: () => (
|
2022-02-27 13:49:34 -06:00
|
|
|
<>
|
2024-03-10 09:27:31 -05:00
|
|
|
{player.devSpeed === 0 ? (
|
|
|
|
<div>
|
|
|
|
Game Paused
|
|
|
|
<Node id="paused" />
|
|
|
|
</div>
|
|
|
|
) : null}
|
|
|
|
{player.devSpeed != null && player.devSpeed !== 0 && player.devSpeed !== 1 ? (
|
|
|
|
<div>
|
|
|
|
Dev Speed: {format(player.devSpeed)}x
|
|
|
|
<Node id="devspeed" />
|
|
|
|
</div>
|
|
|
|
) : null}
|
|
|
|
{player.offlineTime != null && player.offlineTime !== 0 ? (
|
|
|
|
<div>
|
|
|
|
Offline Time: {formatTime(player.offlineTime)}
|
|
|
|
<Node id="offline" />
|
|
|
|
</div>
|
|
|
|
) : null}
|
|
|
|
<div>
|
|
|
|
{Decimal.lt(points.value, "1e1000") ? <span>You have </span> : null}
|
|
|
|
<h2>{format(points.value)}</h2>
|
|
|
|
{Decimal.lt(points.value, "1e1e6") ? <span> points</span> : null}
|
|
|
|
</div>
|
|
|
|
{Decimal.gt(pointGain.value, 0) ? (
|
|
|
|
<div>
|
|
|
|
({oomps.value})
|
|
|
|
<Node id="oomps" />
|
|
|
|
</div>
|
|
|
|
) : null}
|
|
|
|
<Spacer />
|
|
|
|
{render(tree)}
|
2022-02-27 13:49:34 -06:00
|
|
|
</>
|
Feature rewrite
- Removed `jsx()` and `JSXFunction`. You can now use `JSX.Element` like any other `Computable` value
- `joinJSX` now always requires a joiner. Just pass the array of elements or wrap them in `<>` and `</>` if there's no joiner
- Removed `coerceComponent`, `computeComponent`, and `computeOptionalComponent`; just use the `render` function now
- It's recommended to now do `<MyComponent />` instead of `<component :is="myComponent" />`
- All features no longer take the options as a type parameter, and all generic forms have been removed as a result
- Fixed `forceHideGoBack` not being respected
- Removed `deepUnref` as now things don't get unreffed before being passed into vue components by default
- Moved MarkNode to new wrapper, and removed existing `mark` properties
- Moved Tooltip to new wrapper, and made it take an options function instead of raw object
- VueFeature component now wraps all vue features, and applies styling, classes, and visibility in the wrapping div. It also adds the Node component so features don't need to
- `mergeAdjacent` now works with grids (perhaps should've used scss to reduce the amount of css this took)
- `CoercableComponent` renamed to `Renderable` since it should be used with `render`
- Replaced `isCoercableComponent` with `isJSXElement`
- Replaced `Computable` and `ProcessedComputable` with the vue built-ins `MaybeRefOrGetter` and `MaybeRef`
- `convertComputable` renamed to `processGetter`
- Also removed `GetComputableTypeWithDefault` and `GetComputableType`, which can similarly be replaced
- `dontMerge` is now a property on rows and columns rather than an undocumented css class you'd have to include on every feature within the row or column
- Fixed saves manager not being imported in addiction warning component
- Created `vueFeatureMixin` for simplifying the vue specific parts of a feature. Passes the component's properties in explicitly and directly from the feature itself
- All features should now return an object that includes props typed to omit the options object and satisfies the feature. This will ensure type correctness and pass-through custom properties. (see existing features for more thorough examples of changes)
- Replaced decorators with mixins, which won't require casting. Bonus amount decorators converted into generic bonus amount mixin. Removed effect decorator
- All `render` functions now return `JSX.Element`. The `JSX` variants (e.g. `renderJSX`) (except `joinJSX`) have been removed
- Moved all features that use the clickable component into the clickable folder
- Removed `small` property from clickable, since its a single css rule (`min-height: unset`) (you could add a small css class and pass small to any vue feature's classes property, though)
- Upgrades now use the clickable component
- Added ConversionType symbol
- Removed setDefault, just use `??=`
- Added isType function that uses a type symbol to check
- General cleanup
2024-11-19 08:32:45 -06:00
|
|
|
),
|
2024-03-10 09:27:31 -05:00
|
|
|
points,
|
|
|
|
best,
|
|
|
|
total,
|
|
|
|
oomps,
|
|
|
|
tree
|
2022-01-27 22:47:26 -06:00
|
|
|
};
|
2022-01-13 22:25:47 -06:00
|
|
|
});
|
|
|
|
|
2022-07-10 01:44:45 -05:00
|
|
|
/**
|
|
|
|
* Given a player save data object being loaded, return a list of layers that should currently be enabled.
|
|
|
|
* If your project does not use dynamic layers, this should just return all layers.
|
|
|
|
*/
|
2022-01-13 22:25:47 -06:00
|
|
|
export const getInitialLayers = (
|
|
|
|
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
2022-12-28 09:03:51 -06:00
|
|
|
player: Partial<Player>
|
Feature rewrite
- Removed `jsx()` and `JSXFunction`. You can now use `JSX.Element` like any other `Computable` value
- `joinJSX` now always requires a joiner. Just pass the array of elements or wrap them in `<>` and `</>` if there's no joiner
- Removed `coerceComponent`, `computeComponent`, and `computeOptionalComponent`; just use the `render` function now
- It's recommended to now do `<MyComponent />` instead of `<component :is="myComponent" />`
- All features no longer take the options as a type parameter, and all generic forms have been removed as a result
- Fixed `forceHideGoBack` not being respected
- Removed `deepUnref` as now things don't get unreffed before being passed into vue components by default
- Moved MarkNode to new wrapper, and removed existing `mark` properties
- Moved Tooltip to new wrapper, and made it take an options function instead of raw object
- VueFeature component now wraps all vue features, and applies styling, classes, and visibility in the wrapping div. It also adds the Node component so features don't need to
- `mergeAdjacent` now works with grids (perhaps should've used scss to reduce the amount of css this took)
- `CoercableComponent` renamed to `Renderable` since it should be used with `render`
- Replaced `isCoercableComponent` with `isJSXElement`
- Replaced `Computable` and `ProcessedComputable` with the vue built-ins `MaybeRefOrGetter` and `MaybeRef`
- `convertComputable` renamed to `processGetter`
- Also removed `GetComputableTypeWithDefault` and `GetComputableType`, which can similarly be replaced
- `dontMerge` is now a property on rows and columns rather than an undocumented css class you'd have to include on every feature within the row or column
- Fixed saves manager not being imported in addiction warning component
- Created `vueFeatureMixin` for simplifying the vue specific parts of a feature. Passes the component's properties in explicitly and directly from the feature itself
- All features should now return an object that includes props typed to omit the options object and satisfies the feature. This will ensure type correctness and pass-through custom properties. (see existing features for more thorough examples of changes)
- Replaced decorators with mixins, which won't require casting. Bonus amount decorators converted into generic bonus amount mixin. Removed effect decorator
- All `render` functions now return `JSX.Element`. The `JSX` variants (e.g. `renderJSX`) (except `joinJSX`) have been removed
- Moved all features that use the clickable component into the clickable folder
- Removed `small` property from clickable, since its a single css rule (`min-height: unset`) (you could add a small css class and pass small to any vue feature's classes property, though)
- Upgrades now use the clickable component
- Added ConversionType symbol
- Removed setDefault, just use `??=`
- Added isType function that uses a type symbol to check
- General cleanup
2024-11-19 08:32:45 -06:00
|
|
|
): Array<Layer> => [main, prestige];
|
2022-01-13 22:25:47 -06:00
|
|
|
|
2022-07-10 01:44:45 -05:00
|
|
|
/**
|
|
|
|
* A computed ref whose value is true whenever the game is over.
|
|
|
|
*/
|
2022-01-13 22:25:47 -06:00
|
|
|
export const hasWon = computed(() => {
|
2022-02-27 18:31:51 -06:00
|
|
|
return false;
|
2022-01-13 22:25:47 -06:00
|
|
|
});
|
|
|
|
|
2022-07-10 01:44:45 -05:00
|
|
|
/**
|
|
|
|
* Given a player save data object being loaded with a different version, update the save data object to match the structure of the current version.
|
|
|
|
* @param oldVersion The version of the save being loaded in
|
|
|
|
* @param player The save data being loaded in
|
|
|
|
*/
|
2022-01-13 22:25:47 -06:00
|
|
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
|
|
export function fixOldSave(
|
|
|
|
oldVersion: string | undefined,
|
2022-12-28 09:03:51 -06:00
|
|
|
player: Partial<Player>
|
2022-01-13 22:25:47 -06:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
|
|
): void {}
|
|
|
|
/* eslint-enable @typescript-eslint/no-unused-vars */
|