aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/script/objects/rootobjcontroller.cpp
blob: 94a6f3969c59eea2a617d5cdfa4644592515e124 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "precomp.h"
//<?#include "<class data="implementationheader"/>"
#include "rootobjcontroller.h"
//?>

#include <api/script/objects/rootobj.h>
#include <api/script/objects/rootobjecti.h>

RootScriptObjectController _rootScriptObjectController;
RootScriptObjectController *rootScriptObjectController = &_rootScriptObjectController;

// -- Functions table -------------------------------------
function_descriptor_struct RootScriptObjectController::exportedFunction[] = {
  {L"getClassName",  0, (void*)RootObject_ScriptMethods::getClassName },
  {L"notify",        4, (void*)RootObject_ScriptMethods::notify },
  {L"onNotify",      4, (void*)RootObject_ScriptMethods::onNotify },
};

const wchar_t *RootScriptObjectController::getClassName() {
  return L"Object";
}

const wchar_t *RootScriptObjectController::getAncestorClassName() {
  return NULL;
}

int RootScriptObjectController::getNumFunctions() {
  return sizeof(exportedFunction) / sizeof(function_descriptor_struct); 
}

const function_descriptor_struct *RootScriptObjectController::getExportedFunctions() {
  return exportedFunction;
}

GUID RootScriptObjectController::getClassGuid() {
  return rootObjectGuid;
}

ScriptObject *RootScriptObjectController::instantiate() {
  RootObjectInstance *o = new RootObjectInstance;
  ASSERT(o != NULL);
  return o->getScriptObject();
}

void RootScriptObjectController::destroy(ScriptObject *o) {
  RootObjectInstance *obj = static_cast<RootObjectInstance *>(o->vcpu_getInterface(rootObjectGuid)); 
  ASSERT(obj != NULL);
  delete obj;
}

void RootScriptObjectController::deencapsulate(void *o) {
  RootObjectI *obj = static_cast<RootObjectI *>(o); 
  delete obj;
}

void *RootScriptObjectController::encapsulate(ScriptObject *o) {
  return new RootObjectI(o);
}

// -------------------------------------------------------------------------------------------------------------------------------------
// Script Methods and Events for RootObject (Object)
// -------------------------------------------------------------------------------------------------------------------------------------

scriptVar RootObject_ScriptMethods::getClassName(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
  SCRIPT_FUNCTION_INIT; 
  return MAKE_SCRIPT_STRING(o->vcpu_getClassName());
} 

scriptVar RootObject_ScriptMethods::onNotify(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s, scriptVar s2, scriptVar i1, scriptVar i2) {
  SCRIPT_FUNCTION_INIT
  PROCESS_HOOKS4(o, rootScriptObjectController, s, s2, i1, i2);
  SCRIPT_FUNCTION_CHECKABORTEVENT;
  SCRIPT_EXEC_EVENT4(o, s, s2, i1, i2);
}

scriptVar RootObject_ScriptMethods::notify(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s, scriptVar s2, scriptVar i1, scriptVar i2) {
  SCRIPT_FUNCTION_INIT
  RootObject *ro = static_cast<RootObject*>(o->vcpu_getInterface(rootObjectGuid));
  if (ro) ro->rootobject_notify(GET_SCRIPT_STRING(s), GET_SCRIPT_STRING(s2), GET_SCRIPT_INT(i1), GET_SCRIPT_INT(i2));
  RETURN_SCRIPT_VOID;
}