Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
156
Src/Wasabi/api/script/objcontroller.cpp
Normal file
156
Src/Wasabi/api/script/objcontroller.cpp
Normal file
|
@ -0,0 +1,156 @@
|
|||
#include <bfc/wasabi_std.h>
|
||||
#include <api/script/objcontroller.h>
|
||||
#include <api/script/objects/c_script/scripthook.h>
|
||||
#include "api.h"
|
||||
|
||||
#define CBCLASS ScriptObjectControllerI
|
||||
START_DISPATCH;
|
||||
CB(GETCLASSGUID, getClassGuid);
|
||||
CB(GETCLASSNAME, getClassName);
|
||||
CB(GETANCESTORCLASSNAME, getAncestorClassName);
|
||||
CB(GETNUMFUNCTIONS, getNumFunctions);
|
||||
CB(GETEXPORTEDFUNCTIONS, getExportedFunctions);
|
||||
CB(INSTANTIATE, instantiate);
|
||||
VCB(DESTROY, destroy);
|
||||
CB(ENCAPSULATE, encapsulate);
|
||||
VCB(DEENCAPSULATE, deencapsulate);
|
||||
VCB(SETCLASSID, setClassId);
|
||||
CB(GETCLASSID, getClassId);
|
||||
VCB(SETANCESTORCLASSID, setAncestorClassId);
|
||||
CB(GETANCESTORCLASSID, getAncestorClassId);
|
||||
CB(GETINSTANTIABLE, getInstantiable);
|
||||
CB(GETREFERENCEABLE, getReferenceable);
|
||||
CB(GETANCESTORCONTROLLER, getAncestorController);
|
||||
VCB(ADDCLASSHOOK, addClassHook);
|
||||
VCB(ADDOBJHOOK, addObjectHook);
|
||||
VCB(REMHOOKS, removeHooks);
|
||||
VCB(ONREGISTERCLASS, onRegisterClass);
|
||||
CB(CAST, cast);
|
||||
END_DISPATCH;
|
||||
|
||||
ScriptObjectControllerI::ScriptObjectControllerI() {
|
||||
my_class_id = -1;
|
||||
my_ancestor_class_id = -1;
|
||||
rootController = NULL;
|
||||
incast = 0;
|
||||
}
|
||||
|
||||
ScriptObjectControllerI::~ScriptObjectControllerI() {
|
||||
}
|
||||
|
||||
int ScriptObjectControllerI::processHooks(ScriptObject *o, int dlfid, scriptVar **table, int nparams) {
|
||||
//CUT: int n=-1;
|
||||
for (int j=0;j<classhooks.getNumItems();j++) {
|
||||
classhooks.enumItem(j)->eventCallback(o, dlfid, table, nparams);
|
||||
}
|
||||
for (int i=0;i<objhooks.getNumItems();i++) {
|
||||
object_hook_struct *s = objhooks.enumItem(i);
|
||||
if (s->object == o) {
|
||||
s->hook->eventCallback(o, dlfid, table, nparams);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ScriptObject *ScriptObjectControllerI::cast(ScriptObject *o, GUID g) {
|
||||
if (incast) return NULL;
|
||||
incast = 1;
|
||||
ASSERT(o != NULL);
|
||||
ScriptObject *obj = NULL;
|
||||
void *i = o->vcpu_getInterfaceObject(g, &obj);
|
||||
incast = 0;
|
||||
if (i != NULL) {
|
||||
if (obj != NULL) return obj;
|
||||
return o;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ScriptObjectControllerI::addClassHook(ScriptHook *h) {
|
||||
classhooks.addItem(h);
|
||||
}
|
||||
|
||||
void ScriptObjectControllerI::addObjectHook(ScriptHook *h, ScriptObject *o) {
|
||||
object_hook_struct *s = new object_hook_struct;
|
||||
s->hook = h;
|
||||
s->object = o;
|
||||
objhooks.addItem(s);
|
||||
/* if (getAncestorController())
|
||||
getAncestorController()->addObjectHook(h, o);
|
||||
else
|
||||
if (rootController && this != rootController) rootController->addObjectHook(h, o);*/
|
||||
}
|
||||
|
||||
void ScriptObjectControllerI::removeHooks(ScriptHook *h) {
|
||||
classhooks.removeItem(h);
|
||||
for (int i=0;i<objhooks.getNumItems();i++) {
|
||||
object_hook_struct *o = objhooks.enumItem(i);
|
||||
if (o->hook == h) {
|
||||
delete o;
|
||||
objhooks.removeByPos(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
/* if (getAncestorController())
|
||||
getAncestorController()->removeHooks(h);
|
||||
else
|
||||
if (rootController && this != rootController) rootController->removeHooks(h);*/
|
||||
}
|
||||
|
||||
void ScriptObjectControllerI::onRegisterClass(ScriptObjectController *root) {
|
||||
rootController = root;
|
||||
}
|
||||
|
||||
|
||||
scriptVar MAKE_SCRIPT_INT(int i) {
|
||||
scriptVar r;
|
||||
r.type = SCRIPT_INT;
|
||||
r.data.idata = i;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_VOID() {
|
||||
scriptVar r; r.type = SCRIPT_VOID;
|
||||
r.data.idata = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_FLOAT(float f) {
|
||||
scriptVar r; r.type = SCRIPT_FLOAT;
|
||||
r.data.fdata = f;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_DOUBLE(double d) {
|
||||
scriptVar r; r.type = SCRIPT_DOUBLE;
|
||||
r.data.ddata = d;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_BOOLEAN(int b) {
|
||||
scriptVar r; r.type = SCRIPT_BOOLEAN;
|
||||
r.data.idata = b;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_OBJECT(ScriptObject *o) {
|
||||
scriptVar r;
|
||||
r.type = SCRIPT_OBJECT;
|
||||
r.data.odata = o;
|
||||
return r;
|
||||
}
|
||||
|
||||
scriptVar MAKE_SCRIPT_STRING(const wchar_t *s)
|
||||
{
|
||||
scriptVar r;
|
||||
r.type = SCRIPT_STRING;
|
||||
r.data.sdata = s;
|
||||
return r;
|
||||
}
|
||||
|
||||
void *GET_SCRIPT_OBJECT_AS(scriptVar v, GUID g) {
|
||||
ScriptObject *o = GET_SCRIPT_OBJECT(v);
|
||||
if (!o) return NULL;
|
||||
return o->vcpu_getInterface(g);
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue