Skip to content

Commit

Permalink
feat: Can now change how Player initiatives are rolled in the Tracker…
Browse files Browse the repository at this point in the history
… controls
  • Loading branch information
valentine195 committed Sep 19, 2023
1 parent ba8ccf2 commit 4fe45ff
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 70 deletions.
4 changes: 3 additions & 1 deletion index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ export interface InitiativeTrackerData {
builder: BuilderState;
descending: boolean;
version: number[];

rollPlayerInitiatives: RollPlayerInitiativeBehavior;
}

export interface BuilderState {
Expand Down Expand Up @@ -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;
Expand Down
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
5 changes: 5 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
57 changes: 36 additions & 21 deletions src/tracker/stores/tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)),
Expand Down Expand Up @@ -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) =>
Expand All @@ -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 (
Expand Down
133 changes: 94 additions & 39 deletions src/tracker/ui/Controls.svelte
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<script lang="ts">
import { ExtraButtonComponent, type MenuItem, Platform } from "obsidian";
import {
ExtraButtonComponent,
type MenuItem,
Platform,
Menu
} from "obsidian";
import {
BACKWARD,
DICE,
Expand All @@ -10,17 +14,15 @@
NEW,
PLAY,
REDO,
RollPlayerInitiativeBehavior,
SAVE,
STOP
} from "src/utils";
import { Menu } from "obsidian";
import { createEventDispatcher, getContext } from "svelte";
import type InitiativeTracker from "src/main";
import { tracker } from "../stores/tracker";
const { state, data, logFile, sort } = tracker;
const { state, data, logFile, sort, party } = tracker;
const desktop = Platform.isDesktop;
Expand Down Expand Up @@ -75,29 +77,6 @@
.setTitle("Re-roll Initiatives")
.onClick(() => tracker.roll(plugin));
});
if ($data.parties && $data.parties.length) {
menu.addItem((item) => {
item.setIcon("switch")
.setTitle("Switch Party")
.onClick((evt: MouseEvent) => {
/* menu.hide(); */
const partyMenu = new Menu().setNoIcon();
partyMenu.addItem((item) => {
item.setTitle("None").onClick(() => {
tracker.setParty("", plugin);
});
});
for (const party of $data.parties) {
partyMenu.addItem((item) => {
item.setTitle(party.name).onClick(() => {
tracker.setParty(party.name, plugin);
});
});
}
partyMenu.showAtMouseEvent(evt);
});
});
}
menu.addItem((item) => {
item.setIcon(GROUP)
.setTitle(
Expand Down Expand Up @@ -129,25 +108,101 @@
}
);
});
menu.addSeparator();
if ($data.parties && $data.parties.length) {
menu.addItem((item) => {
const partyMenu = item
.setIcon("switch")
.setTitle("Switch Party")
.setSubmenu();
partyMenu.addItem((item) => {
item.setTitle("None")
.onClick(() => {
tracker.setParty("", plugin);
})
.setChecked(!$party || $party == "");
});
for (const p of $data.parties) {
partyMenu.addItem((item) => {
item.setTitle(p.name)
.onClick(() => {
tracker.setParty(p.name, plugin);
})
.setChecked($party == p.name);
});
}
});
}
menu.addItem((item) => {
const partyMenu = item
.setIcon("switch")
.setTitle("Party Rolling Behavior")
.setSubmenu();
partyMenu.addItem((item) => {
item.setTitle("Always Roll")
.onClick(async () => {
plugin.data.rollPlayerInitiatives =
RollPlayerInitiativeBehavior.Always;
await plugin.saveSettings();
})
.setChecked(
plugin.data.rollPlayerInitiatives ==
RollPlayerInitiativeBehavior.Always
);
});
partyMenu.addItem((item) => {
item.setTitle("Never Roll")
.onClick(async () => {
plugin.data.rollPlayerInitiatives =
RollPlayerInitiativeBehavior.Never;
await plugin.saveSettings();
})
.setChecked(
plugin.data.rollPlayerInitiatives ==
RollPlayerInitiativeBehavior.Never
);
});
partyMenu.addItem((item) => {
item.setTitle("Set to Zero")
.onClick(async () => {
plugin.data.rollPlayerInitiatives =
RollPlayerInitiativeBehavior.SetToZero;
await plugin.saveSettings();
})
.setChecked(
plugin.data.rollPlayerInitiatives ==
RollPlayerInitiativeBehavior.SetToZero
);
});
});
menu.addSeparator();
menu.addItem((item) => {
const load = item
.setIcon("open-elsewhere-glyph")
.setTitle("Load Encounter")
.setDisabled(Object.keys(plugin.data.encounters).length == 0)
.setSubmenu()
.setNoIcon();
for (const encounter of Object.keys(plugin.data.encounters)) {
load.addItem((item) => {
item.setTitle(encounter).onClick(() => {
tracker.new(plugin, plugin.data.encounters[encounter]);
});
});
}
});
menu.addItem((item) => {
item.setIcon(SAVE)
.setTitle("Save Encounter")
.onClick(() => {
dispatch("save");
});
});
let load: MenuItem;
menu.addItem((item) => {
load = item
.setIcon("open-elsewhere-glyph")
.setTitle("Load Encounter")
.onClick(() => {
dispatch("load");
})
.setDisabled(Object.keys(plugin.data.encounters).length == 0);
});
menu.showAtMouseEvent(evt);
};
Expand Down
9 changes: 8 additions & 1 deletion src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ export const DEFAULT_UNDEFINED = "–";

export const META_MODIFIER = Platform.isMacOS ? "Meta" : "Control";

export enum RollPlayerInitiativeBehavior {
Always,
Never,
SetToZero
}

export const DEFAULT_SETTINGS: InitiativeTrackerData = {
players: [],
parties: [],
Expand Down Expand Up @@ -61,7 +67,8 @@ export const DEFAULT_SETTINGS: InitiativeTrackerData = {
showParty: true,
showXP: true,
sidebarIcon: true
}
},
rollPlayerInitiatives: RollPlayerInitiativeBehavior.Always
};

export const OVERFLOW_TYPE: { [key: string]: string } = {
Expand Down

0 comments on commit 4fe45ff

Please sign in to comment.