似非ScenarioTextDraw

akiramei2004-10-17

yaneSDK4Csのバグ修正をやってたら、ちょっとゲームプログラミングっぽいことしたくなったので、ライブラリ拡張してテキスト表示でHTMLっぽいタグが使えるようにしてみました。こんな感じで使います。

using System;
using y4cs.timer;
using y4cs.math;
using y4cs.aux;
using y4cs.draw;
using y4cs.input;

class Sample01
{
  // テスト文字列
  static string text = 
  "<font size=2 color=#ffffff>" +
  "<b>「フフフ、ハハハ、ついに見つけたわ」</b><br>" +
  " <br>" + 
  "<font size=3 color=#00ff00>森</font>と<font color=#0000ff size=3>湖</font>" +
  "に囲まれた<u>古城の一室</u>で<font size=3 color=#ff0000>女</font>は呟いた。<br>" +
  "真っ暗な部屋の中、<br>" +
  "<b><font color=#add8e6>蒼い月</font></b>の光が浮かび出すシルエット。<br>" + 
  "純白のドレスと<b><font color=#e0ffff>白い肌</font></b>、" +
  "そして<b><font color=#ff0000>深紅の瞳</font></b>が暗闇に光っていた。<br>" +
  " <br>" + 
  "<b>「闇の女王…、怠惰な貴方とはいえ、沈黙して<i>15年</i>。<br>" +
  " 少々怠けすぎではなくて?」</b><br>" + 
  " <br>" + 
  "<font size=3 color=#ff0000>女</font>は東の窓へと足を進める。<br>" + 
  "この空の向こうに<u><i>彼女</i></u>がいる。<br>" + 
  "優しく見つめる目が細められ、厳しいものに変わる。<br>" +
  " <br>" + 
  "<b>「貴方に無様な姿は許されないのよ、" + 
  "<font color=#ffd700><i><u>アタナシア</u></i></font>」</b></font>";

  [STAThread]
  static void Main(string[] args)
  {
    // お決まりのパターン
    Screen screen = new Screen();
    screen.beginScreenTest();
    screen.testVideoMode(640,480,0);
    screen.endScreenTest();

    // アルファ転送する
    screen.blendSrcAlpha();

    // 60fps
    FpsTimer fpstimer = new FpsTimer();
    fpstimer.setFps(60);

    // フォントローダーに使用するフォントを登録
    // registerで登録した場合、登録順に0,1...と番号が振られる
    // この番号をFontRepositoryのsetLoaderを呼ぶときに指定する
    FontLoader loader = new FontLoader();
    for (int i = 0; i < 3; ++i) {
      loader.register("msmincho.ttc", 16 + i * 4);  // MS明朝
    }

    int loop = 0;
    MouseInput m = new MouseInput();

    // HTML形式に対応したテキスト描画クラス
    ScenarioTextDraw view = new ScenarioTextDraw();
    view.getFontRepository().setLoader(loader, 0);
    view.getFontRepository().setMax(300);
    // HTML形式の文字列を設定
    view.setText(text);
    view.updateText();

    Color4ub c = new Color4ub();

    while (GameFrame.pollEvent() == 0)
    {
      // マウスクリックで終了
      if (m.isPress(MouseInput.button.left))
        break;

      screen.clear();

      // 10フレーム毎に1文字表示
      if (loop++ % 10 == 0) 
        view.next();
      view.onDraw(screen, 30, 30, c);

      screen.update();
      fpstimer.waitFrame();
    }
  }
}

もう少し、テストしたらライブラリをアップします。