add doomlib which includes doomdef.h to fill out dp_doom_event_t structures
Those dp_doom_event_t structs are doom even_t structs...
This commit is contained in:
parent
6d03cf86f9
commit
b3d54ff160
3 changed files with 151 additions and 1 deletions
|
@ -27,7 +27,7 @@ target_link_libraries(dp_common
|
|||
)
|
||||
target_include_directories(dp_common INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
add_executable(doompanning doompanning.cc)
|
||||
add_executable(doompanning doompanning.cc doomlib.cc)
|
||||
target_compile_features(doompanning PRIVATE cxx_std_17)
|
||||
target_link_libraries(doompanning
|
||||
PRIVATE dp_common
|
||||
|
|
140
src/doomlib.cc
Normal file
140
src/doomlib.cc
Normal file
|
@ -0,0 +1,140 @@
|
|||
#include "doomlib.hpp"
|
||||
#include "dp_doom/linuxdoom-1.10/doomdef.h"
|
||||
|
||||
// Taken from ib_video_sdl.c
|
||||
static int xlatekey(SDL_Keycode keysym)
|
||||
{
|
||||
int rc;
|
||||
|
||||
switch(rc = keysym)
|
||||
{
|
||||
case SDLK_LEFT: rc = KEY_LEFTARROW; break;
|
||||
case SDLK_RIGHT: rc = KEY_RIGHTARROW; break;
|
||||
case SDLK_DOWN: rc = KEY_DOWNARROW; break;
|
||||
case SDLK_UP: rc = KEY_UPARROW; break;
|
||||
case SDLK_ESCAPE: rc = KEY_ESCAPE; break;
|
||||
case SDLK_RETURN: rc = KEY_ENTER; break;
|
||||
case SDLK_TAB: rc = KEY_TAB; break;
|
||||
case SDLK_F1: rc = KEY_F1; break;
|
||||
case SDLK_F2: rc = KEY_F2; break;
|
||||
case SDLK_F3: rc = KEY_F3; break;
|
||||
case SDLK_F4: rc = KEY_F4; break;
|
||||
case SDLK_F5: rc = KEY_F5; break;
|
||||
case SDLK_F6: rc = KEY_F6; break;
|
||||
case SDLK_F7: rc = KEY_F7; break;
|
||||
case SDLK_F8: rc = KEY_F8; break;
|
||||
case SDLK_F9: rc = KEY_F9; break;
|
||||
case SDLK_F10: rc = KEY_F10; break;
|
||||
case SDLK_F11: rc = KEY_F11; break;
|
||||
case SDLK_F12: rc = KEY_F12; break;
|
||||
|
||||
case SDLK_BACKSPACE:
|
||||
case SDLK_DELETE: rc = KEY_BACKSPACE; break;
|
||||
|
||||
case SDLK_PAUSE: rc = KEY_PAUSE; break;
|
||||
|
||||
case SDLK_KP_EQUALS:
|
||||
case SDLK_EQUALS: rc = KEY_EQUALS; break;
|
||||
|
||||
case SDLK_KP_MINUS:
|
||||
case SDLK_MINUS: rc = KEY_MINUS; break;
|
||||
|
||||
case SDLK_LSHIFT:
|
||||
case SDLK_RSHIFT:
|
||||
rc = KEY_RSHIFT;
|
||||
break;
|
||||
|
||||
case SDLK_LCTRL:
|
||||
case SDLK_RCTRL:
|
||||
rc = KEY_RCTRL;
|
||||
break;
|
||||
|
||||
case SDLK_LALT:
|
||||
case SDLK_RALT:
|
||||
#if SDL_MAJOR_VERSION >= 2
|
||||
case SDLK_LGUI:
|
||||
case SDLK_RGUI:
|
||||
#else
|
||||
case SDLK_LMETA:
|
||||
case SDLK_RMETA:
|
||||
#endif
|
||||
rc = KEY_RALT;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (rc >= SDLK_SPACE && rc <= SDLK_BACKQUOTE)
|
||||
rc = rc - SDLK_SPACE + ' ';
|
||||
else if (rc >= 'A' && rc <= 'Z')
|
||||
rc = rc - 'A' + 'a';
|
||||
break;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Similar to IB_StartTic from ib_video_sdl.c
|
||||
std::optional<dp_doom_event_t> doomevent_from_sdlevent(const SDL_Event &sdl_event)
|
||||
{
|
||||
dp_doom_event_t event;
|
||||
static int button_state;
|
||||
|
||||
switch (sdl_event.type)
|
||||
{
|
||||
case SDL_KEYDOWN:
|
||||
event.type = DP_ev_keydown;
|
||||
event.data1 = xlatekey(sdl_event.key.keysym.sym);
|
||||
return event;
|
||||
|
||||
case SDL_KEYUP:
|
||||
event.type = DP_ev_keyup;
|
||||
event.data1 = xlatekey(sdl_event.key.keysym.sym);
|
||||
return event;
|
||||
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
switch (sdl_event.button.button)
|
||||
{
|
||||
case SDL_BUTTON_LEFT:
|
||||
button_state |= 1;
|
||||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
button_state |= 2;
|
||||
break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
button_state |= 4;
|
||||
break;
|
||||
}
|
||||
event.type = DP_ev_mouse;
|
||||
event.data1 = button_state;
|
||||
event.data2 = event.data3 = 0;
|
||||
return event;
|
||||
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
switch (sdl_event.button.button)
|
||||
{
|
||||
case SDL_BUTTON_LEFT:
|
||||
button_state &= ~1;
|
||||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
button_state &= ~2;
|
||||
break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
button_state &= ~4;
|
||||
break;
|
||||
}
|
||||
event.type = DP_ev_mouse;
|
||||
event.data1 = button_state;
|
||||
event.data2 = event.data3 = 0;
|
||||
return event;
|
||||
|
||||
case SDL_MOUSEMOTION:
|
||||
event.type = DP_ev_mouse;
|
||||
event.data1 = button_state;
|
||||
event.data2 = sdl_event.motion.xrel * (1 << 5);
|
||||
event.data3 = -sdl_event.motion.yrel * (1 << 5);
|
||||
|
||||
if (event.data2 || event.data3)
|
||||
return event;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
10
src/doomlib.hpp
Normal file
10
src/doomlib.hpp
Normal file
|
@ -0,0 +1,10 @@
|
|||
#ifndef SRC_DOOMLIB_HPP
|
||||
#define SRC_DOOMLIB_HPP
|
||||
|
||||
#include <optional>
|
||||
#include <SDL.h>
|
||||
#include "dp_common.h"
|
||||
|
||||
std::optional<dp_doom_event_t> doomevent_from_sdlevent(const SDL_Event &sdl_event);
|
||||
|
||||
#endif // SRC_DOOMLIB_HPP
|
Loading…
Reference in a new issue