mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-04-02 02:05:55 +02:00
Support user input (partially)
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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_;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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_;
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user