Private
Public Access
1
0

feat: Adding economic system to do scoring

This commit is contained in:
gauvainboiche
2026-03-30 11:28:47 +02:00
parent b19fb262a4
commit c0f66d8cc0
16 changed files with 1303 additions and 145 deletions

View File

@@ -29,6 +29,14 @@ export async function initGameSchema() {
PRIMARY KEY (world_seed, team)
);
`);
await pool.query(`
CREATE TABLE IF NOT EXISTS team_econ_scores (
world_seed TEXT NOT NULL,
team TEXT NOT NULL CHECK (team IN ('blue', 'red')),
score DOUBLE PRECISION NOT NULL DEFAULT 0,
PRIMARY KEY (world_seed, team)
);
`);
await pool.query(`
ALTER TABLE grid_cells ADD COLUMN IF NOT EXISTS discovered_by TEXT;
UPDATE grid_cells SET discovered_by = 'blue' WHERE discovered_by IS NULL;
@@ -59,6 +67,7 @@ export async function ensureSeedEpoch() {
if (seedSlot !== lastSeedSlot) {
await pool.query("TRUNCATE grid_cells RESTART IDENTITY");
await pool.query("DELETE FROM team_cooldowns WHERE world_seed != $1", [worldSeed]);
await pool.query("DELETE FROM team_econ_scores WHERE world_seed != $1", [worldSeed]);
console.log(`[world] Slot ${lastSeedSlot}${seedSlot}; grid wiped, old cooldowns cleared.`);
lastSeedSlot = seedSlot;
}
@@ -115,6 +124,29 @@ export async function upsertTeamCooldown(worldSeed, team) {
);
}
// ── Economic scores ───────────────────────────────────────────────────────────
export async function getEconScores(worldSeed) {
const { rows } = await pool.query(
`SELECT team, score FROM team_econ_scores WHERE world_seed = $1`,
[worldSeed]
);
const result = { blue: 0, red: 0 };
for (const row of rows) result[row.team] = Number(row.score);
return result;
}
export async function addEconScore(worldSeed, team, delta) {
if (delta <= 0) return;
await pool.query(
`INSERT INTO team_econ_scores (world_seed, team, score)
VALUES ($1, $2, $3)
ON CONFLICT (world_seed, team) DO UPDATE
SET score = team_econ_scores.score + EXCLUDED.score`,
[worldSeed, team, delta]
);
}
// ── Scores ────────────────────────────────────────────────────────────────────
export async function getScores(worldSeed) {