aboutsummaryrefslogtreecommitdiff
path: root/src/lib/stores/regulars.svelte.js
diff options
context:
space:
mode:
authorKaran Jayachandra <mail@karanjayachandra.com>2026-08-30 22:43:21 +0200
committerKaran Jayachandra <mail@karanjayachandra.com>2026-08-30 22:43:21 +0200
commitfc8d8ab8d0da95ec79056f59e14a150df6fcea89 (patch)
tree33f8050b2f2920c0f1b884a205a8aa4c81d7687c /src/lib/stores/regulars.svelte.js
parentd37ebfda883bcd03b146a85bc3e5a4657d0abd73 (diff)
Moved to sveltemain
Diffstat (limited to 'src/lib/stores/regulars.svelte.js')
-rw-r--r--src/lib/stores/regulars.svelte.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/lib/stores/regulars.svelte.js b/src/lib/stores/regulars.svelte.js
new file mode 100644
index 0000000..ccf0d81
--- /dev/null
+++ b/src/lib/stores/regulars.svelte.js
@@ -0,0 +1,79 @@
+import { uniqueNamesGenerator, names, adjectives } from "unique-names-generator";
+import { createRegular } from "../logic/players.js";
+import { randomStatus, randomLevel } from "../logic/random.js";
+import { parseCsv } from "../logic/csv.js";
+
+const STORAGE_KEY = "Regular";
+const REGULAR_COUNT = 71;
+
+const nameConfig = {
+ dictionaries: [adjectives, names],
+ style: "capital",
+ length: 2,
+};
+
+function generateRandomRegular(id) {
+ const [firstName, lastName] = uniqueNamesGenerator(nameConfig).split("_");
+ return createRegular(id, randomStatus(), randomLevel(), 0, firstName, lastName);
+}
+
+function loadInitialRegulars() {
+ const stored = JSON.parse(localStorage.getItem(STORAGE_KEY));
+ if (stored && stored.length > 0) {
+ return stored.map((r) =>
+ createRegular(
+ Number(r.id),
+ Boolean(Number(r.status)),
+ Number(r.level),
+ Number(r.games),
+ r.firstName,
+ r.lastName
+ )
+ );
+ }
+ return Array.from({ length: REGULAR_COUNT }, (_, i) => generateRandomRegular(i));
+}
+
+let regulars = $state(loadInitialRegulars());
+
+function persist() {
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(regulars));
+}
+if (!localStorage.getItem(STORAGE_KEY)) persist();
+
+export function getRegulars() {
+ return regulars;
+}
+
+export function activeRegulars() {
+ return regulars.filter((r) => r.status);
+}
+
+export function toggleRegular(id) {
+ const regular = regulars.find((r) => r.id === id);
+ if (!regular) return;
+ regular.status = !regular.status;
+ persist();
+}
+
+export function incrementRegularGames(playerNames) {
+ for (const regular of regulars) {
+ if (playerNames.includes(regular.name)) {
+ regular.games += 1;
+ }
+ }
+ persist();
+}
+
+export function resetRegulars() {
+ for (const regular of regulars) {
+ regular.games = 0;
+ regular.status = false;
+ }
+ persist();
+}
+
+export function loadRegularsFromCsv(csvText) {
+ regulars = parseCsv(csvText);
+ persist();
+}