aboutsummaryrefslogtreecommitdiffhomepage
path: root/public
diff options
context:
space:
mode:
authorYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-03 23:29:04 +0900
committerYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-03 23:29:04 +0900
commitcb0cce903f8ea3ad4943cabab83b74a40d87fc00 (patch)
treeae1ca94d7feeb58594125de30c3c2940c523229c /public
parent0aa91f6f02fc95762ea4a6dbf5a4f795e4e35b86 (diff)
public/bluebey-studio: 間隔の表示を補正、ダリ高さ80、ペンシル削除
「左右の間隔」スライダーは内部値より10大きく表示するようにし、既定の -10 が 0 と見えるようにした。 ダリの高さの既定を 80 にした。 ペンシル髭を削除(選択肢・画像・1ファイル版の同梱から外した)。
Diffstat (limited to 'public')
-rw-r--r--public/bluebey-studio/assets/beards/apron.pngbin4002 -> 0 bytes
-rw-r--r--public/bluebey-studio/src/faceArt.js25
-rw-r--r--public/bluebey-studio/src/main.js1
-rw-r--r--public/bluebey-studio/src/panel.js12
-rw-r--r--public/bluebey-studio/src/presets.js2
5 files changed, 14 insertions, 26 deletions
diff --git a/public/bluebey-studio/assets/beards/apron.png b/public/bluebey-studio/assets/beards/apron.png
deleted file mode 100644
index 73e3537..0000000
--- a/public/bluebey-studio/assets/beards/apron.png
+++ /dev/null
Binary files differ
diff --git a/public/bluebey-studio/src/faceArt.js b/public/bluebey-studio/src/faceArt.js
index cf61c68..e999045 100644
--- a/public/bluebey-studio/src/faceArt.js
+++ b/public/bluebey-studio/src/faceArt.js
@@ -906,9 +906,10 @@ function tintedSprite(image, color) {
/**
* ひげ: a mustache or beard under the nose. Each kind is a small shape built on
- * the spot; `scotch` and `cat` are drawn with round-capped strokes, `kaiser` is a
- * thick waving band, and `apron` is a filled bib. In a line drawing nothing is
- * filled and only the outlines are inked.
+ * the spot; `scotch` and `cat` are drawn with round-capped strokes, and `kaiser`
+ * is a thick waving band with a curl at each tip. A kind that ships a drawing in
+ * `assets/beards/` is drawn from that instead (see `textures`), tinted with the
+ * beard colour. In a line drawing nothing is filled and only the outlines are inked.
*/
function drawBeard(ctx, spec, lineOnly = false, textures = null) {
const shape = spec?.shape ?? 'off';
@@ -994,22 +995,8 @@ function drawBeard(ctx, spec, lineOnly = false, textures = null) {
return;
}
if (shape === 'apron') {
- // エプロン: a bib-shaped beard hanging from the cheeks to a rounded point.
- const pts = [
- { x: cx - w * 0.6, y: cy - w * 0.04 },
- { x: cx - w * 0.5, y: cy + w * 0.35 },
- { x: cx - w * 0.22, y: cy + w * 0.62 },
- { x: cx, y: cy + w * 0.7 },
- { x: cx + w * 0.22, y: cy + w * 0.62 },
- { x: cx + w * 0.5, y: cy + w * 0.35 },
- { x: cx + w * 0.6, y: cy - w * 0.04 },
- ];
- if (lineOnly) {
- strokePolyline(ctx, pts, { color: line, width: lw });
- } else {
- fillPolygon(ctx, pts, color);
- strokePolyline(ctx, pts, { color: line, width: lw * 0.5 });
- }
+ // A filled bib was once a kind here; kept as a no-op so a saved state that
+ // still names it simply shows nothing rather than throwing.
return;
}
// ねこ: three whiskers a side, growing out of the cheeks with a gap left in the
diff --git a/public/bluebey-studio/src/main.js b/public/bluebey-studio/src/main.js
index 9514ca4..cfd6773 100644
--- a/public/bluebey-studio/src/main.js
+++ b/public/bluebey-studio/src/main.js
@@ -399,7 +399,6 @@ async function init() {
const files = [
{ kind: 'scotch', file: 'scotch.png' },
{ kind: 'kaiser', file: 'kaiser-right.png' },
- { kind: 'apron', file: 'apron.png' },
];
const loaded = {};
await Promise.all(files.map(async ({ kind, file }) => {
diff --git a/public/bluebey-studio/src/panel.js b/public/bluebey-studio/src/panel.js
index d63055a..63e501b 100644
--- a/public/bluebey-studio/src/panel.js
+++ b/public/bluebey-studio/src/panel.js
@@ -162,7 +162,7 @@ export function buildPanel(app, root) {
lookY: +rnd(-0.25, 0.25).toFixed(2),
});
const randomFacePatch = () => {
- const beardShape = pick(['off', 'scotch', 'kaiser', 'apron', 'cat']);
+ const beardShape = pick(['off', 'scotch', 'kaiser', 'cat']);
return {
eyes: {
left: randomEye(),
@@ -1125,7 +1125,6 @@ export function buildPanel(app, root) {
{ value: 'off', label: 'なし' },
{ value: 'scotch', label: 'ちょびひげ' },
{ value: 'kaiser', label: 'ダリ' },
- { value: 'apron', label: 'ペンシル' },
{ value: 'cat', label: 'ねこ' },
],
value: 'off',
@@ -1147,8 +1146,9 @@ export function buildPanel(app, root) {
onInput: (v) => { state.face.eyes.beard.size = v; app.actions.refresh('face'); },
}),
spacing: slider({
- label: '左右の間隔', min: -10, max: 240, step: 1, value: 0, format: (v) => `${Math.round(v)}`,
- onInput: (v) => { state.face.eyes.beard.spacing = v; app.actions.refresh('face'); },
+ label: '左右の間隔', min: 0, max: 250, step: 1, value: 0, format: (v) => `${Math.round(v)}`,
+ // Shown 10 higher than the value stored, so the default (stored -10) reads 0.
+ onInput: (v) => { state.face.eyes.beard.spacing = v - 10; app.actions.refresh('face'); },
}),
offsetY: slider({
label: 'たかさ', min: -160, max: 160, step: 1, value: 0, format: (v) => `${Math.round(v)}`,
@@ -1175,7 +1175,7 @@ export function buildPanel(app, root) {
onChange: (v) => { state.face.eyes.beard.color = v; app.actions.refresh('face'); },
});
beardBox.add(beardColor.el);
- beardBox.add(hint('鼻の下に、ちょびひげ・ダリ・ペンシル・ねこ、の瓢を描きます。'
+ beardBox.add(hint('鼻の下に、ちょびひげ・ダリ・ねこ、の瓢を描きます。'
+ '「左右の間隔」「瓢の長さ」「線の間隔」は「ねこ」で使います。'));
// --- mouth
@@ -2693,6 +2693,8 @@ export function buildPanel(app, root) {
snotColor.set(state.face.eyes.snot.color);
beardShape.set(state.face.eyes.beard.shape ?? 'off');
for (const [key, widget] of Object.entries(beardSliders)) widget.set(state.face.eyes.beard[key]);
+ // 「左右の間隔」は内部値より+10して表示する(既定の -10 が 0 に見える)。
+ beardSliders.spacing.set((state.face.eyes.beard.spacing ?? 0) + 10);
beardColor.set(state.face.eyes.beard.color);
});
diff --git a/public/bluebey-studio/src/presets.js b/public/bluebey-studio/src/presets.js
index 33fdd45..3a79d9b 100644
--- a/public/bluebey-studio/src/presets.js
+++ b/public/bluebey-studio/src/presets.js
@@ -47,7 +47,7 @@ function captionDefaults() {
*/
export const BEARD_KIND_DEFAULTS = {
scotch: { size: 0.46, offsetY: 74 },
- kaiser: { size: 1, offsetY: 100, spacing: -10 },
+ kaiser: { size: 1, offsetY: 80, spacing: -10 },
};
/**