diff --git a/src/components/astral/Powers.astro b/src/components/astral/Powers.astro index 16ffac9..cc52cc8 100644 --- a/src/components/astral/Powers.astro +++ b/src/components/astral/Powers.astro @@ -33,6 +33,7 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => import { isPowerId, parentPowers, + powerData, type powerId, powers, } from "../../consts/astral"; @@ -70,11 +71,12 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => this.#internals.states.add("selected"); button && (button.disabled = false); - // if any selected powers rely on it + // if any selected powers rely on it OR if its force select if ( value.powers.filter((x) => parentPowers[x].includes(this.power ?? powers.INVALID), - ).length > 1 + ).length > 1 || + powerData[this.power].forceSelect ) { this.#internals.states.add("dependency"); button && (button.disabled = true); @@ -104,7 +106,8 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => const button = this.shadowRoot?.querySelector("dialog button"); if (!(button instanceof HTMLButtonElement)) throw "`dialog button` could not be selected"; - button.addEventListener("click", (ev) => { + + button.addEventListener("click", () => { if ( // this.power is in some way invalid; drop the event !this.power || @@ -114,7 +117,8 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => return; // the power is selected; deselect it else if (Powers.get().powers.includes(this.power)) { - console.log("deselect"); + button.disabled = true; + Powers.setKey( "powers", Powers.get().powers.filter((x) => x !== this.power), @@ -125,8 +129,10 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => // the power is not selected and its parent is unlocked else if ( Powers.get().powers.includes(parentPowers[this.power].at(-2) ?? "") - ) + ) { + button.disabled = true; Powers.setKey("powers", [...Powers.get().powers, this.power]); + } }); } @@ -172,7 +178,7 @@ const getLayer = (children: (typeof powerTree)[], layer: number = 1): number => "Locked: This power cannot be added to the power list", "No parent: The parent power for this power has not been selected", "No points: You do not have enough points to unlock this power", - "Dependency: Another power relies on this power being selected", + "Dependency: Another power relies on this power being selected, or it must be selected", ].join("\n")} > Unselect diff --git a/src/consts/astral.ts b/src/consts/astral.ts index f211081..a260bfc 100644 --- a/src/consts/astral.ts +++ b/src/consts/astral.ts @@ -46,7 +46,7 @@ export const isPowerId = (power: unknown): power is powerId => export interface Power { name: string; - forceSelect?: boolean; + forceSelect?: true; description: string; image: { src: string;