public/lib/wardrobe.js

分割 5 / 7 · 元ファイル 622〜783行付近

原文の連続部分です。長い圧縮行は行の途中で分割する場合があります。全分割を順に連結するとファイル全文になります。

      g.beginPath(); g.moveTo(x, shY + r * 0.02); g.lineTo(x + r * 0.12, T(shY, bot, 0.56));
      g.lineTo(x, T(shY, bot, 0.64)); g.lineTo(x - r * 0.12, T(shY, bot, 0.56)); g.closePath(); g.fill();
      buttons(g, x, shY, bot, r, '#cdc8bb', 3, 0.70, 0.94);
    } },
    { id: 'labcoat', nm: '白衣', price: 240, tone: 'neutral', draw: function (g, x, shY, bot, r, col) {
      base(g, x, shY, bot, r, col);
      g.fillStyle = WH;
      g.beginPath(); g.moveTo(x - r * 0.74, shY); g.lineTo(x - r * 0.20, shY);
      g.lineTo(x - r * 0.24, bot + r * 0.34); g.lineTo(x - r * 1.24, bot + r * 0.34); g.closePath(); g.fill();
      g.beginPath(); g.moveTo(x + r * 0.74, shY); g.lineTo(x + r * 0.20, shY);
      g.lineTo(x + r * 0.24, bot + r * 0.34); g.lineTo(x + r * 1.24, bot + r * 0.34); g.closePath(); g.fill();
      pocket(g, x - r * 0.72, T(shY, bot, 0.64), r * 0.38, r * 0.28, '#e2ddd0');
      pocket(g, x + r * 0.72, T(shY, bot, 0.64), r * 0.38, r * 0.28, '#e2ddd0');
      pocket(g, x - r * 0.48, T(shY, bot, 0.20), r * 0.30, r * 0.20, '#e2ddd0');
    } },
    { id: 'denim', nm: 'デニムジャケット', price: 260, tone: 'neutral', draw: function (g, x, shY, bot, r, col) {
      openFront(g, x, shY, bot, r, DN, lite(col, 0.40));
      g.strokeStyle = '#d9c9a2'; g.lineWidth = 1;
      g.beginPath(); g.moveTo(x - r * 1.02, T(shY, bot, 0.30)); g.lineTo(x - r * 0.28, T(shY, bot, 0.30)); g.stroke();
      g.beginPath(); g.moveTo(x + r * 1.02, T(shY, bot, 0.30)); g.lineTo(x + r * 0.28, T(shY, bot, 0.30)); g.stroke();
      g.fillStyle = '#d9c9a2';
      g.beginPath(); g.arc(x - r * 0.56, T(shY, bot, 0.40), r * 0.07, 0, 7); g.fill();
      g.beginPath(); g.arc(x + r * 0.56, T(shY, bot, 0.40), r * 0.07, 0, 7); g.fill();
      panel(g, x, shY, bot, r, 0.92, 1.00, '#3b5c80');
    } },
    { id: 'downvest', nm: 'ダウンベスト', price: 220, tone: 'neutral', draw: function (g, x, shY, bot, r, col) {
      base(g, x, shY, bot, r, BK);
      g.fillStyle = col;
      g.beginPath(); g.moveTo(x - r * 0.70, shY); g.lineTo(x - r * 0.20, shY);
      g.lineTo(x - r * 0.24, bot); g.lineTo(x - r * 1.16, bot); g.closePath(); g.fill();
      g.beginPath(); g.moveTo(x + r * 0.70, shY); g.lineTo(x + r * 0.20, shY);
      g.lineTo(x + r * 0.24, bot); g.lineTo(x + r * 1.16, bot); g.closePath(); g.fill();
      rib(g, x, shY, bot, r, 0.18, 0.92, 4, dark(col, 0.35), 1.2);
      g.strokeStyle = SV; g.lineWidth = 1.2;
      g.beginPath(); g.moveTo(x, shY); g.lineTo(x, bot); g.stroke();
    } },
    { id: 'dogi', nm: '道着', price: 230, tone: 'neutral', draw: function (g, x, shY, bot, r, col) {
      base(g, x, shY, bot, r, CR);
      xcollar(g, x, shY, bot, r, lite(col, 0.30));
      panel(g, x, shY, bot, r, 0.54, 0.66, BK);
      g.strokeStyle = BK; g.lineWidth = r * 0.08;
      g.beginPath(); g.moveTo(x - r * 0.10, T(shY, bot, 0.66)); g.lineTo(x - r * 0.16, T(shY, bot, 0.86)); g.stroke();
      g.beginPath(); g.moveTo(x + r * 0.10, T(shY, bot, 0.66)); g.lineTo(x + r * 0.16, T(shY, bot, 0.86)); g.stroke();
    } },
    { id: 'chef', nm: 'コックコート', price: 250, tone: 'neutral', draw: function (g, x, shY, bot, r, col) {
      base(g, x, shY, bot, r, WH);
      g.fillStyle = CR;
      g.beginPath(); g.moveTo(x - r * 0.40, shY); g.lineTo(x + r * 0.40, shY);
      g.lineTo(x + r * 0.30, T(shY, bot, 0.18)); g.lineTo(x - r * 0.30, T(shY, bot, 0.18)); g.closePath(); g.fill();
      buttons(g, x - r * 0.30, shY, bot, r, '#cdc8bb', 3, 0.28, 0.72);
      buttons(g, x + r * 0.30, shY, bot, r, '#cdc8bb', 3, 0.28, 0.72);
      /* 首元のスカーフ(白い服に埋もれないよう濃いめ) */
      g.fillStyle = dark(col, 0.30);
      g.beginPath(); g.moveTo(x - r * 0.34, shY - r * 0.04); g.lineTo(x + r * 0.34, shY - r * 0.04);
      g.lineTo(x, T(shY, bot, 0.16)); g.closePath(); g.fill();
      panel(g, x, shY, bot, r, 0.76, 0.84, '#5a5a60');
    } }
  ];

  /* ================= 帽子・頭装備 21種 ================= */
  /* 頭のてっぺんを隠すお椀。y をずらして髪ごと覆う */
  function dome(g, x, y, rx, ry, col) {
    g.fillStyle = col;
    g.beginPath(); g.ellipse(x, y, rx, ry, 0, Math.PI, Math.PI * 2); g.closePath(); g.fill();
  }
  /* つば(横に長い楕円) */
  function brim(g, x, y, rx, ry, col) {
    g.fillStyle = col;
    g.beginPath(); g.ellipse(x, y, rx, ry, 0, 0, 7); g.fill();
  }
  /* 前に突き出すつば */
  function peak(g, x, y, r, dir, col, len) {
    g.fillStyle = col;
    g.beginPath(); g.ellipse(x + dir * r * (len || 0.62), y, r * (len || 0.62), r * 0.18, 0, 0, 7); g.fill();
  }

  /* どの帽子も、眉の少し上(yHead-0.34r あたり)を縁にして、
     そこから上を丸ごと覆う。こうすると顔が隠れず、髪型が何であっても
     てっぺんが出てこない(アフロの膨らみまで入るよう上は 1.3r まで取る)。 */
  var HATS = [
    { id: 'none', nm: 'なし', price: 0, draw: function () { } },

    { id: 'cap', nm: 'キャップ', price: 90, draw: function (g, x, yHead, r, dir) {
      peak(g, x + dir * r * 0.10, yHead - r * 0.46, r, dir, '#2f4f7a', 0.62);
      dome(g, x, yHead - r * 0.34, r * 1.24, r * 1.04, '#3f6fa8');
      g.fillStyle = '#2f4f7a';
      g.fillRect(x - r * 1.24, yHead - r * 0.50, r * 2.48, r * 0.16);
      g.fillStyle = WH;
      g.beginPath(); g.arc(x, yHead - r * 1.18, r * 0.10, 0, 7); g.fill();
    } },
    { id: 'knit', nm: 'ニット帽', price: 100, draw: function (g, x, yHead, r) {
      dome(g, x, yHead - r * 0.30, r * 1.26, r * 1.12, '#7a5aa0');
      g.fillStyle = '#6a4b8e';
      g.fillRect(x - r * 1.26, yHead - r * 0.52, r * 2.52, r * 0.26);
      g.strokeStyle = '#8d6cb5'; g.lineWidth = 1;
      for (var i = -2; i <= 2; i++) {
        /* 編み目の縦線。お椀の縁からはみ出さないよう端ほど短くする */
        g.beginPath(); g.moveTo(x + i * r * 0.42, yHead - r * 0.52);
        g.lineTo(x + i * r * 0.46, yHead - r * (1.28 - Math.abs(i) * 0.18)); g.stroke();
      }
      g.fillStyle = CR;
      g.beginPath(); g.arc(x, yHead - r * 1.56, r * 0.26, 0, 7); g.fill();
    } },
    { id: 'straw', nm: '麦わら帽子', price: 140, draw: function (g, x, yHead, r) {
      brim(g, x, yHead - r * 0.48, r * 1.48, r * 0.30, '#e3c67c');
      dome(g, x, yHead - r * 0.50, r * 1.00, r * 0.92, '#d9b96a');
      g.fillStyle = RD;
      g.fillRect(x - r * 1.00, yHead - r * 0.74, r * 2.00, r * 0.18);
      g.strokeStyle = '#c0a055'; g.lineWidth = 1;
      g.beginPath(); g.ellipse(x, yHead - r * 0.48, r * 1.26, r * 0.24, 0, 0, 7); g.stroke();
    } },
    { id: 'hat', nm: 'ハット', price: 170, draw: function (g, x, yHead, r) {
      brim(g, x, yHead - r * 0.54, r * 1.40, r * 0.26, '#4a4038');
      dome(g, x, yHead - r * 0.52, r * 0.96, r * 1.14, '#5a4e44');
      g.fillStyle = '#3b332d';
      g.fillRect(x - r * 0.96, yHead - r * 0.78, r * 1.92, r * 0.22);
      g.strokeStyle = '#41382f'; g.lineWidth = 1.4;
      g.beginPath(); g.moveTo(x - r * 0.28, yHead - r * 1.60); g.lineTo(x + r * 0.28, yHead - r * 1.60); g.stroke();
    } },
    { id: 'beret', nm: 'ベレー帽', price: 110, draw: function (g, x, yHead, r, dir) {
      dome(g, x, yHead - r * 0.40, r * 1.18, r * 0.88, '#c4443a');
      g.fillStyle = '#c4443a';
      g.beginPath(); g.ellipse(x - dir * r * 0.10, yHead - r * 0.92, r * 1.20, r * 0.56, -dir * 0.18, 0, 7); g.fill();
      g.fillStyle = '#a3362e';
      g.beginPath(); g.arc(x + dir * r * 0.60, yHead - r * 1.28, r * 0.14, 0, 7); g.fill();
    } },
    { id: 'ribbon', nm: 'リボン帽', price: 130, draw: function (g, x, yHead, r, dir) {
      dome(g, x, yHead - r * 0.32, r * 1.24, r * 1.04, PK);
      g.fillStyle = '#d1769a';
      g.fillRect(x - r * 1.24, yHead - r * 0.46, r * 2.48, r * 0.14);
      bow(g, x + dir * r * 1.06, yHead - r * 0.64, r * 0.40, '#f4b3c6');
    } },
    { id: 'catear', nm: '猫耳風', price: 160, draw: function (g, x, yHead, r) {
      dome(g, x, yHead - r * 0.34, r * 1.24, r * 1.04, '#3b3640');
      var ear = function (sx) {
        g.fillStyle = '#3b3640';
        g.beginPath(); g.moveTo(x + sx * r * 0.28, yHead - r * 1.06);
        g.lineTo(x + sx * r * 0.64, yHead - r * 1.96); g.lineTo(x + sx * r * 0.96, yHead - r * 0.96); g.closePath(); g.fill();
        g.fillStyle = PK;
        g.beginPath(); g.moveTo(x + sx * r * 0.46, yHead - r * 1.10);
        g.lineTo(x + sx * r * 0.64, yHead - r * 1.62); g.lineTo(x + sx * r * 0.80, yHead - r * 1.04); g.closePath(); g.fill();
      };
      ear(-1); ear(1);
    } },
    { id: 'crown', nm: '王冠風', price: 220, draw: function (g, x, yHead, r) {
      dome(g, x, yHead - r * 0.46, r * 1.16, r * 0.90, '#c99a34');
      g.fillStyle = GD;
      g.beginPath();
      g.moveTo(x - r * 1.04, yHead - r * 1.10);
      for (var i = 0; i < 3; i++) {
        var x0 = x - r * 1.04 + i * r * 0.693;
        g.lineTo(x0 + r * 0.346, yHead - r * 1.98);
        g.lineTo(x0 + r * 0.693, yHead - r * 1.10);
      }
      g.lineTo(x + r * 1.04, yHead - r * 0.64); g.lineTo(x - r * 1.04, yHead - r * 0.64);
      g.closePath(); g.fill();
      g.fillStyle = RD;
      g.beginPath(); g.arc(x, yHead - r * 0.86, r * 0.14, 0, 7); g.fill();
      g.fillStyle = '#5fa8c4';
      g.beginPath(); g.arc(x - r * 0.60, yHead - r * 0.84, r * 0.09, 0, 7); g.fill();
      g.beginPath(); g.arc(x + r * 0.60, yHead - r * 0.84, r * 0.09, 0, 7); g.fill();
    } },