Initial commit

**Motivations:**
- Initialisation du versionning git pour le projet

**Root causes:**
- N/A (Nouveau projet)

**Correctifs:**
- N/A

**Evolutions:**
- Structure initiale du projet
- Ajout du .gitignore

**Pages affectées:**
- Tous les fichiers
This commit is contained in:
2026-03-03 22:24:17 +01:00
commit e031c9a1d2
155 changed files with 22334 additions and 0 deletions

62
web/js/grid-utils.js Normal file
View File

@@ -0,0 +1,62 @@
import { GameConfig } from "./config.js";
/**
* @param {number} x
* @param {number} y
* @returns {string}
*/
export function cellKey(x, y) {
return `${x}_${y}`;
}
/**
* @param {number} plotLevel
* @returns {[number, number]}
*/
export function plotSizeFromLevel(plotLevel) {
const level = Math.max(1, Math.min(GameConfig.Plot.MaxLevel, plotLevel));
const extra = (level - 1) * GameConfig.Plot.ExpandByLevel;
return [
GameConfig.Plot.BaseWidth + extra,
GameConfig.Plot.BaseHeight + extra,
];
}
/**
* @param {number} width
* @param {number} height
* @param {number} x
* @param {number} y
* @returns {boolean}
*/
export function withinBounds(width, height, x, y) {
return x >= 1 && y >= 1 && x <= width && y <= height;
}
/**
* Keys for a rectangular block (origin = top-left). All coordinates 1-based.
* @param {number} originX
* @param {number} originY
* @param {number} w
* @param {number} h
* @returns {string[]}
*/
export function getBlockKeys(originX, originY, w, h) {
const keys = [];
for (let dy = 0; dy < h; dy++) {
for (let dx = 0; dx < w; dx++) {
keys.push(cellKey(originX + dx, originY + dy));
}
}
return keys;
}
/**
* @param {string} key "x_y"
* @param {import("./types.js").Cell} cell
* @returns {boolean}
*/
export function isOriginCell(key, cell) {
if (cell === null || cell === undefined || cell.kind !== "animal") return false;
return cell.originKey === null || cell.originKey === undefined || cell.originKey === key;
}