Adding event callback handling. Crash with animations exists (must stop animation too)

This commit is contained in:
emb
2015-11-18 23:06:02 -06:00
parent 48e27d8d8c
commit c7ed391e87
5 changed files with 19 additions and 18 deletions

View File

@@ -98,9 +98,11 @@ set(RETROFE_HEADERS
"${RETROFE_DIR}/Source/Graphics/Component/ComponentFactory.h" "${RETROFE_DIR}/Source/Graphics/Component/ComponentFactory.h"
"${RETROFE_DIR}/Source/Lua/Lua.h" "${RETROFE_DIR}/Source/Lua/Lua.h"
"${RETROFE_DIR}/Source/Lua/LuaDisplay.h" "${RETROFE_DIR}/Source/Lua/LuaDisplay.h"
"${RETROFE_DIR}/Source/Lua/LuaEvent.h"
"${RETROFE_DIR}/Source/Lua/LuaImage.h" "${RETROFE_DIR}/Source/Lua/LuaImage.h"
"${RETROFE_DIR}/Source/Lua/LuaLog.h" "${RETROFE_DIR}/Source/Lua/LuaLog.h"
"${RETROFE_DIR}/Source/RetroFE.h" "${RETROFE_DIR}/Source/RetroFE.h"
"${RETROFE_DIR}/Source/StateMachine.h"
"${RETROFE_DIR}/Source/SDL.h" "${RETROFE_DIR}/Source/SDL.h"
"${RETROFE_DIR}/Source/Version.h" "${RETROFE_DIR}/Source/Version.h"
) )
@@ -115,9 +117,11 @@ set(RETROFE_SOURCES
"${RETROFE_DIR}/Source/Lua/Lua.cpp" "${RETROFE_DIR}/Source/Lua/Lua.cpp"
"${RETROFE_DIR}/Source/Lua/LuaDisplay.cpp" "${RETROFE_DIR}/Source/Lua/LuaDisplay.cpp"
"${RETROFE_DIR}/Source/Lua/LuaImage.cpp" "${RETROFE_DIR}/Source/Lua/LuaImage.cpp"
"${RETROFE_DIR}/Source/Lua/LuaEvent.cpp"
"${RETROFE_DIR}/Source/Lua/LuaLog.cpp" "${RETROFE_DIR}/Source/Lua/LuaLog.cpp"
"${RETROFE_DIR}/Source/Main.cpp" "${RETROFE_DIR}/Source/Main.cpp"
"${RETROFE_DIR}/Source/RetroFE.cpp" "${RETROFE_DIR}/Source/RetroFE.cpp"
"${RETROFE_DIR}/Source/StateMachine.cpp"
"${RETROFE_DIR}/Source/SDL.cpp" "${RETROFE_DIR}/Source/SDL.cpp"
"${RETROFE_DIR}/Source/Version.cpp" "${RETROFE_DIR}/Source/Version.cpp"
) )

View File

