18 #ifndef INCLUDED_SCRIPTCOMPONENT 19 #define INCLUDED_SCRIPTCOMPONENT 49 template<
typename R,
typename... Ts>
50 R
Call(
const char* funcname,
const Ts&... params)
const 56 LOGERROR(
"Error calling component script function %s", funcname);
61 template<
typename R,
typename... Ts>
62 void CallRef(
const char* funcname, R ret,
const Ts&... params)
const 66 LOGERROR(
"Error calling component script function %s", funcname);
69 template<
typename... Ts>
70 void CallVoid(
const char* funcname,
const Ts&... params)
const 74 LOGERROR(
"Error calling component script function %s", funcname);
82 #define REGISTER_COMPONENT_SCRIPT_WRAPPER(cname) \ 83 void RegisterComponentType_##cname(CComponentManager& mgr) \ 85 IComponent::RegisterComponentTypeScriptWrapper(mgr, CCmp##cname::GetInterfaceId(), CID_##cname, CCmp##cname::Allocate, CCmp##cname::Deallocate, #cname, CCmp##cname::GetSchema()); \ 86 CCmp##cname::ClassInit(mgr); \ 90 #define DEFAULT_SCRIPT_WRAPPER(cname) \ 91 static void ClassInit(CComponentManager& UNUSED(componentManager)) { } \ 92 static IComponent* Allocate(const ScriptInterface& scriptInterface, JS::HandleValue instance) \ 94 return new CCmp##cname(scriptInterface, instance); \ 96 static void Deallocate(IComponent* cmp) \ 98 delete static_cast<CCmp##cname*> (cmp); \ 100 CCmp##cname(const ScriptInterface& scriptInterface, JS::HandleValue instance) : m_Script(scriptInterface, instance) { } \ 101 static std::string GetSchema() \ 103 return "<a:component type='script-wrapper'/><empty/>"; \ 105 void Init(const CParamNode& paramNode) override \ 107 m_Script.Init(paramNode, GetEntityId()); \ 109 void Deinit() override \ 113 void HandleMessage(const CMessage& msg, bool global) override \ 115 m_Script.HandleMessage(msg, global); \ 117 void Serialize(ISerializer& serialize) override \ 119 m_Script.Serialize(serialize); \ 121 void Deserialize(const CParamNode& paramNode, IDeserializer& deserialize) override \ 123 m_Script.Deserialize(paramNode, deserialize, GetEntityId()); \ 125 JS::Value GetJSInstance() const override \ 127 return m_Script.GetInstance(); \ 129 int GetComponentTypeId() const override \ 131 return CID_##cname; \ 134 CComponentTypeScript m_Script; \ 137 #endif // INCLUDED_SCRIPTCOMPONENT An entity initialisation parameter node.
Definition: ParamNode.h:150
NONCOPYABLE(CComponentTypeScript)
void CallVoid(const char *funcname, const Ts &... params) const
Definition: ScriptComponent.h:70
#define LOGERROR(...)
Definition: CLogger.h:36
JS::PersistentRootedValue m_Instance
Definition: ScriptComponent.h:79
static bool Call(const ScriptRequest &rq, JS::HandleValue val, const char *name, R &ret, const Args &... args)
Call a JS function name, property of object val, with the arguments args.
Definition: FunctionWrapper.h:345
Serialization interface; see serialization overview.
Definition: ISerializer.h:120
void Serialize(ISerializer &serialize)
Definition: ScriptComponent.cpp:61
void Deinit()
Definition: ScriptComponent.cpp:43
void Deserialize(const CParamNode ¶mNode, IDeserializer &deserialize, entity_id_t ent)
Definition: ScriptComponent.cpp:81
Definition: ScriptComponent.h:34
CComponentTypeScript(const ScriptInterface &scriptInterface, JS::HandleValue instance)
Definition: ScriptComponent.cpp:29
Config::Value_type Value
Definition: json_spirit_value.h:182
void CallRef(const char *funcname, R ret, const Ts &... params) const
Definition: ScriptComponent.h:62
R Call(const char *funcname, const Ts &... params) const
Definition: ScriptComponent.h:50
JS::Value GetInstance() const
Definition: ScriptComponent.h:40
static bool CallVoid(const ScriptRequest &rq, JS::HandleValue val, const char *name, const Args &... args)
Call a JS function name, property of object val, with the arguments args.
Definition: FunctionWrapper.h:362
Abstraction around a SpiderMonkey JS::Realm.
Definition: ScriptInterface.h:71
const ScriptInterface & m_ScriptInterface
Definition: ScriptComponent.h:78
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
Spidermonkey maintains some 'local' state via the JSContext* object.
Definition: ScriptRequest.h:59
void HandleMessage(const CMessage &msg, bool global)
Definition: ScriptComponent.cpp:49
void Init(const CParamNode ¶mNode, entity_id_t ent)
Definition: ScriptComponent.cpp:35
Deserialization interface; see serialization overview.
Definition: IDeserializer.h:34