From d959c2b40ac06a1a7acf25ae7b520b481dd7e846 Mon Sep 17 00:00:00 2001 From: codereader Date: Tue, 6 Sep 2022 16:50:35 +0200 Subject: [PATCH] #6092: Add IFxManager interface and global module declaration --- include/ifx.h | 23 +++++++++++++++++++++++ radiantcore/fx/FxManager.cpp | 6 ++++++ radiantcore/fx/FxManager.h | 6 ++++-- test/Fx.cpp | 7 +++---- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/include/ifx.h b/include/ifx.h index b239f96267..8ff939900d 100644 --- a/include/ifx.h +++ b/include/ifx.h @@ -1,5 +1,6 @@ #pragma once +#include "imodule.h" #include "ideclmanager.h" #include "math/Vector3.h" @@ -145,4 +146,26 @@ class IFxDeclaration : virtual std::string getBindTo() = 0; }; +/** + * Convenience interface to deal with FX declarations + */ +class IFxManager : + public RegisterableModule +{ +public: + /** + * Lookup an FX declaration by name. + * If the decl is not found, an empty reference is returned. + */ + virtual IFxDeclaration::Ptr findFx(const std::string& name) = 0; +}; + +} + +constexpr const char* const MODULE_FXMANAGER("FxManager"); + +inline fx::IFxManager& GlobalFxManager() +{ + static module::InstanceReference _reference(MODULE_FXMANAGER); + return _reference; } diff --git a/radiantcore/fx/FxManager.cpp b/radiantcore/fx/FxManager.cpp index 2c2fb28614..6246896a1a 100644 --- a/radiantcore/fx/FxManager.cpp +++ b/radiantcore/fx/FxManager.cpp @@ -7,6 +7,12 @@ namespace fx { +IFxDeclaration::Ptr FxManager::findFx(const std::string& name) +{ + return std::static_pointer_cast( + GlobalDeclarationManager().findDeclaration(decl::Type::Fx, name)); +} + const std::string& FxManager::getName() const { static std::string _name("FxManager"); diff --git a/radiantcore/fx/FxManager.h b/radiantcore/fx/FxManager.h index 48f6120c66..66de7a7cee 100644 --- a/radiantcore/fx/FxManager.h +++ b/radiantcore/fx/FxManager.h @@ -1,14 +1,16 @@ #pragma once -#include "imodule.h" +#include "ifx.h" namespace fx { class FxManager final : - public RegisterableModule + public IFxManager { public: + IFxDeclaration::Ptr findFx(const std::string& name) override; + // RegisterableModule implementation const std::string& getName() const override; const StringSet& getDependencies() const override; diff --git a/test/Fx.cpp b/test/Fx.cpp index 9181e089b2..67e17c3014 100644 --- a/test/Fx.cpp +++ b/test/Fx.cpp @@ -9,14 +9,13 @@ using FxTest = RadiantTest; inline fx::IFxDeclaration::Ptr getFxByName(const std::string& name) { - return std::static_pointer_cast( - GlobalDeclarationManager().findDeclaration(decl::Type::Fx, name)); + return GlobalFxManager().findFx(name); } TEST_F(FxTest, GetFxByName) { - EXPECT_TRUE(GlobalDeclarationManager().findDeclaration(decl::Type::Fx, "fx/tdm_flame")); - EXPECT_TRUE(GlobalDeclarationManager().findDeclaration(decl::Type::Fx, "fx/sparks")); + EXPECT_TRUE(GlobalFxManager().findFx("fx/tdm_flame")); + EXPECT_TRUE(GlobalFxManager().findFx("fx/sparks")); } TEST_F(FxTest, GetNumActions)