イベントタイマー

Siv3D Advent Calendar 2013, 11 日目の記事です。
今日は December 2013 で追加されたイベントタイマー機能を紹介します。

EventTimer は Timer の強化版で、設定したイベント時間の通過を教えてくれます。

イベントの設定は EventTimer::set(event, time)
あるイベントを通過したかどうかは EventTimer::onTriggered(event) で判定します。

EventTimer::clearEvents() するまでイベント情報は消えないので、EventTimer::restart() で何回でもイベントを発生させることができます。
Timer と違い、イベント通過判定のために毎フレーム EventTimer::update() する必要がある点だけ注意してください。

サンプル


# include <Siv3D.hpp>

void Main()
{
	Graphics::SetBackground(Palette::Gray);

	EventTimerMillisec eventTimer;
	eventTimer.setEvent(L"Red", 2000);
	eventTimer.setEvent(L"Blue", 6000);
	eventTimer.setEvent(L"Green", 4000);

	eventTimer.start();

	while (System::Update())
	{
		const unsigned elapsed = eventTimer.update();

		if (eventTimer.onTriggered(L"Red"))
		{
			Println(L"Red: ", elapsed);

			Graphics::SetBackground(Palette::Red);
		}
		else if (eventTimer.onTriggered(L"Green"))
		{
			Println(L"Green: ", elapsed);

			Graphics::SetBackground(Palette::Green);
		}
		else if (eventTimer.onTriggered(L"Blue"))
		{
			Println(L"Blue: ", elapsed);

			Graphics::SetBackground(Palette::Blue);
		}

		if (Input::MouseR.clicked)
		{
			Println(L"restart");

			Graphics::SetBackground(Palette::Gray);

			eventTimer.restart();
		}
	}
}