Support user input (partially)

This commit is contained in:
emb
2015-11-26 22:05:16 -06:00
parent c84c02f55d
commit 1666359218
6 changed files with 110 additions and 18 deletions

View File

@@ -94,6 +94,13 @@ set(RETROFE_HEADERS
"${RETROFE_DIR}/Source/Collection/CollectionInfo.h" "${RETROFE_DIR}/Source/Collection/CollectionInfo.h"
"${RETROFE_DIR}/Source/Collection/CollectionInfoBuilder.h" "${RETROFE_DIR}/Source/Collection/CollectionInfoBuilder.h"
"${RETROFE_DIR}/Source/Collection/Item.h" "${RETROFE_DIR}/Source/Collection/Item.h"
"${RETROFE_DIR}/Source/Control/InputHandler.h"
"${RETROFE_DIR}/Source/Control/JoyAxisHandler.h"
"${RETROFE_DIR}/Source/Control/JoyButtonHandler.h"
"${RETROFE_DIR}/Source/Control/JoyHatHandler.h"
"${RETROFE_DIR}/Source/Control/KeyboardHandler.h"
"${RETROFE_DIR}/Source/Control/MouseButtonHandler.h"
"${RETROFE_DIR}/Source/Control/UserInput.h"
"${RETROFE_DIR}/Source/Database/Configuration.h" "${RETROFE_DIR}/Source/Database/Configuration.h"
"${RETROFE_DIR}/Source/Database/DB.h" "${RETROFE_DIR}/Source/Database/DB.h"
"${RETROFE_DIR}/Source/Database/Metadata.h" "${RETROFE_DIR}/Source/Database/Metadata.h"
@@ -123,6 +130,12 @@ set(RETROFE_SOURCES
"${RETROFE_DIR}/Source/Collection/CollectionInfo.cpp" "${RETROFE_DIR}/Source/Collection/CollectionInfo.cpp"
"${RETROFE_DIR}/Source/Collection/CollectionInfoBuilder.cpp" "${RETROFE_DIR}/Source/Collection/CollectionInfoBuilder.cpp"
"${RETROFE_DIR}/Source/Collection/Item.cpp" "${RETROFE_DIR}/Source/Collection/Item.cpp"
"${RETROFE_DIR}/Source/Control/JoyAxisHandler.cpp"
"${RETROFE_DIR}/Source/Control/JoyButtonHandler.cpp"
"${RETROFE_DIR}/Source/Control/JoyHatHandler.cpp"
"${RETROFE_DIR}/Source/Control/KeyboardHandler.cpp"
"${RETROFE_DIR}/Source/Control/MouseButtonHandler.cpp"
"${RETROFE_DIR}/Source/Control/UserInput.cpp"
"${RETROFE_DIR}/Source/Database/Configuration.cpp" "${RETROFE_DIR}/Source/Database/Configuration.cpp"
"${RETROFE_DIR}/Source/Database/DB.cpp" "${RETROFE_DIR}/Source/Database/DB.cpp"
"${RETROFE_DIR}/Source/Database/MetadataDatabase.cpp" "${RETROFE_DIR}/Source/Database/MetadataDatabase.cpp"

View File

@@ -19,15 +19,15 @@ void LuaEvent::trigger(lua_State *l, std::string type, void *value)
bool LuaEvent::isBusy(lua_State *l, std::string type) bool LuaEvent::isBusy(lua_State *l, std::string type)
{ {
bool retval = true; bool retval = false;
lua_getglobal(l, type.c_str()); lua_getglobal(l, type.c_str());
if(lua_pcall(l, 0, 1, 0) == 0) if(lua_pcall(l, 0, 1, 0) == 0)
{ {
if(lua_isboolean(l, -1)) if(lua_isboolean(l, -1))
{ {
if(!lua_toboolean(l, -1)) if(lua_toboolean(l, -1))
{ {
retval = false; retval = true;
} }
} }
lua_pop(l, 1); lua_pop(l, 1);

View File

@@ -15,10 +15,8 @@
*/ */
#include "RetroFE.h" #include "RetroFE.h"
#include "StateMachine.h"
#include "Utility/Log.h"
#include "Utility/Utils.h"
#include "SDL.h" #include "SDL.h"
#include "StateMachine.h"
#include "Graphics/Component/Image.h" #include "Graphics/Component/Image.h"
#include "Graphics/Component/Component.h" #include "Graphics/Component/Component.h"
#include "Lua/LuaAnimate.h" #include "Lua/LuaAnimate.h"
@@ -27,6 +25,8 @@
#include "Lua/LuaImage.h" #include "Lua/LuaImage.h"
#include "Lua/LuaLog.h" #include "Lua/LuaLog.h"
#include "Lua/LuaEvent.h" #include "Lua/LuaEvent.h"
#include "Utility/Log.h"
#include "Utility/Utils.h"
#include <vector> #include <vector>
#ifdef __linux #ifdef __linux
@@ -157,6 +157,7 @@ RetroFE::RetroFE(Configuration &c)
, db_(c.absolutePath + "/meta.db") , db_(c.absolutePath + "/meta.db")
, mdb_(NULL) , mdb_(NULL)
, cib_(NULL) , cib_(NULL)
, input_(c)
{ {
} }
@@ -171,13 +172,13 @@ RetroFE::~RetroFE()
void RetroFE::run() void RetroFE::run()
{ {
if(!SDL::initialize(config_)) return; if(!SDL::initialize(config_)) return;
input_.initialize();
db_.initialize(); db_.initialize();
mdb_ = new MetadataDatabase(db_, config_); mdb_ = new MetadataDatabase(db_, config_);
cib_ = new CollectionInfoBuilder(config_, *mdb_); cib_ = new CollectionInfoBuilder(config_, *mdb_);
mdb_->initialize(); mdb_->initialize();
initializeLua(); initializeLua();
StateMachine state(lua_.state, &luaEvent_); StateMachine state(lua_.state, &luaEvent_, &input_);
reloadLuaScripts(); reloadLuaScripts();
// events.triggerOnInit(lua_.state); // events.triggerOnInit(lua_.state);
@@ -185,7 +186,18 @@ void RetroFE::run()
double currentTime = 0; double currentTime = 0;
double lastTime = 0; double lastTime = 0;
double deltaTime = 0; double deltaTime = 0;
while(!quit) { while(!quit) {
SDL_Event e;
if (SDL_PollEvent(&e))
{
// if(input_.update(e))
// {
// attract_.reset();
// }
}
lastTime = currentTime; lastTime = currentTime;
@@ -205,7 +217,7 @@ void RetroFE::run()
LuaCollection::update(lua_.state); LuaCollection::update(lua_.state);
state.update((float)deltaTime); state.update((float)deltaTime, &e);
SDL_LockMutex(SDL::getMutex()); SDL_LockMutex(SDL::getMutex());
SDL_SetRenderDrawColor(SDL::getRenderer(), 0x0, 0x0, 0x00, 0xFF); SDL_SetRenderDrawColor(SDL::getRenderer(), 0x0, 0x0, 0x00, 0xFF);

View File

@@ -16,12 +16,14 @@
#pragma once #pragma once
#include "Graphics/Animate/AnimationManager.h" #include "Graphics/Animate/AnimationManager.h"
#include "Collection/CollectionInfoBuilder.h" #include "Collection/CollectionInfoBuilder.h"
#include "Database/DB.h" #include "Database/DB.h"
#include "Database/Configuration.h" #include "Database/Configuration.h"
#include "Database/MetadataDatabase.h" #include "Database/MetadataDatabase.h"
#include "Graphics/Component/ComponentFactory.h"
#include "Lua/Lua.h" #include "Lua/Lua.h"
#include "Lua/LuaEvent.h" #include "Lua/LuaEvent.h"
#include "Graphics/Component/ComponentFactory.h" #include "Control/UserInput.h"
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <vector> #include <vector>
@@ -47,4 +49,5 @@ private:
DB db_; DB db_;
MetadataDatabase *mdb_; MetadataDatabase *mdb_;
CollectionInfoBuilder *cib_; CollectionInfoBuilder *cib_;
UserInput input_;
}; };

View File

@@ -1,14 +1,18 @@
#include "StateMachine.h" #include "StateMachine.h"
StateMachine::StateMachine(lua_State *l, LuaEvent *e) StateMachine::StateMachine(lua_State *l, LuaEvent *e, UserInput *i)
: luaState_(l) : luaState_(l)
, luaEvent_(e) , luaEvent_(e)
, input_(i)
, state_(ON_STARTUP_ENTER) , state_(ON_STARTUP_ENTER)
, nextState_(ON_IDLE_ENTER)
{ {
} }
void StateMachine::update(float dt) void StateMachine::update(float dt, SDL_Event *e)
{ {
input_->update(*e);
switch(state_) { switch(state_) {
case ON_STARTUP_ENTER: case ON_STARTUP_ENTER:
luaEvent_->trigger(luaState_, "startuponEnter"); luaEvent_->trigger(luaState_, "startuponEnter");
@@ -16,7 +20,6 @@ void StateMachine::update(float dt)
break; break;
case ON_STARTUP_UPDATE: case ON_STARTUP_UPDATE:
//todo: only do it if the main system is not busy
luaEvent_->trigger(luaState_, "startuponUpdate"); luaEvent_->trigger(luaState_, "startuponUpdate");
if(!luaEvent_->isBusy(luaState_, "startupisBusy")) { if(!luaEvent_->isBusy(luaState_, "startupisBusy")) {
@@ -34,5 +37,55 @@ void StateMachine::update(float dt)
state_ = ON_IDLE_ENTER; state_ = ON_IDLE_ENTER;
} }
break; break;
case ON_IDLE_ENTER:
luaEvent_->trigger(luaState_, "idleEnter");
state_ = ON_IDLE_UPDATE;
break;
case ON_IDLE_UPDATE:
luaEvent_->trigger(luaState_, "idleUpdate");
if(!luaEvent_->isBusy(luaState_, "idleisBusy")) {
if(input_->keystate(UserInput::KeyCodeUp)) {
state_ = ON_IDLE_EXIT;
nextState_ = ON_SCROLL_ENTER;
}
}
break;
case ON_IDLE_EXIT:
luaEvent_->trigger(luaState_, "idleExit");
state_ = ON_IDLE_EXIT_WAIT;
break;
case ON_IDLE_EXIT_WAIT:
if(!luaEvent_->isBusy(luaState_, "idleisBusy")) {
state_ = nextState_;
}
break;
case ON_SCROLL_ENTER:
luaEvent_->trigger(luaState_, "scrollonEnter");
state_ = ON_SCROLL_UPDATE;
break;
case ON_SCROLL_UPDATE:
luaEvent_->trigger(luaState_, "scrollUpdate");
if(!luaEvent_->isBusy(luaState_, "scrollisBusy")) {
state_ = ON_SCROLL_EXIT;
}
break;
case ON_SCROLL_EXIT:
luaEvent_->trigger(luaState_, "scrollonExit");
state_ = ON_SCROLL_EXIT_WAIT;
break;
case ON_SCROLL_EXIT_WAIT:
if(!luaEvent_->isBusy(luaState_, "scrollisBusy")) {
state_ = ON_IDLE_ENTER;
}
break;
} }
} }

View File

@@ -2,17 +2,19 @@
#include "Lua/Lua.h" #include "Lua/Lua.h"
#include "Lua/LuaEvent.h" #include "Lua/LuaEvent.h"
#include "Control/UserInput.h"
class StateMachine class StateMachine
{ {
public: public:
StateMachine(lua_State *l, LuaEvent *e); StateMachine(lua_State *l, LuaEvent *e, UserInput *i);
void initialize(); void initialize();
void update(float dt); void update(float dt, SDL_Event *e);
private: private:
lua_State *luaState_; lua_State *luaState_;
LuaEvent *luaEvent_; LuaEvent *luaEvent_;
UserInput *input_;
enum { enum {
ON_STARTUP_ENTER, ON_STARTUP_ENTER,
@@ -25,7 +27,16 @@ private:
ON_COLLECTION_EXIT, ON_COLLECTION_EXIT,
ON_COLLECTION_EXIT_WAIT, ON_COLLECTION_EXIT_WAIT,
ON_STARTUP_EXIT_DONE, ON_IDLE_ENTER,
ON_IDLE_ENTER ON_IDLE_UPDATE,
} state_; ON_IDLE_EXIT,
ON_IDLE_EXIT_WAIT,
ON_SCROLL_ENTER,
ON_SCROLL_UPDATE,
ON_SCROLL_EXIT,
ON_SCROLL_EXIT_WAIT
} state_, nextState_;
}; };