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/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"
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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_;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user