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/CollectionInfoBuilder.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/DB.h"
"${RETROFE_DIR}/Source/Database/Metadata.h"
@@ -123,6 +130,12 @@ set(RETROFE_SOURCES
"${RETROFE_DIR}/Source/Collection/CollectionInfo.cpp"
"${RETROFE_DIR}/Source/Collection/CollectionInfoBuilder.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/DB.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 retval = true;
bool retval = false;
lua_getglobal(l, type.c_str());
if(lua_pcall(l, 0, 1, 0) == 0)
{
if(lua_isboolean(l, -1))
{
if(!lua_toboolean(l, -1))
if(lua_toboolean(l, -1))
{
retval = false;
retval = true;
}
}
lua_pop(l, 1);

View File

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

View File

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

View File

@@ -1,14 +1,18 @@
#include "StateMachine.h"
StateMachine::StateMachine(lua_State *l, LuaEvent *e)
StateMachine::StateMachine(lua_State *l, LuaEvent *e, UserInput *i)
: luaState_(l)
, luaEvent_(e)
, input_(i)
, 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_) {
case ON_STARTUP_ENTER:
luaEvent_->trigger(luaState_, "startuponEnter");
@@ -16,7 +20,6 @@ void StateMachine::update(float dt)
break;
case ON_STARTUP_UPDATE:
//todo: only do it if the main system is not busy
luaEvent_->trigger(luaState_, "startuponUpdate");
if(!luaEvent_->isBusy(luaState_, "startupisBusy")) {
@@ -34,5 +37,55 @@ void StateMachine::update(float dt)
state_ = ON_IDLE_ENTER;
}
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/LuaEvent.h"
#include "Control/UserInput.h"
class StateMachine
{
public:
StateMachine(lua_State *l, LuaEvent *e);
StateMachine(lua_State *l, LuaEvent *e, UserInput *i);
void initialize();
void update(float dt);
void update(float dt, SDL_Event *e);
private:
lua_State *luaState_;
LuaEvent *luaEvent_;
UserInput *input_;
enum {
ON_STARTUP_ENTER,
@@ -25,7 +27,16 @@ private:
ON_COLLECTION_EXIT,
ON_COLLECTION_EXIT_WAIT,
ON_STARTUP_EXIT_DONE,
ON_IDLE_ENTER
} state_;
ON_IDLE_ENTER,
ON_IDLE_UPDATE,
ON_IDLE_EXIT,
ON_IDLE_EXIT_WAIT,
ON_SCROLL_ENTER,
ON_SCROLL_UPDATE,
ON_SCROLL_EXIT,
ON_SCROLL_EXIT_WAIT
} state_, nextState_;
};