@@ -1,11 +1,11 @@
#include "LuaEvents.h" #include "LuaEvent.h"
void LuaEvents::registerOnInit(std::string functionName) void LuaEvent::registerOnInit(std::string functionName)
{ {
onInit_.push_back(functionName); onInit_.push_back(functionName);
} }
void LuaEvents::triggerOnInit(lua_State *l) void LuaEvent::triggerOnInit(lua_State *l)
{ {
for(unsigned int i = 0; i < onInit_.size(); ++i) { for(unsigned int i = 0; i < onInit_.size(); ++i) {
lua_getglobal(l, onInit_[i].c_str()); lua_getglobal(l, onInit_[i].c_str());

View File

@@ -1,12 +0,0 @@
#pragma once
#include "Lua.h"
#include <string>
#include <vector>
class LuaEvents {
public:
void registerOnInit(std::string functionName);
void triggerOnInit(lua_State *l);
private:
std::vector<std::string> onInit_;
};

View File

@@ -15,6 +15,7 @@
*/ */
#include "RetroFE.h" #include "RetroFE.h"
#include "StateMachine.h"
#include "Utility/Log.h" #include "Utility/Log.h"
#include "Utility/Utils.h" #include "Utility/Utils.h"
#include "SDL.h" #include "SDL.h"
@@ -23,6 +24,7 @@
#include "Lua/LuaDisplay.h" #include "Lua/LuaDisplay.h"
#include "Lua/LuaImage.h" #include "Lua/LuaImage.h"
#include "Lua/LuaLog.h" #include "Lua/LuaLog.h"
#include "Lua/LuaEvent.h"
#include <vector> #include <vector>
#ifdef __linux #ifdef __linux
@@ -73,9 +75,7 @@ const luaL_Reg RetroFE::luaImageFuncs[] = {
{"setAlpha", LuaImage::setAlpha}, {"setAlpha", LuaImage::setAlpha},
{"addAnimation", LuaImage::addAnimation}, {"addAnimation", LuaImage::addAnimation},
{"animate", LuaImage::animate}, {"animate", LuaImage::animate},
#if 0 {"destroy", LuaImage::destroy},
{"delete", lua_imageDelete},
#endif
{NULL, NULL} {NULL, NULL}
}; };
@@ -121,6 +121,9 @@ void RetroFE::reloadLuaScripts()
std::string path = config_.absolutePath + "/layouts/LUATest/Page.lua"; std::string path = config_.absolutePath + "/layouts/LUATest/Page.lua";
luaL_loadfile(lua_.state, path.c_str()); luaL_loadfile(lua_.state, path.c_str());
lua_pcall(lua_.state, 0, LUA_MULTRET, 0); lua_pcall(lua_.state, 0, LUA_MULTRET, 0);
luaEvent_.registerCallback("onInitEnter", "onInitEnter", "onInitEnterComplete");
luaEvent_.registerCallback("onInitExit", "onInitExit", "onInitExitComplete");
} }
RetroFE::RetroFE(Configuration &c) RetroFE::RetroFE(Configuration &c)
@@ -139,6 +142,7 @@ void RetroFE::run()
if(!SDL::initialize(config_)) return; if(!SDL::initialize(config_)) return;
initializeLua(); initializeLua();
StateMachine state(lua_.state, &luaEvent_);
reloadLuaScripts(); reloadLuaScripts();
// events.triggerOnInit(lua_.state); // events.triggerOnInit(lua_.state);
@@ -148,6 +152,7 @@ void RetroFE::run()
double deltaTime = 0; double deltaTime = 0;
while(!quit) { while(!quit) {
lastTime = currentTime; lastTime = currentTime;
currentTime = static_cast<float>(SDL_GetTicks()) / 1000; currentTime = static_cast<float>(SDL_GetTicks()) / 1000;
@@ -163,6 +168,8 @@ void RetroFE::run()
deltaTime = currentTime - lastTime; deltaTime = currentTime - lastTime;
state.update((float)deltaTime);
SDL_LockMutex(SDL::getMutex()); SDL_LockMutex(SDL::getMutex());
SDL_SetRenderDrawColor(SDL::getRenderer(), 0x0, 0x0, 0x00, 0xFF); SDL_SetRenderDrawColor(SDL::getRenderer(), 0x0, 0x0, 0x00, 0xFF);
SDL_RenderClear(SDL::getRenderer()); SDL_RenderClear(SDL::getRenderer());

View File

@@ -16,6 +16,7 @@
#pragma once #pragma once
#include "Lua/Lua.h" #include "Lua/Lua.h"
#include "Lua/LuaEvent.h"
#include "Database/Configuration.h" #include "Database/Configuration.h"
#include "Graphics/Component/ComponentFactory.h" #include "Graphics/Component/ComponentFactory.h"
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
@@ -33,6 +34,7 @@ private:
ComponentFactory factory_; ComponentFactory factory_;
Configuration &config_; Configuration &config_;
Lua lua_; Lua lua_;
LuaEvent luaEvent_;
static const luaL_Reg luaDisplayFuncs[]; static const luaL_Reg luaDisplayFuncs[];
static const luaL_Reg luaLogFuncs[]; static const luaL_Reg luaLogFuncs[];
static const luaL_Reg luaImageFuncs[]; static const luaL_Reg luaImageFuncs[];