diff --git a/CMakeLists.txt b/CMakeLists.txt index f10aff4..576fdb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,11 +7,28 @@ set(CMAKE_C_STANDARD 11) if (WIN32) # TODO set arch on target instead of generator + set(PLATFORM WINDOWS) if (CMAKE_SIZEOF_VOID_P EQUAL 8) set(PROJECT_ARCH x64) + add_definitions( + -DIZ_WIN64 + ) else () set(PROJECT_ARCH x86) + add_definitions( + -DIZ_WIN32 + ) endif () +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(PLATFORM MACOS) + add_definitions( + -DIZ_MACOS + ) +else() + set(PLATFORM UNIX) + add_definitions( + -DIZ_UNIX + ) endif () add_definitions( @@ -40,14 +57,26 @@ include_directories( "${PROJECT_SOURCE_DIR}/dependencies/sqlite" ) -link_directories( - "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" - "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${PROJECT_ARCH}" - "${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${PROJECT_ARCH}" - "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" - "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/lib/Release" - "${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/lib" -) +if (WIN32) + link_directories( + "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" + "${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${PROJECT_ARCH}" + "${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${PROJECT_ARCH}" + "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" + "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/lib/Release" + "${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/lib" + ) +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + include_directories( + /usr/local/include + /usr/local/include/SDL2 + /usr/local/include/openssl + ) + + link_directories( + /usr/local/lib + ) +endif() add_executable( game @@ -96,17 +125,31 @@ add_executable( src/packages/net/core/IZ_websocket.c src/packages/net/IZ_net_client.c src/packages/net/IZ_net_client.h src/packages/game/IZ_app_net.c src/packages/game/IZ_app_net.h src/packages/game/IZ_app_video.c src/packages/game/IZ_app_video.h src/packages/game/IZ_subsystem.h src/packages/game/IZ_app_input.c src/packages/game/IZ_app_input.h src/packages/game/IZ_app_config.c src/packages/game/IZ_app_config.h src/packages/game/asset/IZ_asset.c src/packages/game/asset/IZ_asset.h) -target_link_libraries( - game +if (WIN32) + target_link_libraries( + game + SDL2main + SDL2 + SDL2_image + SDL2_ttf + portmidi + libcrypto + libssl + websockets + ) +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + target_link_libraries( + game SDL2main SDL2 SDL2_image SDL2_ttf portmidi - libcrypto - libssl + # libcrypto + # libssl websockets -) + ) +endif() add_executable( game-test-geometry diff --git a/README.md b/README.md index 2a2a92b..8e3d963 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,10 @@ A run-and-gun shooter inspired by Metal Slug. 1. Clone this repo. 2. Clone the repositories under `dependencies.txt`, including SDL2. -3. Build the SDL2 dependency using the [build instructions for macOS](https://wiki.libsdl.org/SDL2/Installation#macos). +3. Build the SDL, SDL_image, and SDL_ttf dependencies using the [build instructions for macOS](https://wiki.libsdl.org/SDL2/Installation#macos). + > **Note:** You may need to download other tools to build the libraries. + + > **Note:** Clone the submodules under SDL_ttf to download freetype and harfbuzz 4. Build the following dependencies first: - `portmidi` - `libwebsockets` (follow the [instructions on building LWS](https://libwebsockets.org/lws-api-doc-master/html/md_README_8build.html)) diff --git a/TODO.md b/TODO.md index 1db3e7a..8776bc5 100644 --- a/TODO.md +++ b/TODO.md @@ -4,4 +4,3 @@ - [ ] Proof-of-concept for fast SVG rendering (we're going to use SVG instead of Spine) - [ ] Improve logging (remove SDL/lws dependency) - [ ] Unify memset/memcpy/free/malloc functions (remove SDL/lws dependency) - - [ ] Consider using `_s` functions? diff --git a/dependencies.txt b/dependencies.txt index 744a656..0f69ae5 100644 --- a/dependencies.txt +++ b/dependencies.txt @@ -1,5 +1,6 @@ https://github.com/libsdl-org/SDL https://github.com/libsdl-org/SDL_image +https://github.com/libsdl-org/SDL_ttf https://github.com/compuphase/minIni https://github.com/grassator/bdd-for-c https://github.com/PortMidi/portmidi diff --git a/src/packages/game/input/IZ_joystick.c b/src/packages/game/input/IZ_joystick.c index 63381cd..c435024 100644 --- a/src/packages/game/input/IZ_joystick.c +++ b/src/packages/game/input/IZ_joystick.c @@ -8,7 +8,8 @@ bool IZ_JoystickIsValidAxisThreshold(u16 value) { void IZ_JoystickHandleDeviceEvents(IZ_JoystickState* state, SDL_Event e) { if (e.type == SDL_JOYDEVICEADDED) { - if (SDL_NumJoysticks() <= IZ_PLAYERS && !state->device) { + u8 joysticks_count = SDL_NumJoysticks(); + if (joysticks_count <= IZ_PLAYERS && !state->device) { state->device = SDL_JoystickOpen(e.jdevice.which); } return; @@ -106,7 +107,34 @@ void IZ_JoystickHandleButtonEvents(IZ_JoystickState* state, IZ_Action* action, S u8 control_index; for (control_index = 4; control_index < IZ_CONTROLS; control_index += 1) { - if (e.jbutton.button == state->config.control_mapping[control_index]) { + u8 normalized_button = e.jbutton.button; + + /* + * ZL ZR + * L R + * + * U SLCT STRT 3 + * L R 2 0 + * D 1 + * + * + * + */ + + // TODO test with XInput, make compatible with Apple + + if (IZ_MACOS) { + //printf("%d\n", e.jbutton.button); + if (e.jbutton.button == 2) { + normalized_button = 4; + } else if (e.jbutton.button == 6) { + normalized_button = 11; + } else if (e.jbutton.button == 4) { + normalized_button = 10; + } + } + + if (normalized_button == state->config.control_mapping[control_index]) { const u16 bitflag = (0x1 << control_index); if (e.type == SDL_JOYBUTTONDOWN) {