aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sword25/gfx/graphicengine.cpp1
-rw-r--r--engines/sword25/gfx/graphicengine.h1
-rw-r--r--engines/sword25/gfx/graphicengine_script.cpp19
-rw-r--r--engines/sword25/input/inputengine.cpp4
-rw-r--r--engines/sword25/input/inputengine.h3
-rw-r--r--engines/sword25/input/inputengine_script.cpp21
6 files changed, 40 insertions, 9 deletions
diff --git a/engines/sword25/gfx/graphicengine.cpp b/engines/sword25/gfx/graphicengine.cpp
index 37499cc14d..54aa243cd8 100644
--- a/engines/sword25/gfx/graphicengine.cpp
+++ b/engines/sword25/gfx/graphicengine.cpp
@@ -85,6 +85,7 @@ GraphicEngine::GraphicEngine(Kernel *pKernel) :
}
GraphicEngine::~GraphicEngine() {
+ unregisterScriptBindings();
_backSurface.free();
_frameBuffer.free();
delete _thumbnail;
diff --git a/engines/sword25/gfx/graphicengine.h b/engines/sword25/gfx/graphicengine.h
index 5820a8d420..26eeaa2e22 100644
--- a/engines/sword25/gfx/graphicengine.h
+++ b/engines/sword25/gfx/graphicengine.h
@@ -363,6 +363,7 @@ protected:
private:
bool registerScriptBindings();
+ void unregisterScriptBindings();
// LastFrameDuration Variables
// ---------------------------
diff --git a/engines/sword25/gfx/graphicengine_script.cpp b/engines/sword25/gfx/graphicengine_script.cpp
index 956c0352f0..fa97b80c82 100644
--- a/engines/sword25/gfx/graphicengine_script.cpp
+++ b/engines/sword25/gfx/graphicengine_script.cpp
@@ -71,8 +71,8 @@ protected:
}
};
-Common::ScopedPtr<LuaCallback> loopPointCallbackPtr;
-Common::ScopedPtr<ActionCallback> actionCallbackPtr;
+static LuaCallback *loopPointCallbackPtr = 0; // FIXME: should be turned into GraphicEngine member var
+static ActionCallback *actionCallbackPtr = 0; // FIXME: should be turned into GraphicEngine member var
struct CallbackfunctionRegisterer {
CallbackfunctionRegisterer() {
@@ -1289,10 +1289,21 @@ bool GraphicEngine::registerScriptBindings() {
if (!LuaBindhelper::addFunctionsToLib(L, GFX_LIBRARY_NAME, GFX_FUNCTIONS)) return false;
- loopPointCallbackPtr.reset(new LuaCallback(L));
- actionCallbackPtr.reset(new ActionCallback(L));
+ assert(loopPointCallbackPtr == 0);
+ loopPointCallbackPtr = new LuaCallback(L);
+
+ assert(actionCallbackPtr == 0);
+ actionCallbackPtr = new ActionCallback(L);
return true;
}
+void GraphicEngine::unregisterScriptBindings() {
+ delete loopPointCallbackPtr;
+ loopPointCallbackPtr = 0;
+
+ delete actionCallbackPtr;
+ actionCallbackPtr = 0;
+}
+
} // End of namespace Sword25
diff --git a/engines/sword25/input/inputengine.cpp b/engines/sword25/input/inputengine.cpp
index 181e13b7ff..425e46431c 100644
--- a/engines/sword25/input/inputengine.cpp
+++ b/engines/sword25/input/inputengine.cpp
@@ -76,6 +76,10 @@ InputEngine::InputEngine(Kernel *pKernel) :
BS_LOGLN("Script bindings registered.");
}
+InputEngine::~InputEngine() {
+ unregisterScriptBindings();
+}
+
Service *InputEngine_CreateObject(Kernel *pKernel) {
return new InputEngine(pKernel);
}
diff --git a/engines/sword25/input/inputengine.h b/engines/sword25/input/inputengine.h
index 07e56928cb..20bea21a72 100644
--- a/engines/sword25/input/inputengine.h
+++ b/engines/sword25/input/inputengine.h
@@ -57,7 +57,7 @@ namespace Sword25 {
class InputEngine : public Service, public Persistable {
public:
InputEngine(Kernel *pKernel);
- ~InputEngine() {}
+ ~InputEngine();
// NOTE: These codes are registered in inputengine_script.cpp
// Any changes to these enums must also adjust the above file.
@@ -303,6 +303,7 @@ public:
private:
bool registerScriptBindings();
+ void unregisterScriptBindings();
private:
void testForLeftDoubleClick();
diff --git a/engines/sword25/input/inputengine_script.cpp b/engines/sword25/input/inputengine_script.cpp
index 303f0e69e1..0ada7ece5c 100644
--- a/engines/sword25/input/inputengine_script.cpp
+++ b/engines/sword25/input/inputengine_script.cpp
@@ -63,7 +63,8 @@ protected:
return 1;
}
};
-Common::SharedPtr<CharacterCallbackClass> characterCallbackPtr;
+
+static CharacterCallbackClass *characterCallbackPtr = 0; // FIXME: should be turned into InputEngine member var
class CommandCallbackClass : public LuaCallback {
public:
@@ -79,7 +80,8 @@ protected:
return 1;
}
};
-Common::SharedPtr<CommandCallbackClass> commandCallbackPtr;
+
+static CommandCallbackClass *commandCallbackPtr = 0; // FIXME: should be turned into InputEngine member var
struct CallbackfunctionRegisterer {
CallbackfunctionRegisterer() {
@@ -290,10 +292,21 @@ bool InputEngine::registerScriptBindings() {
if (!LuaBindhelper::addFunctionsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_FUNCTIONS)) return false;
if (!LuaBindhelper::addConstantsToLib(L, PACKAGE_LIBRARY_NAME, PACKAGE_CONSTANTS)) return false;
- characterCallbackPtr = Common::SharedPtr<CharacterCallbackClass>(new CharacterCallbackClass(L));
- commandCallbackPtr = Common::SharedPtr<CommandCallbackClass>(new CommandCallbackClass(L));
+ assert(characterCallbackPtr == 0);
+ characterCallbackPtr = new CharacterCallbackClass(L);
+
+ assert(commandCallbackPtr == 0);
+ commandCallbackPtr = new CommandCallbackClass(L);
return true;
}
+void InputEngine::unregisterScriptBindings() {
+ delete characterCallbackPtr;
+ characterCallbackPtr = 0;
+
+ delete commandCallbackPtr;
+ commandCallbackPtr = 0;
+}
+
} // End of namespace Sword25