duu
This commit is contained in:
parent
88f618cadf
commit
8f9f5b5100
108 changed files with 2139 additions and 1500 deletions
36
js/display_helpers.js
Normal file
36
js/display_helpers.js
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
"use strict";
|
||||
|
||||
// Layer: display/helpers
|
||||
// Shared canvas and display-label helpers used by render, item, creature, and weather modules.
|
||||
(function (global) {
|
||||
const WEATHER_LABELS = Object.freeze({ sunny: "\u6674\u308c", cloudy: "\u66c7\u308a", light_rain: "\u5c0f\u96e8" });
|
||||
|
||||
function canvasEllipsizeText(ctx, text, maxW) {
|
||||
let s = String(text || "");
|
||||
const limit = Number(maxW);
|
||||
if (!ctx || !Number.isFinite(limit) || limit <= 0) return s ? "\u2026" : "";
|
||||
if (ctx.measureText(s).width <= limit) return s;
|
||||
while (s.length > 1 && ctx.measureText(`${s}\u2026`).width > limit) s = s.slice(0, -1);
|
||||
return `${s}\u2026`;
|
||||
}
|
||||
|
||||
function roundedRect(ctx, x, y, w, h, r) {
|
||||
if (!ctx) return;
|
||||
const radius = Math.max(0, Math.min(Math.abs(Number(r) || 0), Math.abs(Number(w) || 0) * 0.5, Math.abs(Number(h) || 0) * 0.5));
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x + radius, y);
|
||||
ctx.arcTo(x + w, y, x + w, y + h, radius);
|
||||
ctx.arcTo(x + w, y + h, x, y + h, radius);
|
||||
ctx.arcTo(x, y + h, x, y, radius);
|
||||
ctx.arcTo(x, y, x + w, y, radius);
|
||||
ctx.closePath();
|
||||
}
|
||||
|
||||
function weatherLabel(weather = "sunny") {
|
||||
return WEATHER_LABELS[String(weather || "sunny")] || WEATHER_LABELS.sunny;
|
||||
}
|
||||
|
||||
global.canvasEllipsizeText = canvasEllipsizeText;
|
||||
global.roundedRect = roundedRect;
|
||||
global.weatherLabel = weatherLabel;
|
||||
})(typeof window !== "undefined" ? window : globalThis);
|
||||
Loading…
Add table
Add a link
Reference in a new issue