mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-22 11:29:24 +01:00
Better handling of joysticks for the menus and an unused network fsm
This commit is contained in:
parent
968d5caef7
commit
c326c552e1
@ -161,9 +161,9 @@ private:
|
||||
void c64_dtor(void);
|
||||
void open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2);
|
||||
uint8 poll_joystick(int port);
|
||||
uint8 poll_joystick_axes(int port);
|
||||
uint8 poll_joystick_hats(int port);
|
||||
uint8 poll_joystick_buttons(int port);
|
||||
uint8 poll_joystick_axes(int port, bool *has_event);
|
||||
uint8 poll_joystick_hats(int port, bool *has_event);
|
||||
uint8 poll_joystick_buttons(int port, bool *has_event);
|
||||
void thread_func(void);
|
||||
|
||||
bool thread_running; // Emulation thread is running
|
||||
|
@ -778,7 +778,7 @@ void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy
|
||||
}
|
||||
|
||||
/* The implementation principles are borrowed from UAE */
|
||||
uint8 C64::poll_joystick_axes(int port)
|
||||
uint8 C64::poll_joystick_axes(int port, bool *has_event)
|
||||
{
|
||||
SDL_Joystick *js = joy[port];
|
||||
unsigned int i, axes;
|
||||
@ -823,18 +823,20 @@ uint8 C64::poll_joystick_axes(int port)
|
||||
|
||||
if (axis < (*min_axis + (*max_axis - *min_axis)/3)) {
|
||||
out &= neg_val;
|
||||
Gui::gui->pushEvent(gui_neg_val);
|
||||
Gui::gui->pushJoystickEvent(gui_neg_val);
|
||||
*has_event = true;
|
||||
}
|
||||
else if (axis > (*min_axis + 2*(*max_axis - *min_axis)/3)) {
|
||||
out &= pos_val;
|
||||
Gui::gui->pushEvent(gui_pos_val);
|
||||
Gui::gui->pushJoystickEvent(gui_pos_val);
|
||||
*has_event = true;
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
uint8 C64::poll_joystick_hats(int port)
|
||||
uint8 C64::poll_joystick_hats(int port, bool *has_event)
|
||||
{
|
||||
SDL_Joystick *js = joy[port];
|
||||
unsigned int i, hats;
|
||||
@ -865,28 +867,32 @@ uint8 C64::poll_joystick_hats(int port)
|
||||
right_ev = KEY_DOWN;
|
||||
}
|
||||
|
||||
if ((v & (SDL_HAT_UP | SDL_HAT_DOWN | SDL_HAT_LEFT | SDL_HAT_RIGHT)) == 0)
|
||||
continue;
|
||||
*has_event = true;
|
||||
|
||||
if (v & SDL_HAT_UP) {
|
||||
out &= up_mask;
|
||||
Gui::gui->pushEvent(up_ev);
|
||||
Gui::gui->pushJoystickEvent(up_ev);
|
||||
}
|
||||
if (v & SDL_HAT_DOWN) {
|
||||
out &= down_mask;
|
||||
Gui::gui->pushEvent(down_ev);
|
||||
Gui::gui->pushJoystickEvent(down_ev);
|
||||
}
|
||||
if (v & SDL_HAT_LEFT) {
|
||||
out &= left_mask;
|
||||
Gui::gui->pushEvent(left_ev);
|
||||
Gui::gui->pushJoystickEvent(left_ev);
|
||||
}
|
||||
if (v & SDL_HAT_RIGHT) {
|
||||
out &= right_mask;
|
||||
Gui::gui->pushEvent(right_ev);
|
||||
Gui::gui->pushJoystickEvent(right_ev);
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
uint8 C64::poll_joystick_buttons(int port)
|
||||
uint8 C64::poll_joystick_buttons(int port, bool *has_event)
|
||||
{
|
||||
SDL_Joystick *js = joy[port];
|
||||
uint8 out = 0xff;
|
||||
@ -898,8 +904,11 @@ uint8 C64::poll_joystick_buttons(int port)
|
||||
event_t ev = (event_t)ThePrefs.MenuJoystickButtons[i];
|
||||
|
||||
this->joy_button_pressed[i] = cur;
|
||||
if (cur)
|
||||
Gui::gui->pushEvent(ev);
|
||||
if (cur && ev != EVENT_NONE)
|
||||
{
|
||||
Gui::gui->pushJoystickEvent(ev);
|
||||
*has_event = true;
|
||||
}
|
||||
|
||||
if (kc == JOY_NONE)
|
||||
continue;
|
||||
@ -916,6 +925,7 @@ uint8 C64::poll_joystick_buttons(int port)
|
||||
*/
|
||||
uint8 C64::poll_joystick(int port)
|
||||
{
|
||||
bool has_event = false;
|
||||
uint8 out = 0xff;
|
||||
|
||||
if (port == 0 && (joy[0] || joy[1]))
|
||||
@ -924,9 +934,12 @@ uint8 C64::poll_joystick(int port)
|
||||
if (!joy[port])
|
||||
return out;
|
||||
|
||||
out &= this->poll_joystick_axes(port);
|
||||
out &= this->poll_joystick_hats(port);
|
||||
out &= this->poll_joystick_buttons(port);
|
||||
out &= this->poll_joystick_axes(port, &has_event);
|
||||
out &= this->poll_joystick_hats(port, &has_event);
|
||||
out &= this->poll_joystick_buttons(port, &has_event);
|
||||
|
||||
if (!has_event)
|
||||
Gui::gui->pushJoystickEvent(EVENT_NONE);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
@ -50,6 +50,66 @@
|
||||
#define RLE_SIZE ( RAW_SIZE * 4 + 8)
|
||||
#define DIFF_SIZE ( RAW_SIZE * 4 + 8)
|
||||
|
||||
#if 0
|
||||
class ConnectionFSM : public TimeoutHandler
|
||||
{
|
||||
public:
|
||||
ConnectionFSM()
|
||||
{
|
||||
this->rese();
|
||||
}
|
||||
|
||||
void connectToPeer()
|
||||
{
|
||||
this->setState(CONNECT_TO_PEER);
|
||||
}
|
||||
|
||||
void peerConnected()
|
||||
{
|
||||
/* Reset the FSM */
|
||||
this->reset();
|
||||
}
|
||||
|
||||
void connectToBroker()
|
||||
{
|
||||
this->setState(CONNECT_TO_BROKER);
|
||||
|
||||
Gui::gui->timerController->arm(this, 4000);
|
||||
}
|
||||
|
||||
void timeoutCallback()
|
||||
{
|
||||
/* New state, everything is fine */
|
||||
if (this->last_state != this->state)
|
||||
return;
|
||||
|
||||
switch(state)
|
||||
{
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
this->state = 0;
|
||||
this->last_state = -1;
|
||||
}
|
||||
|
||||
static ConnectionFSM fsm;
|
||||
|
||||
private:
|
||||
|
||||
void setState(int state)
|
||||
{
|
||||
this->last_state = this->state;
|
||||
this->state = state;
|
||||
}
|
||||
|
||||
int state, last_state;
|
||||
};
|
||||
#endif
|
||||
|
||||
Network::Network(const char *remote_host, int port)
|
||||
{
|
||||
const size_t size = NETWORK_UPDATE_SIZE;
|
||||
|
@ -362,17 +362,29 @@ void Gui::exitMenu()
|
||||
this->saveGameInfo(this->metadata_base_path, this->cur_gameInfo->filename);
|
||||
}
|
||||
|
||||
void Gui::pushEvent(event_t ev)
|
||||
|
||||
void Gui::pushJoystickEvent(event_t ev)
|
||||
{
|
||||
GuiView *cur_view = this->peekView();
|
||||
static event_t last = EVENT_NONE;
|
||||
static Uint32 last_ticks;
|
||||
Uint32 cur_ticks;
|
||||
|
||||
if (last == ev)
|
||||
return;
|
||||
|
||||
cur_ticks = SDL_GetTicks();
|
||||
if (cur_ticks - last_ticks < 150)
|
||||
return;
|
||||
last_ticks = cur_ticks;
|
||||
|
||||
this->pushEvent(ev);
|
||||
last = ev;
|
||||
}
|
||||
|
||||
void Gui::pushEvent(event_t ev)
|
||||
{
|
||||
GuiView *cur_view = this->peekView();
|
||||
|
||||
if (ev == KEY_ENTER_MENU)
|
||||
{
|
||||
this->activate();
|
||||
|
@ -44,6 +44,8 @@ public:
|
||||
|
||||
void runLogic(void);
|
||||
|
||||
void pushJoystickEvent(event_t ev);
|
||||
|
||||
void pushEvent(event_t ev);
|
||||
|
||||
void pushEvent(SDL_Event *ev);
|
||||
|
Loading…
Reference in New Issue
Block a user