diff --git a/index.ts b/index.ts index c85bfb91..ff06916d 100644 --- a/index.ts +++ b/index.ts @@ -125,6 +125,8 @@ export interface InitiativeTrackerData { builder: BuilderState; descending: boolean; version: number[]; + + rollPlayerInitiatives: RollPlayerInitiativeBehavior; } export interface BuilderState { @@ -246,7 +248,7 @@ export interface BuilderGenericPlayer { export type BuilderPlayer = BuilderPartyPlayer | BuilderGenericPlayer; -import type InitiativeTracker from "src/main"; +import type { RollPlayerInitiativeBehavior } from "src/utils"; export declare function getId(): string; export declare class Creature { creature: HomebrewCreature; diff --git a/package-lock.json b/package-lock.json index 070b6e89..0db8af11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "esbuild-svelte": "^0.6.0", "fast-copy": "^3.0.1", "jest": "^29.5.0", - "obsidian": "^1.4.0", + "obsidian": "^1.4.11", "obsidian-overload": "^1.41.0", "standard-version": "^9.3.2", "svelte": "^3.49.0", @@ -6174,9 +6174,9 @@ } }, "node_modules/obsidian": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.4.0.tgz", - "integrity": "sha512-fsZMPlxgflGSBSP6P4BjQi5+0MqZl3h6FEDEZ3CNnweNdDw0doyqN3FMO/PGWfuxPT77WicVwUxekuI3e6eCGg==", + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.4.11.tgz", + "integrity": "sha512-BCVYTvaXxElJMl6MMbDdY/CGK+aq18SdtDY/7vH8v6BxCBQ6KF4kKxL0vG9UZ0o5qh139KpUoJHNm+6O5dllKA==", "dev": true, "dependencies": { "@types/codemirror": "5.60.8", @@ -12884,9 +12884,9 @@ } }, "obsidian": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.4.0.tgz", - "integrity": "sha512-fsZMPlxgflGSBSP6P4BjQi5+0MqZl3h6FEDEZ3CNnweNdDw0doyqN3FMO/PGWfuxPT77WicVwUxekuI3e6eCGg==", + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.4.11.tgz", + "integrity": "sha512-BCVYTvaXxElJMl6MMbDdY/CGK+aq18SdtDY/7vH8v6BxCBQ6KF4kKxL0vG9UZ0o5qh139KpUoJHNm+6O5dllKA==", "dev": true, "requires": { "@types/codemirror": "5.60.8", diff --git a/package.json b/package.json index c852a039..3742a356 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "esbuild-svelte": "^0.6.0", "fast-copy": "^3.0.1", "jest": "^29.5.0", - "obsidian": "^1.4.0", + "obsidian": "^1.4.11", "obsidian-overload": "^1.41.0", "standard-version": "^9.3.2", "svelte": "^3.49.0", diff --git a/src/main.ts b/src/main.ts index 276594c0..b5fa582c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -47,6 +47,11 @@ declare module "obsidian" { interface Workspace { on(...args: EventsOnArgs): EventRef; } + + interface MenuItem { + setSubmenu: () => Menu; + submenu: Menu; + } } export default class InitiativeTracker extends Plugin { diff --git a/src/tracker/stores/tracker.ts b/src/tracker/stores/tracker.ts index 72cf877a..895e8e5c 100644 --- a/src/tracker/stores/tracker.ts +++ b/src/tracker/stores/tracker.ts @@ -10,7 +10,11 @@ import type { UpdateLogMessage } from "../../../index"; import type { StackRoller } from "obsidian-overload"; -import { OVERFLOW_TYPE, getRpgSystem } from "src/utils"; +import { + OVERFLOW_TYPE, + RollPlayerInitiativeBehavior, + getRpgSystem +} from "src/utils"; import type Logger from "../../logger/logger"; import type { DifficultyLevel, @@ -291,6 +295,34 @@ function createTracker() { } }; + function rollIntiative( + plugin: InitiativeTracker, + creatures: Creature[] + ): Creature[] { + for (let creature of creatures) { + if (creature.static && creature.initiative) continue; + creature.active = false; + if ( + creature.player && + plugin.data.rollPlayerInitiatives == + RollPlayerInitiativeBehavior.Never + ) + continue; + if ( + creature.player && + plugin.data.rollPlayerInitiatives == + RollPlayerInitiativeBehavior.SetToZero + ) { + creature.initiative = 0; + } else { + creature.initiative = plugin.getInitiativeValue( + creature.modifier + ); + } + } + return creatures; + } + return { subscribe, set, @@ -637,12 +669,7 @@ function createTracker() { } */ } - for (let creature of items) { - if (creature.static) continue; - creature.initiative = plugin.getInitiativeValue( - creature.modifier - ); - } + rollIntiative(plugin, creatures); creatures.push(...items); _logger?.log( _logger?.join(items.map((c) => c.name)), @@ -672,13 +699,7 @@ function createTracker() { updateAndSave: () => updateAndSave((c) => c), roll: (plugin: InitiativeTracker) => updateAndSave((creatures) => { - for (let creature of creatures) { - if (creature.static) continue; - creature.initiative = plugin.getInitiativeValue( - creature.modifier - ); - creature.active = false; - } + rollIntiative(plugin, creatures); return creatures; }), new: (plugin: InitiativeTracker, state?: InitiativeViewState) => @@ -690,13 +711,7 @@ function createTracker() { ? state.creatures.map((c) => Creature.fromJSON(c, plugin)) : creatures.filter((c) => c.player); if (!state || state?.roll) { - for (let creature of creatures) { - if (creature.static && creature.initiative) continue; - creature.initiative = plugin.getInitiativeValue( - creature.modifier - ); - creature.active = false; - } + rollIntiative(plugin, creatures); } setNumbers(creatures); if ( diff --git a/src/tracker/ui/Controls.svelte b/src/tracker/ui/Controls.svelte index 6268bc7d..b57bd894 100644 --- a/src/tracker/ui/Controls.svelte +++ b/src/tracker/ui/Controls.svelte @@ -1,6 +1,10 @@