forked from profectus/Profectus
Ran prettier
This commit is contained in:
parent
c9ca85978d
commit
98f18fef43
11 changed files with 139 additions and 55 deletions
|
@ -142,7 +142,10 @@ export function createAchievement<T extends AchievementOptions>(
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Achievement<T> {
|
): Achievement<T> {
|
||||||
const earned = persistent<boolean>(false, false);
|
const earned = persistent<boolean>(false, false);
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const achievement =
|
const achievement =
|
||||||
optionsFunc?.call(feature, feature) ??
|
optionsFunc?.call(feature, feature) ??
|
||||||
|
@ -232,7 +235,10 @@ export function createAchievement<T extends AchievementOptions>(
|
||||||
decorator.postConstruct?.(achievement);
|
decorator.postConstruct?.(achievement);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(achievement)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(achievement)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
achievement[GatherProps] = function (this: GenericAchievement) {
|
achievement[GatherProps] = function (this: GenericAchievement) {
|
||||||
const {
|
const {
|
||||||
visibility,
|
visibility,
|
||||||
|
|
|
@ -107,7 +107,10 @@ export function createAction<T extends ActionOptions>(
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Action<T> {
|
): Action<T> {
|
||||||
const progress = persistent<DecimalSource>(0);
|
const progress = persistent<DecimalSource>(0);
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const action =
|
const action =
|
||||||
optionsFunc?.call(feature, feature) ??
|
optionsFunc?.call(feature, feature) ??
|
||||||
|
@ -241,7 +244,9 @@ export function createAction<T extends ActionOptions>(
|
||||||
decorator.postConstruct?.(action);
|
decorator.postConstruct?.(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(action)));
|
const decoratedProps = decorators.reduce((current, next) =>
|
||||||
|
Object.assign(current, next.getGatheredProps?.(action))
|
||||||
|
);
|
||||||
action[GatherProps] = function (this: GenericAction) {
|
action[GatherProps] = function (this: GenericAction) {
|
||||||
const {
|
const {
|
||||||
display,
|
display,
|
||||||
|
|
|
@ -105,7 +105,10 @@ export function createBar<T extends BarOptions>(
|
||||||
optionsFunc: OptionsFunc<T, BaseBar, GenericBar>,
|
optionsFunc: OptionsFunc<T, BaseBar, GenericBar>,
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Bar<T> {
|
): Bar<T> {
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const bar = optionsFunc.call(feature, feature);
|
const bar = optionsFunc.call(feature, feature);
|
||||||
bar.id = getUniqueID("bar-");
|
bar.id = getUniqueID("bar-");
|
||||||
|
@ -137,7 +140,10 @@ export function createBar<T extends BarOptions>(
|
||||||
decorator.postConstruct?.(bar);
|
decorator.postConstruct?.(bar);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(bar)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(bar)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
bar[GatherProps] = function (this: GenericBar) {
|
bar[GatherProps] = function (this: GenericBar) {
|
||||||
const {
|
const {
|
||||||
progress,
|
progress,
|
||||||
|
|
|
@ -154,7 +154,10 @@ export function createChallenge<T extends ChallengeOptions>(
|
||||||
): Challenge<T> {
|
): Challenge<T> {
|
||||||
const completions = persistent(0);
|
const completions = persistent(0);
|
||||||
const active = persistent(false, false);
|
const active = persistent(false, false);
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const challenge = optionsFunc.call(feature, feature);
|
const challenge = optionsFunc.call(feature, feature);
|
||||||
|
|
||||||
|
@ -271,7 +274,10 @@ export function createChallenge<T extends ChallengeOptions>(
|
||||||
decorator.postConstruct?.(challenge);
|
decorator.postConstruct?.(challenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(challenge)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(challenge)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
challenge[GatherProps] = function (this: GenericChallenge) {
|
challenge[GatherProps] = function (this: GenericChallenge) {
|
||||||
const {
|
const {
|
||||||
active,
|
active,
|
||||||
|
|
|
@ -99,7 +99,10 @@ export function createClickable<T extends ClickableOptions>(
|
||||||
optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable>,
|
optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable>,
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Clickable<T> {
|
): Clickable<T> {
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const clickable =
|
const clickable =
|
||||||
optionsFunc?.call(feature, feature) ??
|
optionsFunc?.call(feature, feature) ??
|
||||||
|
@ -144,7 +147,10 @@ export function createClickable<T extends ClickableOptions>(
|
||||||
decorator.postConstruct?.(clickable);
|
decorator.postConstruct?.(clickable);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(clickable)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(clickable)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
clickable[GatherProps] = function (this: GenericClickable) {
|
clickable[GatherProps] = function (this: GenericClickable) {
|
||||||
const {
|
const {
|
||||||
display,
|
display,
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
import { Replace } from "features/feature";
|
import { Replace } from "features/feature";
|
||||||
import Decimal, { DecimalSource } from "util/bignum";
|
import Decimal, { DecimalSource } from "util/bignum";
|
||||||
import { Computable, GetComputableType, ProcessedComputable, processComputable } from "util/computed";
|
import {
|
||||||
|
Computable,
|
||||||
|
GetComputableType,
|
||||||
|
ProcessedComputable,
|
||||||
|
processComputable
|
||||||
|
} from "util/computed";
|
||||||
import { Ref, computed, unref } from "vue";
|
import { Ref, computed, unref } from "vue";
|
||||||
import { Decorator } from "./common";
|
import { Decorator } from "./common";
|
||||||
|
|
||||||
|
@ -25,10 +30,12 @@ export interface BaseBonusCompletionsFeature {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type BonusAmountFeature<T extends BonusAmountFeatureOptions> = Replace<
|
export type BonusAmountFeature<T extends BonusAmountFeatureOptions> = Replace<
|
||||||
T, { bonusAmount: GetComputableType<T["bonusAmount"]>; }
|
T,
|
||||||
|
{ bonusAmount: GetComputableType<T["bonusAmount"]> }
|
||||||
>;
|
>;
|
||||||
export type BonusCompletionsFeature<T extends BonusCompletionsFeatureOptions> = Replace<
|
export type BonusCompletionsFeature<T extends BonusCompletionsFeatureOptions> = Replace<
|
||||||
T, { bonusAmount: GetComputableType<T["bonusCompletions"]>; }
|
T,
|
||||||
|
{ bonusAmount: GetComputableType<T["bonusCompletions"]> }
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type GenericBonusAmountFeature = Replace<
|
export type GenericBonusAmountFeature = Replace<
|
||||||
|
@ -47,9 +54,9 @@ export type GenericBonusCompletionsFeature = Replace<
|
||||||
>;
|
>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount".
|
* Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount".
|
||||||
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}.
|
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}.
|
||||||
* Additionally, the base feature must have an `amount` property.
|
* Additionally, the base feature must have an `amount` property.
|
||||||
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusAmountFeature}.
|
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusAmountFeature}.
|
||||||
* @example ```ts
|
* @example ```ts
|
||||||
* createRepeatable<RepeatableOptions & BonusAmountFeatureOptions>(() => ({
|
* createRepeatable<RepeatableOptions & BonusAmountFeatureOptions>(() => ({
|
||||||
|
@ -57,26 +64,34 @@ export type GenericBonusCompletionsFeature = Replace<
|
||||||
* ...
|
* ...
|
||||||
* }), bonusAmountDecorator) as GenericRepeatable & GenericBonusAmountFeature
|
* }), bonusAmountDecorator) as GenericRepeatable & GenericBonusAmountFeature
|
||||||
*/
|
*/
|
||||||
export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusAmountFeature, GenericBonusAmountFeature> = {
|
export const bonusAmountDecorator: Decorator<
|
||||||
|
BonusAmountFeatureOptions,
|
||||||
|
BaseBonusAmountFeature,
|
||||||
|
GenericBonusAmountFeature
|
||||||
|
> = {
|
||||||
preConstruct(feature) {
|
preConstruct(feature) {
|
||||||
if (feature.amount === undefined) {
|
if (feature.amount === undefined) {
|
||||||
console.error(`Decorated feature ${feature.id} does not contain the required 'amount' property"`);
|
console.error(
|
||||||
|
`Decorated feature ${feature.id} does not contain the required 'amount' property"`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
postConstruct(feature) {
|
postConstruct(feature) {
|
||||||
processComputable(feature, "bonusAmount");
|
processComputable(feature, "bonusAmount");
|
||||||
if (feature.totalAmount === undefined) {
|
if (feature.totalAmount === undefined) {
|
||||||
feature.totalAmount = computed(() => Decimal.add(
|
feature.totalAmount = computed(() =>
|
||||||
unref(feature.amount ?? 0),
|
Decimal.add(
|
||||||
unref(feature.bonusAmount as ProcessedComputable<DecimalSource>)
|
unref(feature.amount ?? 0),
|
||||||
));
|
unref(feature.bonusAmount as ProcessedComputable<DecimalSource>)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount".
|
* Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount".
|
||||||
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusCompletionFeatureOptions}.
|
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusCompletionFeatureOptions}.
|
||||||
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusCompletionFeature}.
|
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusCompletionFeature}.
|
||||||
* @example ```ts
|
* @example ```ts
|
||||||
* createChallenge<ChallengeOptions & BonusCompletionFeatureOptions>(() => ({
|
* createChallenge<ChallengeOptions & BonusCompletionFeatureOptions>(() => ({
|
||||||
|
@ -84,14 +99,20 @@ export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonu
|
||||||
* ...
|
* ...
|
||||||
* }), bonusCompletionDecorator) as GenericChallenge & GenericBonusCompletionFeature
|
* }), bonusCompletionDecorator) as GenericChallenge & GenericBonusCompletionFeature
|
||||||
*/
|
*/
|
||||||
export const bonusCompletionsDecorator: Decorator<BonusCompletionsFeatureOptions, BaseBonusCompletionsFeature, GenericBonusCompletionsFeature> = {
|
export const bonusCompletionsDecorator: Decorator<
|
||||||
|
BonusCompletionsFeatureOptions,
|
||||||
|
BaseBonusCompletionsFeature,
|
||||||
|
GenericBonusCompletionsFeature
|
||||||
|
> = {
|
||||||
postConstruct(feature) {
|
postConstruct(feature) {
|
||||||
processComputable(feature, "bonusCompletions");
|
processComputable(feature, "bonusCompletions");
|
||||||
if (feature.totalCompletions === undefined) {
|
if (feature.totalCompletions === undefined) {
|
||||||
feature.totalCompletions = computed(() => Decimal.add(
|
feature.totalCompletions = computed(() =>
|
||||||
unref(feature.completions ?? 0),
|
Decimal.add(
|
||||||
unref(feature.bonusCompletions as ProcessedComputable<DecimalSource>)
|
unref(feature.completions ?? 0),
|
||||||
));
|
unref(feature.bonusCompletions as ProcessedComputable<DecimalSource>)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
|
@ -1,13 +1,29 @@
|
||||||
import { Replace, OptionsObject } from "../feature";
|
import { Replace, OptionsObject } from "../feature";
|
||||||
import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed";
|
import {
|
||||||
|
Computable,
|
||||||
|
GetComputableType,
|
||||||
|
processComputable,
|
||||||
|
ProcessedComputable
|
||||||
|
} from "util/computed";
|
||||||
import { Persistent, State } from "game/persistence";
|
import { Persistent, State } from "game/persistence";
|
||||||
|
|
||||||
export type Decorator<FeatureOptions, BaseFeature = object, GenericFeature = BaseFeature, S extends State = State> = {
|
export type Decorator<
|
||||||
|
FeatureOptions,
|
||||||
|
BaseFeature = object,
|
||||||
|
GenericFeature = BaseFeature,
|
||||||
|
S extends State = State
|
||||||
|
> = {
|
||||||
getPersistentData?(): Record<string, Persistent<S>>;
|
getPersistentData?(): Record<string, Persistent<S>>;
|
||||||
preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void;
|
preConstruct?(
|
||||||
postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void;
|
feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature>
|
||||||
getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>>
|
): void;
|
||||||
}
|
postConstruct?(
|
||||||
|
feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature>
|
||||||
|
): void;
|
||||||
|
getGatheredProps?(
|
||||||
|
feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature>
|
||||||
|
): Partial<OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature>>;
|
||||||
|
};
|
||||||
|
|
||||||
export type GenericDecorator = Decorator<unknown>;
|
export type GenericDecorator = Decorator<unknown>;
|
||||||
|
|
||||||
|
@ -16,17 +32,18 @@ export interface EffectFeatureOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type EffectFeature<T extends EffectFeatureOptions> = Replace<
|
export type EffectFeature<T extends EffectFeatureOptions> = Replace<
|
||||||
T, { effect: GetComputableType<T["effect"]>; }
|
T,
|
||||||
|
{ effect: GetComputableType<T["effect"]> }
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export type GenericEffectFeature = Replace<
|
export type GenericEffectFeature = Replace<
|
||||||
EffectFeature<EffectFeatureOptions>,
|
EffectFeature<EffectFeatureOptions>,
|
||||||
{ effect: ProcessedComputable<any>; }
|
{ effect: ProcessedComputable<any> }
|
||||||
>;
|
>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows the usage of an `effect` field in the decorated feature.
|
* Allows the usage of an `effect` field in the decorated feature.
|
||||||
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode EffectFeatureOptions}.
|
* To function properly, the `createFeature()` function must have its generic type extended by {@linkcode EffectFeatureOptions}.
|
||||||
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericEffectFeature}.
|
* To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericEffectFeature}.
|
||||||
* @example ```ts
|
* @example ```ts
|
||||||
* createRepeatable<RepeatableOptions & EffectFeatureOptions>(() => ({
|
* createRepeatable<RepeatableOptions & EffectFeatureOptions>(() => ({
|
||||||
|
@ -39,5 +56,4 @@ export const effectDecorator: Decorator<EffectFeatureOptions, unknown, GenericEf
|
||||||
postConstruct(feature) {
|
postConstruct(feature) {
|
||||||
processComputable(feature, "effect");
|
processComputable(feature, "effect");
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ export type Replace<T, S> = S & Omit<T, keyof S>;
|
||||||
* with "this" bound to what the type will eventually be processed into.
|
* with "this" bound to what the type will eventually be processed into.
|
||||||
* Intended for making lazily evaluated objects.
|
* Intended for making lazily evaluated objects.
|
||||||
*/
|
*/
|
||||||
export type OptionsFunc<T, R = unknown, S = R> = (obj: R) => OptionsObject<T,R,S>;
|
export type OptionsFunc<T, R = unknown, S = R> = (obj: R) => OptionsObject<T, R, S>;
|
||||||
|
|
||||||
export type OptionsObject<T, R = unknown, S = R> = T & Partial<R> & ThisType<T & S>;
|
export type OptionsObject<T, R = unknown, S = R> = T & Partial<R> & ThisType<T & S>;
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,10 @@ export function createRepeatable<T extends RepeatableOptions>(
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Repeatable<T> {
|
): Repeatable<T> {
|
||||||
const amount = persistent<DecimalSource>(0);
|
const amount = persistent<DecimalSource>(0);
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy<Repeatable<T>, Repeatable<T>>(feature => {
|
return createLazyProxy<Repeatable<T>, Repeatable<T>>(feature => {
|
||||||
const repeatable = optionsFunc.call(feature, feature);
|
const repeatable = optionsFunc.call(feature, feature);
|
||||||
|
|
||||||
|
@ -233,10 +236,10 @@ export function createRepeatable<T extends RepeatableOptions>(
|
||||||
<div>
|
<div>
|
||||||
<br />
|
<br />
|
||||||
joinJSX(
|
joinJSX(
|
||||||
<>Amount: {formatWhole(genericRepeatable.amount.value)}</>,
|
<>Amount: {formatWhole(genericRepeatable.amount.value)}</>,
|
||||||
{unref(genericRepeatable.limit) !== Decimal.dInf ? (
|
{unref(genericRepeatable.limit) !== Decimal.dInf ? (
|
||||||
<> / {formatWhole(unref(genericRepeatable.limit))}</>
|
<> / {formatWhole(unref(genericRepeatable.limit))}</>
|
||||||
) : undefined}
|
) : undefined}
|
||||||
)
|
)
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
@ -274,7 +277,10 @@ export function createRepeatable<T extends RepeatableOptions>(
|
||||||
decorator.postConstruct?.(repeatable);
|
decorator.postConstruct?.(repeatable);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(repeatable)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(repeatable)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
repeatable[GatherProps] = function (this: GenericRepeatable) {
|
repeatable[GatherProps] = function (this: GenericRepeatable) {
|
||||||
const { display, visibility, style, classes, onClick, canClick, small, mark, id } =
|
const { display, visibility, style, classes, onClick, canClick, small, mark, id } =
|
||||||
this;
|
this;
|
||||||
|
|
|
@ -105,7 +105,10 @@ export function createTreeNode<T extends TreeNodeOptions>(
|
||||||
optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode>,
|
optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode>,
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): TreeNode<T> {
|
): TreeNode<T> {
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const treeNode =
|
const treeNode =
|
||||||
optionsFunc?.call(feature, feature) ??
|
optionsFunc?.call(feature, feature) ??
|
||||||
|
@ -152,7 +155,10 @@ export function createTreeNode<T extends TreeNodeOptions>(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(treeNode)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(treeNode)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
treeNode[GatherProps] = function (this: GenericTreeNode) {
|
treeNode[GatherProps] = function (this: GenericTreeNode) {
|
||||||
const {
|
const {
|
||||||
display,
|
display,
|
||||||
|
|
|
@ -21,7 +21,7 @@ import type { GenericLayer } from "game/layers";
|
||||||
import type { Persistent } from "game/persistence";
|
import type { Persistent } from "game/persistence";
|
||||||
import { persistent } from "game/persistence";
|
import { persistent } from "game/persistence";
|
||||||
import {
|
import {
|
||||||
createCostRequirement,
|
createCostRequirement,
|
||||||
createVisibilityRequirement,
|
createVisibilityRequirement,
|
||||||
payRequirements,
|
payRequirements,
|
||||||
Requirements,
|
Requirements,
|
||||||
|
@ -122,7 +122,10 @@ export function createUpgrade<T extends UpgradeOptions>(
|
||||||
...decorators: GenericDecorator[]
|
...decorators: GenericDecorator[]
|
||||||
): Upgrade<T> {
|
): Upgrade<T> {
|
||||||
const bought = persistent<boolean>(false, false);
|
const bought = persistent<boolean>(false, false);
|
||||||
const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {});
|
const decoratedData = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getPersistentData?.()),
|
||||||
|
{}
|
||||||
|
);
|
||||||
return createLazyProxy(feature => {
|
return createLazyProxy(feature => {
|
||||||
const upgrade = optionsFunc.call(feature, feature);
|
const upgrade = optionsFunc.call(feature, feature);
|
||||||
upgrade.id = getUniqueID("upgrade-");
|
upgrade.id = getUniqueID("upgrade-");
|
||||||
|
@ -165,7 +168,10 @@ export function createUpgrade<T extends UpgradeOptions>(
|
||||||
decorator.preConstruct?.(upgrade);
|
decorator.preConstruct?.(upgrade);
|
||||||
}
|
}
|
||||||
|
|
||||||
const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(upgrade)), {});
|
const decoratedProps = decorators.reduce(
|
||||||
|
(current, next) => Object.assign(current, next.getGatheredProps?.(upgrade)),
|
||||||
|
{}
|
||||||
|
);
|
||||||
upgrade[GatherProps] = function (this: GenericUpgrade) {
|
upgrade[GatherProps] = function (this: GenericUpgrade) {
|
||||||
const {
|
const {
|
||||||
display,
|
display,
|
||||||
|
|
Loading…
Reference in a new issue