アドオン - Siv3D/Reference-JP GitHub Wiki

Addon

IAddon を継承したクラスは、Siv3D エンジンにアドオンとして登録できます。
クラスをアドオンとして登録すると、System::Update() のたびに自動で update() が呼ばれ、ユーザが更新用の関数を呼ぶ手間を省けます。
LeapMotion Addon はアドオンの仕組みを利用して実装されています。

アドオンの使用例

# include <Siv3D.hpp>

class FPS_On_Title : public IAddon
{
private:

	String m_baseTitle;

	String m_previousTitle;

public:

	static const String name()
	{
		return String(L"FPS_On_Title");
	}

	String getName() const override
	{
		return name();
	}

	bool init() override
	{
		m_previousTitle = m_baseTitle = Window::GetTitle();
		
		return true;
	}

	bool update() override
	{
		const String currentTitle = Window::GetTitle();

		if (currentTitle != m_previousTitle)
		{
			m_baseTitle = currentTitle;
		}

		m_previousTitle = Format(L"{} ({}fps)"_fmt, m_baseTitle, Profiler::FPS());

		Window::SetTitle(m_previousTitle);

		return true;
	}
};

void Main()
{
	Println(Addon::IsRegistered<FPS_On_Title>());

	Addon::Register<FPS_On_Title>();

	Println(Addon::IsRegistered<FPS_On_Title>());

	while (System::Update())
	{
		if (Input::MouseL.clicked)
		{
			Window::SetTitle(L"My App");
		}

		if (Input::MouseR.clicked)
		{
			Window::SetTitle(L"My Game");
		}

		if (Input::KeyU.clicked)
		{
			Addon::Unregister<FPS_On_Title>();

			Window::SetTitle(L"My Work");

			Println(Addon::IsRegistered<FPS_On_Title>());
		}
	}
}
⚠️ **GitHub.com Fallback** ⚠️