Class: TonMessage

ADVゲームのようなメッセージウィンドウ機能を提供します。スクリプトテキスト内のタグにより演出を制御できます。

Methods

void LoadScript(string filePath, string scriptName = null)

スクリプトファイルを読み込み、再生を開始します。

注意: MGCB Editorでスクリプトファイルを追加する際は、Build ActionCopy に設定してください。多分UTF-8(BOM無し)がいいです。

void SetWindowRect(int x, int y, int width, int height)

メッセージウィンドウの表示位置とサイズを設定します。

void Show(string scriptText)

テキストを表示キューに追加し、ウィンドウを表示します。

void Next()

メッセージを送り、次のページへ進むか、表示を終了します。

void Close()

ウィンドウを閉じます。

bool IsBusy()

テキスト送り中、または入力待ち状態かどうかを返します。

void SetTextStyle(float scale, float lineSpacing, float kerningOffset = 0f)

文字の基本サイズ、行間の高さ(px)、文字間隔のオフセット(px)を設定します。

void SetAutoDraw(bool bAutoDraw = true)

Ton.Instance.Draw(gameTime) 内で Ton.Msg を自動描画するかどうかを設定します。

void Draw()

現在のメッセージを描画します。SetAutoDraw(false) を指定した場合や、RenderTargetへ描き込みたい場合に手動で呼び出します。

描画先は呼び出し時点の Ton.Gra の描画先に従います。仮想画面へ描く場合は、先に Ton.Gra.SetRenderTarget(...) を呼んでください。

void SetLineBreakMode(MessageLineBreakMode mode)

自動改行時の折り返しモードを設定します。既定値は MessageLineBreakMode.TokenAware です。

void SetVerticalOverflowBehavior(MessageVerticalOverflowMode mode, int autoNextWaitMs = 0)

縦方向の描画範囲を超えたときの挙動を設定します。既定値は MessageVerticalOverflowMode.ForceNext です。

void Update(GameTime gameTime, bool isInput = false)

メッセージの文字送り処理や待機時間の更新を行います。毎フレーム呼び出してください。

void SetTextSpeed(float speedMs)

デフォルトの文字送り速度(1文字あたりの表示時間ms)を設定します(初期値=50ms)。

void SetVariable(string key, string value)

[var:key] タグで使用する文字列変数を設定します。Show または LoadScript を呼ぶ前に設定してください。

string GetEvent()

[event:xxx]タグでキューイングされたイベントIDを取得します。

Supported Tags

使用可能なタグ一覧

テキスト中に以下のタグを埋め込むことで、表示を制御できます。

Sample Code

// In Initialize()
// Set position and size
Ton.Msg.SetWindowRect(20, 400, 600, 150);
Ton.Msg.SetLineBreakMode(MessageLineBreakMode.TokenAware);
Ton.Msg.SetVariable("Exp", "1200");

// Show Message Script
string script = 
    "Hello.[wait:500] This is [color:Red]Red Text[reset].\n" +
    "Need EXP: [var:Exp]\n" +
    "Welcome to [icon:icon_star] Mononotonka.[next]" +
    "Select an option:\n" +
    "[event:opt1] Option 1 (Yes)\n" +
    "[event:opt2] Option 2 (No)";
Ton.Msg.Show(script);

// If you want to draw Ton.Msg into your own render target
Ton.Msg.SetAutoDraw(false);

// In Update()
// Advance text on input ("A" button or B button)
bool isInput = Ton.Input.IsJustPressed("A") || Ton.Input.IsJustPressed("B");
Ton.Msg.Update(gameTime, isInput); // Don't forget to pass gameTime!

// In Draw()
Ton.Gra.SetRenderTarget("message_layer");
Ton.Msg.Draw();
Ton.Gra.SetRenderTarget();

// Check for Event (Selection)
string eventId = Ton.Msg.GetEvent();
if (eventId != null)
{
    if (eventId == "opt1") { /* Selected Yes */ }
    else if (eventId == "opt2") { /* Selected No */ }
}

// Check if busy
if (Ton.Msg.IsBusy())
{
    // Pause game logic while message is showing?
}

Script Format

スクリプトファイル内では、行頭に # を付けることで複数のスクリプトを記述できます。

また、行頭に ; を付けるとコメント行となり、表示されません。

ラベルの使い方

改行と空行の扱い

#Opening
; これはコメントです
[icon:Hero] こんにちは!
これはオープニングです。
[blankline]
[blankline]
[next]

#Ending
[icon:Hero] ありがとう!
また会いましょう。[next]

Sample Code

// Initialize
Ton.Msg.Initialize();
Ton.Msg.SetLineBreakMode(MessageLineBreakMode.TokenAware);
Ton.Msg.SetVariable("Exp", "1200");

// Load script from file (Play "Opening" section)
Ton.Msg.LoadScript("script/scenario.txt", "Opening");

// Manual Control
if (Ton.Input.IsJustPressed("A"))
{
    Ton.Msg.Next();
}