From 0cc3b1a1c44b2a59c7851c36154d67270d7720e2 Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Thu, 25 May 2006 19:28:05 +0000 Subject: [PATCH] Can't rebuild wrapper on Win, so I'm checking it in... SVN-Revision: 3587 --- src/scripting/wrapper.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++ src/scripting/wrapper.hpp | 1 + 2 files changed, 137 insertions(+) diff --git a/src/scripting/wrapper.cpp b/src/scripting/wrapper.cpp index bd0935e2a..fd1f5705a 100644 --- a/src/scripting/wrapper.cpp +++ b/src/scripting/wrapper.cpp @@ -1516,6 +1516,87 @@ static SQInteger FloatingImage_get_action_wrapper(HSQUIRRELVM vm) } +static SQInteger Platform_release_hook(SQUserPointer ptr, SQInteger ) +{ + Scripting::Platform* _this = reinterpret_cast (ptr); + delete _this; + return 0; +} + +static SQInteger Platform_goto_node_wrapper(HSQUIRRELVM vm) +{ + Scripting::Platform* _this; + if(SQ_FAILED(sq_getinstanceup(vm, 1, reinterpret_cast (&_this), 0))) { + sq_throwerror(vm, _SC("'goto_node' called without instance")); + return SQ_ERROR; + } + SQInteger arg0; + if(SQ_FAILED(sq_getinteger(vm, 2, &arg0))) { + sq_throwerror(vm, _SC("Argument 1 not an integer")); + return SQ_ERROR; + } + + try { + _this->goto_node(static_cast (arg0)); + + return 0; + + } catch(std::exception& e) { + sq_throwerror(vm, e.what()); + return SQ_ERROR; + } catch(...) { + sq_throwerror(vm, _SC("Unexpected exception while executing function 'goto_node'")); + return SQ_ERROR; + } + +} + +static SQInteger Platform_start_moving_wrapper(HSQUIRRELVM vm) +{ + Scripting::Platform* _this; + if(SQ_FAILED(sq_getinstanceup(vm, 1, reinterpret_cast (&_this), 0))) { + sq_throwerror(vm, _SC("'start_moving' called without instance")); + return SQ_ERROR; + } + + try { + _this->start_moving(); + + return 0; + + } catch(std::exception& e) { + sq_throwerror(vm, e.what()); + return SQ_ERROR; + } catch(...) { + sq_throwerror(vm, _SC("Unexpected exception while executing function 'start_moving'")); + return SQ_ERROR; + } + +} + +static SQInteger Platform_stop_moving_wrapper(HSQUIRRELVM vm) +{ + Scripting::Platform* _this; + if(SQ_FAILED(sq_getinstanceup(vm, 1, reinterpret_cast (&_this), 0))) { + sq_throwerror(vm, _SC("'stop_moving' called without instance")); + return SQ_ERROR; + } + + try { + _this->stop_moving(); + + return 0; + + } catch(std::exception& e) { + sq_throwerror(vm, e.what()); + return SQ_ERROR; + } catch(...) { + sq_throwerror(vm, _SC("Unexpected exception while executing function 'stop_moving'")); + return SQ_ERROR; + } + +} + static SQInteger display_wrapper(HSQUIRRELVM vm) { return Scripting::display(vm); @@ -2269,6 +2350,32 @@ void create_squirrel_instance(HSQUIRRELVM v, Scripting::FloatingImage* object, b sq_remove(v, -2); // remove root table } +void create_squirrel_instance(HSQUIRRELVM v, Scripting::Platform* object, bool setup_releasehook) +{ + using namespace Wrapper; + + sq_pushroottable(v); + sq_pushstring(v, "Platform", -1); + if(SQ_FAILED(sq_get(v, -2))) { + std::ostringstream msg; + msg << "Couldn't resolved squirrel type 'Platform'"; + throw SquirrelError(v, msg.str()); + } + + if(SQ_FAILED(sq_createinstance(v, -1)) || SQ_FAILED(sq_setinstanceup(v, -1, object))) { + std::ostringstream msg; + msg << "Couldn't setup squirrel instance for object of type 'Platform'"; + throw SquirrelError(v, msg.str()); + } + sq_remove(v, -2); // remove object name + + if(setup_releasehook) { + sq_setreleasehook(v, -1, Platform_release_hook); + } + + sq_remove(v, -2); // remove root table +} + void register_supertux_wrapper(HSQUIRRELVM v) { using namespace Wrapper; @@ -2890,6 +2997,35 @@ void register_supertux_wrapper(HSQUIRRELVM v) throw SquirrelError(v, "Couldn't register class 'FloatingImage'"); } + // Register class Platform + sq_pushstring(v, "Platform", -1); + if(sq_newclass(v, SQFalse) < 0) { + std::ostringstream msg; + msg << "Couldn't create new class 'Platform'"; + throw SquirrelError(v, msg.str()); + } + sq_pushstring(v, "goto_node", -1); + sq_newclosure(v, &Platform_goto_node_wrapper, 0); + if(SQ_FAILED(sq_createslot(v, -3))) { + throw SquirrelError(v, "Couldn't register function 'goto_node'"); + } + + sq_pushstring(v, "start_moving", -1); + sq_newclosure(v, &Platform_start_moving_wrapper, 0); + if(SQ_FAILED(sq_createslot(v, -3))) { + throw SquirrelError(v, "Couldn't register function 'start_moving'"); + } + + sq_pushstring(v, "stop_moving", -1); + sq_newclosure(v, &Platform_stop_moving_wrapper, 0); + if(SQ_FAILED(sq_createslot(v, -3))) { + throw SquirrelError(v, "Couldn't register function 'stop_moving'"); + } + + if(SQ_FAILED(sq_createslot(v, -3))) { + throw SquirrelError(v, "Couldn't register class 'Platform'"); + } + } } // end of namespace Scripting diff --git a/src/scripting/wrapper.hpp b/src/scripting/wrapper.hpp index 8f55ffc45..897ab11a4 100644 --- a/src/scripting/wrapper.hpp +++ b/src/scripting/wrapper.hpp @@ -21,6 +21,7 @@ void create_squirrel_instance(HSQUIRRELVM v, Scripting::ScriptedObject* object, void create_squirrel_instance(HSQUIRRELVM v, Scripting::Text* object, bool setup_releasehook = false); void create_squirrel_instance(HSQUIRRELVM v, Scripting::Player* object, bool setup_releasehook = false); void create_squirrel_instance(HSQUIRRELVM v, Scripting::FloatingImage* object, bool setup_releasehook = false); +void create_squirrel_instance(HSQUIRRELVM v, Scripting::Platform* object, bool setup_releasehook = false); } -- 2.11.0