mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
doomgeneric: add env support for input selection and map esc to joystick
This commit is contained in:
@@ -100,7 +100,7 @@ new file mode 100644
|
|||||||
index 0000000..b8e0de9
|
index 0000000..b8e0de9
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ doomgeneric-workdir/doomgeneric/doomgeneric_astral.c
|
+++ doomgeneric-workdir/doomgeneric/doomgeneric_astral.c
|
||||||
@@ -0,0 +1,441 @@
|
@@ -0,0 +1,479 @@
|
||||||
+#define _GNU_SOURCE
|
+#define _GNU_SOURCE
|
||||||
+#include "doomkeys.h"
|
+#include "doomkeys.h"
|
||||||
+
|
+
|
||||||
@@ -108,6 +108,7 @@ index 0000000..b8e0de9
|
|||||||
+
|
+
|
||||||
+#include <ctype.h>
|
+#include <ctype.h>
|
||||||
+#include <stdio.h>
|
+#include <stdio.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
+#include <string.h>
|
+#include <string.h>
|
||||||
+#include <unistd.h>
|
+#include <unistd.h>
|
||||||
+#include <sys/time.h>
|
+#include <sys/time.h>
|
||||||
@@ -226,12 +227,17 @@ index 0000000..b8e0de9
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+static int open_evdev_path(const char *path)
|
||||||
|
+{
|
||||||
|
+ return open(path, O_RDONLY | O_NONBLOCK, 0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
+static int open_evdev_device(int index)
|
+static int open_evdev_device(int index)
|
||||||
+{
|
+{
|
||||||
+ char path[32];
|
+ char path[32];
|
||||||
+
|
+
|
||||||
+ snprintf(path, sizeof(path), "/dev/input/event%d", index);
|
+ snprintf(path, sizeof(path), "/dev/input/event%d", index);
|
||||||
+ return open(path, O_RDONLY | O_NONBLOCK, 0);
|
+ return open_evdev_path(path);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void init_axis(int fd, axis_state_t *axis)
|
+static void init_axis(int fd, axis_state_t *axis)
|
||||||
@@ -247,6 +253,38 @@ index 0000000..b8e0de9
|
|||||||
+
|
+
|
||||||
+static void init_evdev(void)
|
+static void init_evdev(void)
|
||||||
+{
|
+{
|
||||||
|
+ const char *keyboard_path = getenv("DOOM_KEYBOARD");
|
||||||
|
+ const char *joystick_path = getenv("DOOM_JOYSTICK");
|
||||||
|
+
|
||||||
|
+ if (keyboard_path != NULL) {
|
||||||
|
+ kbfd = open_evdev_path(keyboard_path);
|
||||||
|
+ if (kbfd == -1) {
|
||||||
|
+ printf("doomgeneric: failed to open DOOM_KEYBOARD=%s: %s\n", keyboard_path, strerror(errno));
|
||||||
|
+ exit(errno);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!is_keyboard(kbfd)) {
|
||||||
|
+ printf("doomgeneric: DOOM_KEYBOARD=%s is not a keyboard\n", keyboard_path);
|
||||||
|
+ exit(ENODEV);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (joystick_path != NULL) {
|
||||||
|
+ joyfd = open_evdev_path(joystick_path);
|
||||||
|
+ if (joyfd == -1) {
|
||||||
|
+ printf("doomgeneric: failed to open DOOM_JOYSTICK=%s: %s\n", joystick_path, strerror(errno));
|
||||||
|
+ exit(errno);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!is_joystick(joyfd)) {
|
||||||
|
+ printf("doomgeneric: DOOM_JOYSTICK=%s is not a joystick\n", joystick_path);
|
||||||
|
+ exit(ENODEV);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ init_axis(joyfd, &joystick_axes[0]);
|
||||||
|
+ init_axis(joyfd, &joystick_axes[1]);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ for (int i = 0; i < MAX_EVDEV_DEVICES; ++i) {
|
+ for (int i = 0; i < MAX_EVDEV_DEVICES; ++i) {
|
||||||
+ int fd = open_evdev_device(i);
|
+ int fd = open_evdev_device(i);
|
||||||
+ if (fd == -1)
|
+ if (fd == -1)
|
||||||
@@ -287,7 +325,7 @@ index 0000000..b8e0de9
|
|||||||
+ return KEY_RIGHTARROW;
|
+ return KEY_RIGHTARROW;
|
||||||
+ case KEY_ENTER:
|
+ case KEY_ENTER:
|
||||||
+ case KEY_KPENTER:
|
+ case KEY_KPENTER:
|
||||||
+ return KEY_ENTER;
|
+ return '\r';
|
||||||
+ case KEY_LEFTCTRL:
|
+ case KEY_LEFTCTRL:
|
||||||
+ case KEY_RIGHTCTRL:
|
+ case KEY_RIGHTCTRL:
|
||||||
+ return KEY_FIRE;
|
+ return KEY_FIRE;
|
||||||
@@ -740,11 +778,11 @@ index bf63035..2c84bcc 100644
|
|||||||
printf("I_InitGraphics: framebuffer: x_res: %d, y_res: %d, x_virtual: %d, y_virtual: %d, bpp: %d\n",
|
printf("I_InitGraphics: framebuffer: x_res: %d, y_res: %d, x_virtual: %d, y_virtual: %d, bpp: %d\n",
|
||||||
s_Fb.xres, s_Fb.yres, s_Fb.xres_virtual, s_Fb.yres_virtual, s_Fb.bits_per_pixel);
|
s_Fb.xres, s_Fb.yres, s_Fb.xres_virtual, s_Fb.yres_virtual, s_Fb.bits_per_pixel);
|
||||||
@@ -240,6 +241,7 @@ void I_StartFrame (void)
|
@@ -240,6 +241,7 @@ void I_StartFrame (void)
|
||||||
void I_StartTic (void)
|
void I_StartTic (void)
|
||||||
{
|
{
|
||||||
I_GetEvent();
|
I_GetEvent();
|
||||||
+ I_UpdateJoystick();
|
+ I_UpdateJoystick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_UpdateNoBlit (void)
|
void I_UpdateNoBlit (void)
|
||||||
@@ -325,7 +327,7 @@ void I_SetPalette (byte* palette)
|
@@ -325,7 +327,7 @@ void I_SetPalette (byte* palette)
|
||||||
@@ -755,4 +793,18 @@ index bf63035..2c84bcc 100644
|
|||||||
+
|
+
|
||||||
|
|
||||||
/* performance boost:
|
/* performance boost:
|
||||||
* map to the right pixel format over here! */
|
* map to the right pixel format over here! */
|
||||||
|
|
||||||
|
diff --git doomgeneric-clean/doomgeneric/m_controls.c doomgeneric-workdir/doomgeneric/m_controls.c
|
||||||
|
index 10e46aa..0f9d79d 100644
|
||||||
|
--- doomgeneric-clean/doomgeneric/m_controls.c
|
||||||
|
+++ doomgeneric-workdir/doomgeneric/m_controls.c
|
||||||
|
@@ -190,7 +190,7 @@ int joybjump = -1;
|
||||||
|
int joybprevweapon = -1;
|
||||||
|
int joybnextweapon = -1;
|
||||||
|
|
||||||
|
-int joybmenu = -1;
|
||||||
|
+int joybmenu = 4;
|
||||||
|
|
||||||
|
// Control whether if a mouse button is double clicked, it acts like
|
||||||
|
// "use" has been pressed
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
name=doomgeneric
|
name=doomgeneric
|
||||||
revision=2
|
revision=4
|
||||||
from_source=doomgeneric
|
from_source=doomgeneric
|
||||||
imagedeps="build-essential"
|
imagedeps="build-essential"
|
||||||
hostdeps="xgcc xbinutils"
|
hostdeps="xgcc xbinutils"
|
||||||
|
|||||||
Reference in New Issue
Block a user