From 51f5fe7fce5a0635b0c0b2ec3ceedda0e0731046 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:12:22 -0500 Subject: [PATCH] Moving static files to public folder to be automatically copied to out --- {src => public}/lang/en.json | 0 {src => public}/module.json | 0 {src => public}/styles/kingdom-sheet.css | 0 {src => public}/templates/levels/level-1.hbs | 0 {src => public}/templates/levels/level-10.hbs | 0 {src => public}/templates/levels/level-11.hbs | 0 {src => public}/templates/levels/level-12.hbs | 0 {src => public}/templates/levels/level-13.hbs | 0 {src => public}/templates/levels/level-14.hbs | 0 {src => public}/templates/levels/level-15.hbs | 0 {src => public}/templates/levels/level-16.hbs | 0 {src => public}/templates/levels/level-17.hbs | 0 {src => public}/templates/levels/level-18.hbs | 0 {src => public}/templates/levels/level-19.hbs | 0 {src => public}/templates/levels/level-2.hbs | 0 {src => public}/templates/levels/level-20.hbs | 0 {src => public}/templates/levels/level-3.hbs | 0 {src => public}/templates/levels/level-4.hbs | 0 {src => public}/templates/levels/level-5.hbs | 0 {src => public}/templates/levels/level-6.hbs | 0 {src => public}/templates/levels/level-7.hbs | 0 {src => public}/templates/levels/level-8.hbs | 0 {src => public}/templates/levels/level-9.hbs | 0 {src => public}/templates/sheet.hbs | 0 {src => public}/templates/tab-link.hbs | 0 {src => public}/templates/tab.hbs | 0 {src => public}/templates/tabs/tab-effects.hbs | 0 {src => public}/templates/tabs/tab-kingdom.hbs | 0 {src => public}/templates/tabs/tab-relations.hbs | 0 {src => public}/templates/tabs/tab-settlements.hbs | 0 {src => public}/templates/tabs/tab-turn.hbs | 0 31 files changed, 0 insertions(+), 0 deletions(-) rename {src => public}/lang/en.json (100%) rename {src => public}/module.json (100%) rename {src => public}/styles/kingdom-sheet.css (100%) rename {src => public}/templates/levels/level-1.hbs (100%) rename {src => public}/templates/levels/level-10.hbs (100%) rename {src => public}/templates/levels/level-11.hbs (100%) rename {src => public}/templates/levels/level-12.hbs (100%) rename {src => public}/templates/levels/level-13.hbs (100%) rename {src => public}/templates/levels/level-14.hbs (100%) rename {src => public}/templates/levels/level-15.hbs (100%) rename {src => public}/templates/levels/level-16.hbs (100%) rename {src => public}/templates/levels/level-17.hbs (100%) rename {src => public}/templates/levels/level-18.hbs (100%) rename {src => public}/templates/levels/level-19.hbs (100%) rename {src => public}/templates/levels/level-2.hbs (100%) rename {src => public}/templates/levels/level-20.hbs (100%) rename {src => public}/templates/levels/level-3.hbs (100%) rename {src => public}/templates/levels/level-4.hbs (100%) rename {src => public}/templates/levels/level-5.hbs (100%) rename {src => public}/templates/levels/level-6.hbs (100%) rename {src => public}/templates/levels/level-7.hbs (100%) rename {src => public}/templates/levels/level-8.hbs (100%) rename {src => public}/templates/levels/level-9.hbs (100%) rename {src => public}/templates/sheet.hbs (100%) rename {src => public}/templates/tab-link.hbs (100%) rename {src => public}/templates/tab.hbs (100%) rename {src => public}/templates/tabs/tab-effects.hbs (100%) rename {src => public}/templates/tabs/tab-kingdom.hbs (100%) rename {src => public}/templates/tabs/tab-relations.hbs (100%) rename {src => public}/templates/tabs/tab-settlements.hbs (100%) rename {src => public}/templates/tabs/tab-turn.hbs (100%) diff --git a/src/lang/en.json b/public/lang/en.json similarity index 100% rename from src/lang/en.json rename to public/lang/en.json diff --git a/src/module.json b/public/module.json similarity index 100% rename from src/module.json rename to public/module.json diff --git a/src/styles/kingdom-sheet.css b/public/styles/kingdom-sheet.css similarity index 100% rename from src/styles/kingdom-sheet.css rename to public/styles/kingdom-sheet.css diff --git a/src/templates/levels/level-1.hbs b/public/templates/levels/level-1.hbs similarity index 100% rename from src/templates/levels/level-1.hbs rename to public/templates/levels/level-1.hbs diff --git a/src/templates/levels/level-10.hbs b/public/templates/levels/level-10.hbs similarity index 100% rename from src/templates/levels/level-10.hbs rename to public/templates/levels/level-10.hbs diff --git a/src/templates/levels/level-11.hbs b/public/templates/levels/level-11.hbs similarity index 100% rename from src/templates/levels/level-11.hbs rename to public/templates/levels/level-11.hbs diff --git a/src/templates/levels/level-12.hbs b/public/templates/levels/level-12.hbs similarity index 100% rename from src/templates/levels/level-12.hbs rename to public/templates/levels/level-12.hbs diff --git a/src/templates/levels/level-13.hbs b/public/templates/levels/level-13.hbs similarity index 100% rename from src/templates/levels/level-13.hbs rename to public/templates/levels/level-13.hbs diff --git a/src/templates/levels/level-14.hbs b/public/templates/levels/level-14.hbs similarity index 100% rename from src/templates/levels/level-14.hbs rename to public/templates/levels/level-14.hbs diff --git a/src/templates/levels/level-15.hbs b/public/templates/levels/level-15.hbs similarity index 100% rename from src/templates/levels/level-15.hbs rename to public/templates/levels/level-15.hbs diff --git a/src/templates/levels/level-16.hbs b/public/templates/levels/level-16.hbs similarity index 100% rename from src/templates/levels/level-16.hbs rename to public/templates/levels/level-16.hbs diff --git a/src/templates/levels/level-17.hbs b/public/templates/levels/level-17.hbs similarity index 100% rename from src/templates/levels/level-17.hbs rename to public/templates/levels/level-17.hbs diff --git a/src/templates/levels/level-18.hbs b/public/templates/levels/level-18.hbs similarity index 100% rename from src/templates/levels/level-18.hbs rename to public/templates/levels/level-18.hbs diff --git a/src/templates/levels/level-19.hbs b/public/templates/levels/level-19.hbs similarity index 100% rename from src/templates/levels/level-19.hbs rename to public/templates/levels/level-19.hbs diff --git a/src/templates/levels/level-2.hbs b/public/templates/levels/level-2.hbs similarity index 100% rename from src/templates/levels/level-2.hbs rename to public/templates/levels/level-2.hbs diff --git a/src/templates/levels/level-20.hbs b/public/templates/levels/level-20.hbs similarity index 100% rename from src/templates/levels/level-20.hbs rename to public/templates/levels/level-20.hbs diff --git a/src/templates/levels/level-3.hbs b/public/templates/levels/level-3.hbs similarity index 100% rename from src/templates/levels/level-3.hbs rename to public/templates/levels/level-3.hbs diff --git a/src/templates/levels/level-4.hbs b/public/templates/levels/level-4.hbs similarity index 100% rename from src/templates/levels/level-4.hbs rename to public/templates/levels/level-4.hbs diff --git a/src/templates/levels/level-5.hbs b/public/templates/levels/level-5.hbs similarity index 100% rename from src/templates/levels/level-5.hbs rename to public/templates/levels/level-5.hbs diff --git a/src/templates/levels/level-6.hbs b/public/templates/levels/level-6.hbs similarity index 100% rename from src/templates/levels/level-6.hbs rename to public/templates/levels/level-6.hbs diff --git a/src/templates/levels/level-7.hbs b/public/templates/levels/level-7.hbs similarity index 100% rename from src/templates/levels/level-7.hbs rename to public/templates/levels/level-7.hbs diff --git a/src/templates/levels/level-8.hbs b/public/templates/levels/level-8.hbs similarity index 100% rename from src/templates/levels/level-8.hbs rename to public/templates/levels/level-8.hbs diff --git a/src/templates/levels/level-9.hbs b/public/templates/levels/level-9.hbs similarity index 100% rename from src/templates/levels/level-9.hbs rename to public/templates/levels/level-9.hbs diff --git a/src/templates/sheet.hbs b/public/templates/sheet.hbs similarity index 100% rename from src/templates/sheet.hbs rename to public/templates/sheet.hbs diff --git a/src/templates/tab-link.hbs b/public/templates/tab-link.hbs similarity index 100% rename from src/templates/tab-link.hbs rename to public/templates/tab-link.hbs diff --git a/src/templates/tab.hbs b/public/templates/tab.hbs similarity index 100% rename from src/templates/tab.hbs rename to public/templates/tab.hbs diff --git a/src/templates/tabs/tab-effects.hbs b/public/templates/tabs/tab-effects.hbs similarity index 100% rename from src/templates/tabs/tab-effects.hbs rename to public/templates/tabs/tab-effects.hbs diff --git a/src/templates/tabs/tab-kingdom.hbs b/public/templates/tabs/tab-kingdom.hbs similarity index 100% rename from src/templates/tabs/tab-kingdom.hbs rename to public/templates/tabs/tab-kingdom.hbs diff --git a/src/templates/tabs/tab-relations.hbs b/public/templates/tabs/tab-relations.hbs similarity index 100% rename from src/templates/tabs/tab-relations.hbs rename to public/templates/tabs/tab-relations.hbs diff --git a/src/templates/tabs/tab-settlements.hbs b/public/templates/tabs/tab-settlements.hbs similarity index 100% rename from src/templates/tabs/tab-settlements.hbs rename to public/templates/tabs/tab-settlements.hbs diff --git a/src/templates/tabs/tab-turn.hbs b/public/templates/tabs/tab-turn.hbs similarity index 100% rename from src/templates/tabs/tab-turn.hbs rename to public/templates/tabs/tab-turn.hbs -- 2.43.0 From d777bb9a4d40dc836fbcd71c7a62b06c25de2db6 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:13:03 -0500 Subject: [PATCH] Changing module filename to support new filename --- public/module.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/module.json b/public/module.json index 7b0cac5..8ff00fd 100644 --- a/public/module.json +++ b/public/module.json @@ -46,7 +46,7 @@ ] }, "esmodules": [ - "scripts/main.js" + "main.iife.js" ], "languages": [ { -- 2.43.0 From 59e579f95e34f8c2978e9e4d10ce7723fd0386e9 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:14:29 -0500 Subject: [PATCH] Adding sourcemap generation --- vite.config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 0ec3772..49ca3e8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -25,6 +25,7 @@ export default defineConfig({ }, watch: { buildDelay: 1000 - } + }, + sourcemap: true } }); \ No newline at end of file -- 2.43.0 From 4b64ddba29b793fb9b73785b0c9031348b200c19 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:24:15 -0500 Subject: [PATCH] Adding dotenv build dependency --- package-lock.json | 14 ++++++++++++++ package.json | 1 + 2 files changed, 15 insertions(+) diff --git a/package-lock.json b/package-lock.json index 09affe1..f9020d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "@league-of-foundry-developers/foundry-vtt-types": "^13.346.0-beta.20250812191140", "@sveltejs/vite-plugin-svelte": "^6.2.1", "@tsconfig/svelte": "^5.0.5", + "dotenv": "^17.2.3", "terser": "^5.44.0", "vite": "^7.1.7" } @@ -2078,6 +2079,19 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", diff --git a/package.json b/package.json index f18ec7f..0243b70 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "@league-of-foundry-developers/foundry-vtt-types": "^13.346.0-beta.20250812191140", "@sveltejs/vite-plugin-svelte": "^6.2.1", "@tsconfig/svelte": "^5.0.5", + "dotenv": "^17.2.3", "terser": "^5.44.0", "vite": "^7.1.7" }, -- 2.43.0 From 57e809011fb1d4e3a7dc5b6b53d56310ba67cc4f Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:24:39 -0500 Subject: [PATCH] Adding config loading to change module directory to folder in Foundry folder --- config.ts | 38 ++++++++++++++++++++++++++++++++++++++ vite.config.ts | 5 ++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 config.ts diff --git a/config.ts b/config.ts new file mode 100644 index 0000000..2fd8703 --- /dev/null +++ b/config.ts @@ -0,0 +1,38 @@ +import dotenv from "dotenv"; +import path from "path"; + +dotenv.config({ path: path.resolve(__dirname, ".env") }); + +interface ENV { + MODULE_DIR: string | undefined; +} + +interface Config { + outdir: string; +} + +const getConfig = (): ENV => { + return { + MODULE_DIR: process.env.MODULE_DIR + }; +} + +const getSanitizedConfig = (config: ENV): Config => { + let outdir: string; + + if (config.MODULE_DIR === undefined) { + outdir = path.join(process.cwd(), "dist"); + } else { + outdir = config.MODULE_DIR; + } + + return { + outdir + } as Config; +} + +const config = getConfig(); + +const sanitizedConfig = getSanitizedConfig(config); + +export default sanitizedConfig; \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 49ca3e8..2a3aa22 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,6 @@ import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; +import config from "./config"; export default defineConfig({ plugins: [ @@ -26,6 +27,8 @@ export default defineConfig({ watch: { buildDelay: 1000 }, - sourcemap: true + sourcemap: true, + outDir: config.outdir, + emptyOutDir: true } }); \ No newline at end of file -- 2.43.0 From cf7e4ac5f34881acfeeb17b2a13f0b06629376e7 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:27:57 -0500 Subject: [PATCH] Adding in stock data --- src/module/data/charter.json | 36 ++++++++++++++++++++ src/module/data/governments.json | 56 ++++++++++++++++++++++++++++++++ src/module/data/heartland.json | 18 ++++++++++ 3 files changed, 110 insertions(+) create mode 100644 src/module/data/charter.json create mode 100644 src/module/data/governments.json create mode 100644 src/module/data/heartland.json diff --git a/src/module/data/charter.json b/src/module/data/charter.json new file mode 100644 index 0000000..2884b54 --- /dev/null +++ b/src/module/data/charter.json @@ -0,0 +1,36 @@ +[ + { + "id": "conquest", + "boosts": [ + "loyalty", + "free" + ] + }, + { + "id": "expansion", + "boosts": [ + "culture", + "free" + ] + }, + { + "id": "exploration", + "boosts": [ + "stability", + "free" + ] + }, + { + "id": "grant", + "boosts": [ + "economy", + "free" + ] + }, + { + "id": "open", + "boosts": [ + "free" + ] + } +] diff --git a/src/module/data/governments.json b/src/module/data/governments.json new file mode 100644 index 0000000..8b9d616 --- /dev/null +++ b/src/module/data/governments.json @@ -0,0 +1,56 @@ +[ + { + "id": "despotism", + "boosts": [ + "stability", + "economy", + "free" + ], + "feat": "crush-dissent" + }, + { + "id": "feudalism", + "boosts": [ + "stability", + "culture", + "free" + ], + "feat": "fortified-fiefs" + }, + { + "id": "oligarchy", + "boosts": [ + "loyalty", + "economy", + "free" + ], + "feat": "insider-trading" + }, + { + "id": "republic", + "boosts": [ + "stability", + "loyalty", + "free" + ], + "feat": "pull-together" + }, + { + "id": "thaumocracy", + "boosts": [ + "economy", + "culture", + "free" + ], + "feat": "practical-magic" + }, + { + "id": "yeomanry", + "boosts": [ + "loyalty", + "culture", + "free" + ], + "feat": "muddle-through" + } +] diff --git a/src/module/data/heartland.json b/src/module/data/heartland.json new file mode 100644 index 0000000..3592cfe --- /dev/null +++ b/src/module/data/heartland.json @@ -0,0 +1,18 @@ +[ + { + "id": "forest-swamp", + "boost": "culture" + }, + { + "id": "hill-plain", + "boost": "loyalty" + }, + { + "id": "lake-river", + "boost": "economy" + }, + { + "id": "mountain-ruins", + "boost": "stability" + } +] -- 2.43.0 From adad62a01a9ef5c7a9cb9d656c9aa50253213f87 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:28:57 -0500 Subject: [PATCH] Moving files out of unnecessary module folder --- src/{module => }/data/charter.json | 0 src/{module => }/data/governments.json | 0 src/{module => }/data/heartland.json | 0 src/{module => }/kingdom-sheet.ts | 0 src/{module => }/kingdom.ts | 0 src/{module => }/main.ts | 0 src/{module => }/preloadTemplates.ts | 0 vite.config.ts | 2 +- 8 files changed, 1 insertion(+), 1 deletion(-) rename src/{module => }/data/charter.json (100%) rename src/{module => }/data/governments.json (100%) rename src/{module => }/data/heartland.json (100%) rename src/{module => }/kingdom-sheet.ts (100%) rename src/{module => }/kingdom.ts (100%) rename src/{module => }/main.ts (100%) rename src/{module => }/preloadTemplates.ts (100%) diff --git a/src/module/data/charter.json b/src/data/charter.json similarity index 100% rename from src/module/data/charter.json rename to src/data/charter.json diff --git a/src/module/data/governments.json b/src/data/governments.json similarity index 100% rename from src/module/data/governments.json rename to src/data/governments.json diff --git a/src/module/data/heartland.json b/src/data/heartland.json similarity index 100% rename from src/module/data/heartland.json rename to src/data/heartland.json diff --git a/src/module/kingdom-sheet.ts b/src/kingdom-sheet.ts similarity index 100% rename from src/module/kingdom-sheet.ts rename to src/kingdom-sheet.ts diff --git a/src/module/kingdom.ts b/src/kingdom.ts similarity index 100% rename from src/module/kingdom.ts rename to src/kingdom.ts diff --git a/src/module/main.ts b/src/main.ts similarity index 100% rename from src/module/main.ts rename to src/main.ts diff --git a/src/module/preloadTemplates.ts b/src/preloadTemplates.ts similarity index 100% rename from src/module/preloadTemplates.ts rename to src/preloadTemplates.ts diff --git a/vite.config.ts b/vite.config.ts index 2a3aa22..cb0c8be 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,7 +17,7 @@ export default defineConfig({ } }, lib: { - "entry": "src/module/main.ts", + "entry": "src/main.ts", name: "app", fileName: "main", formats: [ -- 2.43.0 From 44dff97d3c140436ee27288fe38459673f26fefb Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:30:38 -0500 Subject: [PATCH] Adding JSDoc info for the Kingdom class --- src/kingdom.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/kingdom.ts b/src/kingdom.ts index 57159db..b2f5731 100644 --- a/src/kingdom.ts +++ b/src/kingdom.ts @@ -1,3 +1,24 @@ +/** + * A Kingdom structure. + * @typedef {Object} Kingdom + * @property {string} name - The name of the Kingdom + * @property {string} charter - The id of the charter + * @property {string} government - The id of the government + * @property {string} heartland - The id of the heartland + * @property {string[]} boosts - An array of free boosts for the Kingdom + * @property {object} leaders - Leaders of the kingdom. + * @property {string[]} feats - An array of feats for the Kingdom + * @property {number} size - The size of the Kingdom + * @property {object} resourceDice - The resource dice for the Kingdom + * @property {object} commodities - The commodities for the Kingdom + * @property {object} resourcePoints - The resource points for the Kingdom + * @property {object} unrest - The unrest for the Kingdom + * @property {object} ruin - The ruin for the Kingdom + * @property {object[]} groups - Other groups the Kingdom has relations with + * @property {object} krp - The Kingdom Reputation Points + * @property {string[]} settlements - An array of Scene IDs for the Kingdom's settlements + * @property {number} level - The level of the Kingdom + */ export default class Kingdom { } \ No newline at end of file -- 2.43.0 From 265872d6a4ee6c80aa806d41de9bb788e7654a54 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:33:22 -0500 Subject: [PATCH] Renaming governments data file to match naming convention of other files --- src/data/{governments.json => government.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/data/{governments.json => government.json} (100%) diff --git a/src/data/governments.json b/src/data/government.json similarity index 100% rename from src/data/governments.json rename to src/data/government.json -- 2.43.0 From e8dbd3d286686fe5479471e263f730497515b437 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:36:48 -0500 Subject: [PATCH] Adding data into code --- src/data/index.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/data/index.ts diff --git a/src/data/index.ts b/src/data/index.ts new file mode 100644 index 0000000..f39e98c --- /dev/null +++ b/src/data/index.ts @@ -0,0 +1,42 @@ +import charters from "./charter.json"; +import governments from "./government.json"; +import heartlands from "./heartland.json"; + +export interface Charter { + id: string; + boosts: Boost[]; +} + +export interface Government { + id: string; + boosts: Boost[]; + feat: string; +} + +export interface Heartland { + id: string; + boost: Boost; +} + +export enum Attribute { + Loyalty = "loyalty", + Culture = "culture", + Stability = "stability", + Economy = "economy", + None = "" +} + +export enum Boost { + Loyalty = "loyalty", + Culture = "culture", + Stability = "stability", + Economy = "economy", + None = "", + Free = "free" +} + +export const data = { + charters, + governments, + heartlands +}; \ No newline at end of file -- 2.43.0 From 6f37a57f111bede481b07c806804b51462b844cf Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:40:04 -0500 Subject: [PATCH] Enabling resolving json as modules --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 2b43556..22154e1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,8 @@ "node" ], "allowUmdGlobalAccess": true, - "strict": true + "strict": true, + "resolveJsonModule": true }, "include": [ "src/**/*" -- 2.43.0 From fa2ee4e2f35bb37f92819c54a7f19b7da435ca8e Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:40:15 -0500 Subject: [PATCH] Adding in Kingdom data --- src/kingdom.ts | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/kingdom.ts b/src/kingdom.ts index b2f5731..4cc0232 100644 --- a/src/kingdom.ts +++ b/src/kingdom.ts @@ -1,3 +1,5 @@ +import * as data from "./data"; + /** * A Kingdom structure. * @typedef {Object} Kingdom @@ -20,5 +22,51 @@ * @property {number} level - The level of the Kingdom */ export default class Kingdom { - + name: string; + charter: data.Charter; + government: data.Government; + heartland: data.Heartland; + boosts: data.Boost[]; + leaders: object; + feats: string[]; + size: number; + resourceDice: object; + commodities: object; + resourcePoints: object; + unrest: object; + ruin: object; + groups: object[]; + krp: object; + settlements: string[]; + level: number; + + constructor() { + this.name = ""; + this.level = 0; + this.charter = { + id: "", + boosts: [] + }; + this.government = { + id: "", + boosts: [], + feat: "" + }; + this.heartland = { + id: "", + boost: data.Boost.None + }; + this.boosts = []; + this.leaders = {}; + this.feats = []; + this.size = 0; + this.resourceDice = {}; + this.commodities = {}; + this.resourcePoints = {}; + this.unrest = {}; + this.ruin = {}; + this.groups = []; + this.krp = {}; + this.settlements = []; + } } \ No newline at end of file -- 2.43.0 From 54169cd524966fa61bb47fec007aaaa7be86805e Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 21:50:51 -0500 Subject: [PATCH] Adding kingdom classes --- src/kingdom-sheet.ts | 2 +- src/kingdom.ts | 192 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 169 insertions(+), 25 deletions(-) diff --git a/src/kingdom-sheet.ts b/src/kingdom-sheet.ts index 90d9090..2c69564 100644 --- a/src/kingdom-sheet.ts +++ b/src/kingdom-sheet.ts @@ -1,4 +1,4 @@ -import Kingdom from "./kingdom"; +import { Kingdom } from "./kingdom"; interface NPCPF2e { flags: { diff --git a/src/kingdom.ts b/src/kingdom.ts index 4cc0232..db13689 100644 --- a/src/kingdom.ts +++ b/src/kingdom.ts @@ -8,35 +8,35 @@ import * as data from "./data"; * @property {string} government - The id of the government * @property {string} heartland - The id of the heartland * @property {string[]} boosts - An array of free boosts for the Kingdom - * @property {object} leaders - Leaders of the kingdom. + * @property {LeaderInfo} leaders - Leaders of the kingdom. * @property {string[]} feats - An array of feats for the Kingdom * @property {number} size - The size of the Kingdom - * @property {object} resourceDice - The resource dice for the Kingdom - * @property {object} commodities - The commodities for the Kingdom - * @property {object} resourcePoints - The resource points for the Kingdom - * @property {object} unrest - The unrest for the Kingdom - * @property {object} ruin - The ruin for the Kingdom - * @property {object[]} groups - Other groups the Kingdom has relations with - * @property {object} krp - The Kingdom Reputation Points + * @property {ResourceInfo} resourceDice - The resource dice for the Kingdom + * @property {CommodityInfo} commodities - The commodities for the Kingdom + * @property {ResourceInfo} resourcePoints - The resource points for the Kingdom + * @property {ResourceLimitInfo} unrest - The unrest for the Kingdom + * @property {RuinInfo} ruin - The ruin for the Kingdom + * @property {Relation[]} groups - Other groups the Kingdom has relations with + * @property {ResourceLimitInfo} krp - The Kingdom Reputation Points * @property {string[]} settlements - An array of Scene IDs for the Kingdom's settlements * @property {number} level - The level of the Kingdom */ -export default class Kingdom { +export class Kingdom { name: string; charter: data.Charter; government: data.Government; heartland: data.Heartland; boosts: data.Boost[]; - leaders: object; + leaders: LeaderInfo; feats: string[]; size: number; - resourceDice: object; - commodities: object; - resourcePoints: object; - unrest: object; - ruin: object; - groups: object[]; - krp: object; + resourceDice: ResourceInfo; + commodities: CommodityInfo; + resourcePoints: ResourceInfo; + unrest: ResourceLimitInfo; + ruin: RuinInfo; + groups: Relation[]; + krp: ResourceLimitInfo; settlements: string[]; level: number; @@ -57,16 +57,160 @@ export default class Kingdom { boost: data.Boost.None }; this.boosts = []; - this.leaders = {}; + this.leaders = new LeaderInfo(); this.feats = []; this.size = 0; - this.resourceDice = {}; - this.commodities = {}; - this.resourcePoints = {}; - this.unrest = {}; - this.ruin = {}; + this.resourceDice = new ResourceInfo(); + this.commodities = new CommodityInfo(); + this.resourcePoints = new ResourceInfo(); + this.unrest = new ResourceLimitInfo(); + this.ruin = new RuinInfo(); this.groups = []; - this.krp = {}; + this.krp = new ResourceLimitInfo(); this.settlements = []; } +} + +/** + * Information about a Kingdom's leaders. + * @typedef {Object} LeaderInfo + * @property {string} ruler - The actor ID of the ruler + * @property {string} counselor - The actor ID of the counselor + * @property {string} viceroy - The actor ID of the viceroy + * @property {string} emissary - The actor ID of the emissary + * @property {string} warden - The actor ID of the warden + * @property {stirng} general - The actor ID of the general + * @property {string} magister - The actor ID of the magister + * @property {string} treasurer - The actor ID of the treasurer + */ +export class LeaderInfo { + ruler: string; + counselor: string; + viceroy: string; + emissary: string; + warden: string; + general: string; + magister: string; + treasurer: string; + + constructor() { + this.ruler = ""; + this.counselor = ""; + this.viceroy = ""; + this.emissary = ""; + this.warden = ""; + this.general = ""; + this.magister = ""; + this.treasurer = ""; + } +} + +/** + * Information about a resource. This resource has a Next and Current value. + * @typedef {Object} ResourceInfo + * @property {number} next - The amount to add on the next turn. + * @property {number} current - The current value of this resource. + */ +export class ResourceInfo { + next: number; + current: number; + + constructor() { + this.next = 0; + this.current = 0; + } +} + +/** + * Information about the Kingdom's commodities + * @typedef {Object} CommodityInfo + * @property {ResourceInfo} ore - The amount of Ore the Kingdom has + * @property {ResourceInfo} lumber - The amount of Lumber the Kingdom has + * @property {ResourceInfo} stone - The amount of Stone the Kingdom has + * @property {ResourceInfo} food - The amount of Food the Kingdom has + * @property {ResourceInfo} luxuries - The amount of Luxuries the Kingdom has + */ +export class CommodityInfo { + ore: ResourceInfo; + lumber: ResourceInfo; + stone: ResourceInfo; + food: ResourceInfo; + luxuries: ResourceInfo; + + constructor() { + this.ore = new ResourceInfo(); + this.lumber = new ResourceInfo(); + this.stone = new ResourceInfo(); + this.food = new ResourceInfo(); + this.luxuries = new ResourceInfo(); + } +} + +/** + * Information about a resource. This resource has Next, Current, and Threshold values. + * @typedef {Object} ResourceLimitInfo + * @property {number} next - The amount to add on the next turn. + * @property {number} current - The current value of this resource. + * @property {number} threshold - The maximum value of this resource. + */ +export class ResourceLimitInfo { + next: number; + current: number; + threshold: number; + + constructor() { + this.next = 0; + this.current = 0; + this.threshold = 0; + } +} + +/** + * Information about the Kingdom's Ruin values. + * @typedef {Object} RuinInfo + * @property {ResourceLimitInfo} corruption - The amount of Corruption a Kingdom has + * @property {ResourceLimitInfo} crime - The amount of Crime a Kingdom has + * @property {ResourceLimitInfo} decay - The amount of Decay a Kingdom has + * @property {ResourceLimitInfo} strife - The amount of Strife a Kingdom has + */ +export class RuinInfo { + corruption: ResourceLimitInfo; + crime: ResourceLimitInfo; + decay: ResourceLimitInfo; + strife: ResourceLimitInfo; + + constructor() { + this.corruption = new ResourceLimitInfo(); + this.crime = new ResourceLimitInfo(); + this.decay = new ResourceLimitInfo(); + this.strife = new ResourceLimitInfo(); + } +} + +/** + * Information about a relation with another group the Kingdom has. + * @typedef {Object} Relation + * @property {string} name - The name of the group + * @property {string} relation - The type of relation the Kingdom has with this group + * @property {number} dc - The base Negotiation DC for this group + * @property {boolean} atWar - Is the Kingdom at war with this group? + */ +export class Relation { + name: string; + relation: RelationType; + dc: number; + atWar: boolean; + + constructor() { + this.name = ""; + this.relation = RelationType.None; + this.dc = 0; + this.atWar = false; + } +} + +export enum RelationType { + None = "none", + TradeAgreement = "tradeAgreement", + DiplomaticRelations = "diplomaticRelations" } \ No newline at end of file -- 2.43.0 From 267539a166a1f612bf8509d26345937c33b24553 Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 22:05:33 -0500 Subject: [PATCH] Adding some utils to interface typescript with socketlib module --- src/main.ts | 9 ++++++++- src/utils.ts | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/utils.ts diff --git a/src/main.ts b/src/main.ts index ac8735b..65e6eec 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,15 @@ import KingdomSheet from "./kingdom-sheet"; import preloadTemplates from "./preloadTemplates"; +import { socketlib } from "./utils"; -Hooks.on("init", async () => { +let socket; + +Hooks.on("init", async (): Promise => { KingdomSheet.register(); await preloadTemplates(); console.log("Kingdom Homebrew loaded"); +}); + +Hooks.once("socketlib.ready", (): void => { + socket = socketlib.registerModule("kingdom-homebrew"); }); \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..ce0a8af --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,16 @@ +export interface isocketlib { + registerModule: (moduleName: string) => Socket +} + +export interface Socket { + register: (name: string, func: (...args: any[]) => any) => void, + executeAsGM: (handler: string, ...args: any[]) => Promise, + executeAsUser: (handler: string, userId: string, ...parameters: any[]) => Promise, + executeForAllGMs: (handler: string, ...parameters: any[]) => Promise, + executeForOtherGMs: (handler: string, ...parameters: any[]) => Promise, + executeForEveryone: (handler: string, ...args: any[]) => Promise, + executeForOthers: (handler: string, ...args: any[]) => Promise, + executeForUsers: (handler: string, recipients: string[], ...parameters: any[]) => Promise +} + +export declare var socketlib: isocketlib; \ No newline at end of file -- 2.43.0 From db6d3b447c63f7b60d701c8eeb3d7b933ddb923f Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 22:06:26 -0500 Subject: [PATCH] Adding types to socket --- src/main.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 65e6eec..656e518 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,9 @@ import KingdomSheet from "./kingdom-sheet"; import preloadTemplates from "./preloadTemplates"; import { socketlib } from "./utils"; +import type { Socket } from "./utils"; -let socket; +let socket: Socket; Hooks.on("init", async (): Promise => { KingdomSheet.register(); -- 2.43.0 From a94e2ee125b5e12f149f82275e3334f739e7545a Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 22:08:25 -0500 Subject: [PATCH] Working on registering templates --- src/preloadTemplates.ts | 4 +++- src/templateMap.json | 0 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 src/templateMap.json diff --git a/src/preloadTemplates.ts b/src/preloadTemplates.ts index 3b4b961..e5fac09 100644 --- a/src/preloadTemplates.ts +++ b/src/preloadTemplates.ts @@ -1,3 +1,5 @@ +import templateMap from "./templateMap.json"; + export default function preloadTemplates() { - return foundry.applications.handlebars.loadTemplates([]); + return foundry.applications.handlebars.loadTemplates(templateMap as Record); } \ No newline at end of file diff --git a/src/templateMap.json b/src/templateMap.json new file mode 100644 index 0000000..e69de29 -- 2.43.0 From 22d2368e5c263d4b0fb27a01fbfac1bde3d6dcec Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 22:14:03 -0500 Subject: [PATCH] Fixing some issues with loading socketlib --- src/main.ts | 5 +++-- src/templateMap.json | 3 +++ src/utils.ts | 4 +--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main.ts b/src/main.ts index 656e518..55d01a6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,8 @@ import KingdomSheet from "./kingdom-sheet"; import preloadTemplates from "./preloadTemplates"; -import { socketlib } from "./utils"; -import type { Socket } from "./utils"; +import type { Socket, isocketlib } from "./utils"; + +declare var socketlib: isocketlib; let socket: Socket; diff --git a/src/templateMap.json b/src/templateMap.json index e69de29..0a34820 100644 --- a/src/templateMap.json +++ b/src/templateMap.json @@ -0,0 +1,3 @@ +{ + "kmhb-sheet": "modules/kingdom-homebrew/templates/sheet.hbs" +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index ce0a8af..8bd4f09 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -11,6 +11,4 @@ export interface Socket { executeForEveryone: (handler: string, ...args: any[]) => Promise, executeForOthers: (handler: string, ...args: any[]) => Promise, executeForUsers: (handler: string, recipients: string[], ...parameters: any[]) => Promise -} - -export declare var socketlib: isocketlib; \ No newline at end of file +} \ No newline at end of file -- 2.43.0 From e7e682296ae24924cd2e4c062490b5d0882a6b4c Mon Sep 17 00:00:00 2001 From: Cass Unterholzner Date: Tue, 30 Sep 2025 22:24:01 -0500 Subject: [PATCH] Fixing label for Kingdom Sheet not showing --- public/lang/en.json | 3 ++- src/kingdom-sheet.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/public/lang/en.json b/public/lang/en.json index 67bb5e2..c744d59 100644 --- a/public/lang/en.json +++ b/public/lang/en.json @@ -6,6 +6,7 @@ "settlements": "Settlements", "relations": "Relations", "effects": "Effects" - } + }, + "kingdom-title": "Kingdom Sheet" } } diff --git a/src/kingdom-sheet.ts b/src/kingdom-sheet.ts index 2c69564..1ade2a4 100644 --- a/src/kingdom-sheet.ts +++ b/src/kingdom-sheet.ts @@ -23,7 +23,8 @@ export default class KingdomSheet extends foundry.applications.sheets.ActorSheet foundry.documents.collections.Actors.registerSheet("pf2e", KingdomSheet, { types: [ "npc" - ] + ], + label: (game as foundry.Game).i18n!.localize("kingdom-homebrew.kingdom-title") }); } -- 2.43.0