Move Color to Scripting.

This commit is contained in:
hispidence 2022-01-21 21:09:23 +00:00
parent 416be03d95
commit 7c484d2510
11 changed files with 16 additions and 20 deletions

View file

@ -0,0 +1,40 @@
#pragma once
#include "ScriptAssert.h"
#include <functional>
#include <string>
template <typename S> using callbackSetName = std::function<bool(std::string const&, S identifier)>;
using callbackRemoveName = std::function<bool(std::string const&)>;
// Use the "curiously recurring template pattern" to allow classes to inherit static members and functions.
// T is the class that will both derive and instantiate this base class. S is the type used inside GameScriptWhateverInfo
// to actually reference the underlying TombEngine struct.
template <typename T, class S> class GameScriptNamedBase
{
public:
static void SetNameCallbacks(callbackSetName<S> cbs, callbackRemoveName cbr)
{
s_callbackSetName = cbs;
s_callbackRemoveName = cbr;
}
protected:
static callbackSetName<S> s_callbackSetName;
static callbackRemoveName s_callbackRemoveName;
};
// default callbacks
template <typename T, typename S> callbackSetName<S> GameScriptNamedBase<T, S>::s_callbackSetName = [](std::string const& n, S identifier) {
std::string err = "\"Set Name\" callback is not set.";
throw TENScriptException(err);
return false;
};
// this could potentially be called by the GameScriptItemInfo destructor, and thus cannot throw
template <typename T, typename S> callbackRemoveName GameScriptNamedBase<T, S>::s_callbackRemoveName = [](std::string const& n) {
TENLog("\"Remove Name\" callback is not set.", LogLevel::Error);
std::terminate();
return false;
};