Lint: fix errors and remove unused variables
**Motivations:** - Ensure lint config is not degraded and fix all lint errors for pousse workflow. **Root causes:** - Unused variables kept with _ prefix instead of removed (_row, _questReward, _i). - getAnimalBlockOrigin had 5 parameters (max 4). - use of continue statement (no-continue rule). **Correctifs:** - ESLint config verified; no eslint-disable in codebase. - Removed unused variable _row (biome-rules); removed dead function _questReward (quests); removed unused map param _i (state.js). - getAnimalBlockOrigin refactored to 4 params (pos object instead of x, y). - Replaced continue with if (cell) block in normalizeLoadedCells (state.js). - JSDoc param names aligned with _height, _y (biome-rules). **Evolutions:** - (none) **Pages affectées:** - web/js/biome-rules.js - web/js/quests.js - web/js/state.js - web/js/placement.js
This commit is contained in:
166
web/js/ui-render-dom-drops.js
Normal file
166
web/js/ui-render-dom-drops.js
Normal file
@@ -0,0 +1,166 @@
|
||||
import { tryBuyEgg, tryBuyBaby, tryBuyAnimal } from "./zoo.js";
|
||||
import { pickSaleTargetZoo } from "./conveyor.js";
|
||||
import { sellAnimalToNpc, addMatureBabyToSale, addReceptionAnimalToSale } from "./trade.js";
|
||||
import { playSound } from "./audio.js";
|
||||
import { t, errorMessage } from "./texts-fr.js";
|
||||
import { getApiBase, createSale } from "./api-client.js";
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function handleTruckDropBaby(e, setup) {
|
||||
const babyOffer = e.dataTransfer.getData("application/x-builazoo-baby-offer");
|
||||
if (!babyOffer) return false;
|
||||
const [animalId, priceStr] = babyOffer.split(":");
|
||||
const price = Number(priceStr) || 80;
|
||||
const [ok, result] = tryBuyBaby(setup.state, animalId, price);
|
||||
if (!ok) setup.setError(String(t.buyFailed).replace("%s", errorMessage[result] ?? result));
|
||||
else setup.setError("");
|
||||
playSound(ok ? "buy" : "error");
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function handleTruckDropAnimal(e, setup) {
|
||||
const animalOffer = e.dataTransfer.getData("application/x-builazoo-animal-offer");
|
||||
if (!animalOffer) return false;
|
||||
const [animalId, priceStr] = animalOffer.split(":");
|
||||
const price = Number(priceStr) || 120;
|
||||
const [ok, result] = tryBuyAnimal(setup.state, animalId, price);
|
||||
if (!ok) setup.setError(String(t.buyFailed).replace("%s", errorMessage[result] ?? result));
|
||||
else setup.setError("");
|
||||
playSound(ok ? "buy" : "error");
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function handleTruckDropEgg(e, setup) {
|
||||
const eggType = e.dataTransfer.getData("application/x-builazoo-eggtype");
|
||||
if (!eggType) return false;
|
||||
const toZooId = e.dataTransfer.getData("application/x-builazoo-offer-zooid") || "player";
|
||||
const [ok, result] = tryBuyEgg(setup.state, eggType);
|
||||
if (!ok) {
|
||||
setup.setError(String(t.buyFailed).replace("%s", errorMessage[result] ?? result));
|
||||
playSound("error");
|
||||
} else {
|
||||
setup.setError("");
|
||||
playSound("buy");
|
||||
setup.state.eggPurchaseTruck = { eggType, fromZooId: "player", toZooId, startAt: Date.now() };
|
||||
}
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void }} setup
|
||||
* @returns {void}
|
||||
*/
|
||||
export function handleWorldMapTruckDrop(e, setup) {
|
||||
e.preventDefault();
|
||||
const el = e.currentTarget;
|
||||
if (el && el instanceof HTMLElement) el.classList.remove("dragover");
|
||||
if (handleTruckDropBaby(e, setup)) return;
|
||||
if (handleTruckDropAnimal(e, setup)) return;
|
||||
handleTruckDropEgg(e, setup);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void, lastActionWasDropRef: { current: boolean } }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function applyNurseryDrop(e, setup) {
|
||||
const nurseryCellKey = e.dataTransfer.getData("application/x-builazoo-nursery-cell-key");
|
||||
if (!nurseryCellKey) return false;
|
||||
const [ok, result] = addMatureBabyToSale(setup.state, nurseryCellKey);
|
||||
if (!ok) {
|
||||
setup.setError(String(t.errorPrefix).replace("%s", errorMessage[result] ?? result));
|
||||
playSound("error");
|
||||
} else {
|
||||
setup.setError("");
|
||||
playSound("sell");
|
||||
const listing = setup.state.saleListings[setup.state.saleListings.length - 1];
|
||||
if (getApiBase() && listing) {
|
||||
createSale({ animalId: listing.animalId, isBaby: true, price: listing.price, endAt: new Date(listing.endAt * 1000).toISOString(), reproductionScoreAtSale: listing.reproductionScoreAtSale }).then(({ id }) => { listing.serverId = id; setup.setState(); }).catch(() => {});
|
||||
}
|
||||
}
|
||||
setup.lastActionWasDropRef.current = true;
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void, lastActionWasDropRef: { current: boolean } }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function applyReceptionDrop(e, setup) {
|
||||
const receptionCellKey = e.dataTransfer.getData("application/x-builazoo-reception-cell-key");
|
||||
if (!receptionCellKey) return false;
|
||||
const [ok, result] = addReceptionAnimalToSale(setup.state, receptionCellKey);
|
||||
if (!ok) {
|
||||
setup.setError(String(t.errorPrefix).replace("%s", errorMessage[result] ?? result));
|
||||
playSound("error");
|
||||
} else {
|
||||
setup.setError("");
|
||||
playSound("sell");
|
||||
const listing = setup.state.saleListings[setup.state.saleListings.length - 1];
|
||||
if (getApiBase() && listing) {
|
||||
createSale({ animalId: listing.animalId, isBaby: false, price: listing.price, endAt: new Date(listing.endAt * 1000).toISOString(), reproductionScoreAtSale: listing.reproductionScoreAtSale }).then(({ id }) => { listing.serverId = id; setup.setState(); }).catch(() => {});
|
||||
}
|
||||
}
|
||||
setup.lastActionWasDropRef.current = true;
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void, lastActionWasDropRef: { current: boolean } }} setup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function applyGridCellSell(e, setup) {
|
||||
const raw = e.dataTransfer.getData("text/plain");
|
||||
if (!raw || !/^\d+_\d+$/.test(raw)) return false;
|
||||
const [sx, sy] = raw.split("_").map(Number);
|
||||
const [ok, result] = sellAnimalToNpc(setup.state, sx, sy);
|
||||
if (!ok) {
|
||||
setup.setError(String(t.sellFailed).replace("%s", errorMessage[result] ?? result));
|
||||
playSound("error");
|
||||
} else {
|
||||
setup.setError("");
|
||||
playSound("sell");
|
||||
setup.state.truckSale = { toZooId: pickSaleTargetZoo(setup.state), startAt: Date.now() };
|
||||
}
|
||||
setup.lastActionWasDropRef.current = true;
|
||||
setup.setState();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DragEvent} e
|
||||
* @param {{ state: import("./types.js").GameState, setState: () => void, setError: (s: string) => void, lastActionWasDropRef: { current: boolean }, sellZoneJustDroppedRef: { current: boolean } }} setup
|
||||
* @returns {void}
|
||||
*/
|
||||
export function handleSellZoneDrop(e, setup) {
|
||||
e.preventDefault();
|
||||
const el = e.currentTarget;
|
||||
if (el && el instanceof HTMLElement) el.classList.remove("dragover");
|
||||
setup.sellZoneJustDroppedRef.current = true;
|
||||
if (applyNurseryDrop(e, setup)) return;
|
||||
if (applyReceptionDrop(e, setup)) return;
|
||||
applyGridCellSell(e, setup);
|
||||
}
|
||||
Reference in New Issue
Block a user