Skip to content

Commit e8b9902

Browse files
committed
Update joystick/gamepad support, yet unfinished.
1 parent 6c872b8 commit e8b9902

File tree

2 files changed

+61
-17
lines changed

2 files changed

+61
-17
lines changed

src/app.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ bool init_app(SDL_Renderer** renderer, SDL_Window* window)
2020
SDL_SetLogPriorities(SDL_LOG_PRIORITY_INFO);
2121
SDL_SetAppMetadata("Pico-8", "1.0", "com.open8.ngagesdk");
2222

23+
#ifdef __SYMBIAN32__
2324
if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO))
25+
#else
26+
if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK))
27+
#endif
2428
{
2529
SDL_Log("Couldn't initialize SDL: %s", SDL_GetError());
2630
return false;

src/core.c

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,32 @@ bool handle_events(SDL_Renderer* renderer, SDL_Event* event)
538538
{
539539
return false;
540540
}
541-
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
541+
#ifndef __SYMBIAN32__
542+
case SDL_EVENT_JOYSTICK_ADDED:
543+
{
544+
const SDL_JoystickID which = event->jdevice.which;
545+
SDL_Joystick *joystick = SDL_OpenJoystick(which);
546+
if (!joystick)
547+
{
548+
SDL_Log("Joystick #%u could not be opened: %s", (unsigned int)which, SDL_GetError());
549+
}
550+
else
551+
{
552+
SDL_Log("Joystick #%u connected: %s", (unsigned int)which, SDL_GetJoystickName(joystick));
553+
}
554+
return true;
555+
}
556+
case SDL_EVENT_JOYSTICK_REMOVED:
557+
{
558+
const SDL_JoystickID which = event->jdevice.which;
559+
SDL_Joystick* joystick = SDL_GetJoystickFromID(which);
560+
if (joystick)
561+
{
562+
SDL_CloseJoystick(joystick); /* the joystick was unplugged. */
563+
}
564+
return true;
565+
}
566+
#endif
542567
case SDL_EVENT_KEY_DOWN:
543568
{
544569
if (state == STATE_MENU)
@@ -571,20 +596,6 @@ bool handle_events(SDL_Renderer* renderer, SDL_Event* event)
571596
case SDLK_HASH: // Show FPS on the N-Gage.
572597
render_cartridge(renderer);
573598
}
574-
switch (event->button.button)
575-
{
576-
case SDL_BUTTON_LEFT:
577-
select_prev_cartridge(renderer);
578-
render_cartridge(renderer);
579-
return true;
580-
case SDL_BUTTON_RIGHT:
581-
select_next_cartridge(renderer);
582-
render_cartridge(renderer);
583-
return true;
584-
case SDL_BUTTON_X1:
585-
run_cartridge(renderer);
586-
return true;
587-
}
588599
}
589600
else if (state == STATE_EMULATOR)
590601
{
@@ -601,9 +612,37 @@ bool handle_events(SDL_Renderer* renderer, SDL_Event* event)
601612
state = STATE_MENU;
602613
return true;
603614
}
604-
switch (event->button.button)
615+
}
616+
break;
617+
}
618+
#ifndef __SYMBIAN32__
619+
case SDL_EVENT_JOYSTICK_BUTTON_DOWN:
620+
{
621+
const SDL_JoystickID which = event->jbutton.which;
622+
SDL_Log("Joystick #%u button %d -> %s", (unsigned int)which, (int)event->jbutton.button, event->jbutton.down ? "PRESSED" : "RELEASED");
623+
624+
if (state == STATE_MENU)
625+
{
626+
switch (event->jbutton.button)
605627
{
606-
case SDL_BUTTON_X2:
628+
case 4:
629+
select_prev_cartridge(renderer);
630+
render_cartridge(renderer);
631+
return true;
632+
case 5:
633+
select_next_cartridge(renderer);
634+
render_cartridge(renderer);
635+
return true;
636+
case 0:
637+
run_cartridge(renderer);
638+
return true;
639+
}
640+
}
641+
else if (state == STATE_EMULATOR)
642+
{
643+
switch (event->jbutton.button)
644+
{
645+
case 1:
607646
destroy_vm();
608647
init_vm(renderer);
609648
reset_memory();
@@ -613,6 +652,7 @@ bool handle_events(SDL_Renderer* renderer, SDL_Event* event)
613652
}
614653
break;
615654
}
655+
#endif
616656
}
617657
return true;
618658
}

0 commit comments

Comments
 (0)