mirror of
https://github.com/geode-sdk/geode.git
synced 2025-04-16 06:55:04 -04:00
Merge branch 'main' of https://github.com/geode-sdk/geode into main
This commit is contained in:
commit
628b7d2ec9
5 changed files with 249 additions and 17 deletions
CMakeLists.txt
loader
|
@ -3,8 +3,19 @@ cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
|
|||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
|
||||
cmake_policy(SET CMP0141 NEW)
|
||||
|
||||
if (NOT DEFINED CMAKE_C_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER} OR
|
||||
NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER})
|
||||
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
# sccache does not work with msbuild,
|
||||
# so no point in using it
|
||||
set(GEODE_DISABLE_CACHE ON)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED GEODE_DISABLE_CACHE)
|
||||
set(GEODE_DISABLE_CACHE OFF)
|
||||
endif()
|
||||
|
||||
if (NOT GEODE_DISABLE_CACHE AND
|
||||
(NOT DEFINED CMAKE_C_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_C_COMPILER_LAUNCHER} OR
|
||||
NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_CXX_COMPILER_LAUNCHER}))
|
||||
message(STATUS "Looking for ccache/sccache")
|
||||
find_program(GEODE_CCACHE NAMES sccache ccache)
|
||||
if (NOT GEODE_CCACHE)
|
||||
|
@ -22,6 +33,14 @@ if (NOT DEFINED CMAKE_C_COMPILER_LAUNCHER AND NOT DEFINED ENV{CMAKE_C_COMPILER_L
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if (GEODE_DISABLE_CACHE AND NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
|
||||
set(GEODE_DISABLE_PRECOMPILED_HEADERS OFF)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED GEODE_DISABLE_PRECOMPILED_HEADERS)
|
||||
set(GEODE_DISABLE_PRECOMPILED_HEADERS ON)
|
||||
endif()
|
||||
|
||||
if (DEFINED ENV{GEODE_CI})
|
||||
message(STATUS "Building in CI")
|
||||
endif()
|
||||
|
@ -203,6 +222,12 @@ target_link_libraries(GeodeFilesystemImpl PUBLIC ghc_filesystem)
|
|||
|
||||
add_subdirectory(${GEODE_BINDINGS_REPO_PATH} ${CMAKE_BINARY_DIR}/bindings)
|
||||
|
||||
if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(GeodeBindings INTERFACE
|
||||
"${GEODE_LOADER_PATH}/include/Geode/Bindings.hpp"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories(GeodeBindings PUBLIC
|
||||
${GEODE_LOADER_PATH}/include
|
||||
${GEODE_LOADER_PATH}/include/Geode/cocos/include
|
||||
|
@ -233,8 +258,15 @@ if (PROJECT_IS_TOP_LEVEL)
|
|||
if (SUPPORTS_W_NO_EVERYTHING)
|
||||
target_compile_options(geode-loader PRIVATE -Wno-inconsistent-missing-override)
|
||||
endif()
|
||||
elseif(EXISTS ${GEODE_PLATFORM_BIN_PATH})
|
||||
elseif (EXISTS ${GEODE_PLATFORM_BIN_PATH})
|
||||
target_link_libraries(${PROJECT_NAME} INTERFACE "${GEODE_PLATFORM_BIN_PATH}")
|
||||
if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(${PROJECT_NAME} INTERFACE
|
||||
"${GEODE_LOADER_PATH}/include/Geode/DefaultInclude.hpp"
|
||||
"${GEODE_LOADER_PATH}/include/Geode/Geode.hpp"
|
||||
# please stop adding modify here its not here because it makes windows compilation take longer than geode 1.0 release date
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"No valid loader binary to link to! Install pre-built binaries with `geode sdk install-binaries`, "
|
||||
|
|
|
@ -268,6 +268,13 @@ if (MSVC)
|
|||
target_link_options(${PROJECT_NAME} PRIVATE /DELAYLOAD:libcocos2d.dll /DELAYLOAD:libExtensions.dll)
|
||||
endif()
|
||||
|
||||
# Use precompiled headers for faster builds
|
||||
if (NOT GEODE_DISABLE_PRECOMPILED_HEADERS)
|
||||
target_precompile_headers(${PROJECT_NAME} PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/Geode/Geode.hpp"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Create launcher
|
||||
if (APPLE)
|
||||
set_target_properties(geode-loader PROPERTIES
|
||||
|
|
|
@ -21,8 +21,8 @@ RT_ADD(
|
|||
|
||||
static enumKeyCodes convertKeyCode(enumKeyCodes key);
|
||||
|
||||
bool dispatchKeyboardMSG(enumKeyCodes key, bool, bool);
|
||||
|
||||
bool dispatchKeyboardMSG(enumKeyCodes key, bool isKeyDown, bool isKeyRepeat);
|
||||
|
||||
inline bool getAltKeyPressed() const {
|
||||
return m_bAltPressed;
|
||||
}
|
||||
|
@ -42,21 +42,28 @@ RT_ADD(
|
|||
|
||||
void updateModifierKeys(bool shft, bool ctrl, bool alt, bool cmd);
|
||||
|
||||
bool getBlockRepeat() const;
|
||||
void setBlockRepeat(bool);
|
||||
inline bool getBlockRepeat() const {
|
||||
return m_bBlockRepeat;
|
||||
}
|
||||
|
||||
inline void setBlockRepeat(bool blockRepeat) {
|
||||
this->m_bBlockRepeat = blockRepeat;
|
||||
}
|
||||
|
||||
protected:
|
||||
CCArray* m_pDelegates; // 0x20
|
||||
bool m_bUnknown24; // 0x24
|
||||
bool m_bUnknown25; // 0x25
|
||||
ccCArray* m_pUnknown28; // 0x28
|
||||
ccCArray* m_pUnknown2c; // 0x2c
|
||||
bool m_bShiftPressed; // 0x30
|
||||
bool m_bControlPressed; // 0x31
|
||||
bool m_bAltPressed; // 0x32
|
||||
bool m_bCommandPressed; // 0x33
|
||||
//there's more here, check the initializer
|
||||
CCArray* m_pDelegates; // 0x34
|
||||
bool m_bUnknown38; // 0x38
|
||||
bool m_bUnknown39; // 0x39
|
||||
bool m_bUnknown3a; // 0x3a
|
||||
ccCArray* m_pUnknown3c; // 0x3c
|
||||
ccCArray* m_pUnknown40; // 0x40
|
||||
bool m_bShiftPressed; // 0x44
|
||||
bool m_bControlPressed; // 0x45
|
||||
bool m_bAltPressed; // 0x46
|
||||
bool m_bCommandPressed; // 0x47
|
||||
bool m_bBlockRepeat; // 0x48
|
||||
|
||||
// ~~there's more here, check the initializer~~ no there's not??
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
|
158
loader/src/platform/android/input.cpp
Normal file
158
loader/src/platform/android/input.cpp
Normal file
|
@ -0,0 +1,158 @@
|
|||
#include <unordered_map>
|
||||
|
||||
#include <android/keycodes.h>
|
||||
#include <jni.h>
|
||||
#include <cocos2d.h>
|
||||
|
||||
namespace {
|
||||
std::unordered_map<int, cocos2d::enumKeyCodes> g_keymap = {
|
||||
{AKEYCODE_ESCAPE, cocos2d::KEY_Escape},
|
||||
{AKEYCODE_SPACE, cocos2d::KEY_Space},
|
||||
{AKEYCODE_DPAD_LEFT, cocos2d::KEY_Left},
|
||||
{AKEYCODE_DPAD_RIGHT, cocos2d::KEY_Right},
|
||||
{AKEYCODE_DPAD_UP, cocos2d::KEY_Up},
|
||||
{AKEYCODE_DPAD_DOWN, cocos2d::KEY_Down},
|
||||
{AKEYCODE_0, cocos2d::KEY_Zero},
|
||||
{AKEYCODE_1, cocos2d::KEY_One},
|
||||
{AKEYCODE_2, cocos2d::KEY_Two},
|
||||
{AKEYCODE_3, cocos2d::KEY_Three},
|
||||
{AKEYCODE_4, cocos2d::KEY_Four},
|
||||
{AKEYCODE_5, cocos2d::KEY_Five},
|
||||
{AKEYCODE_6, cocos2d::KEY_Six},
|
||||
{AKEYCODE_7, cocos2d::KEY_Seven},
|
||||
{AKEYCODE_8, cocos2d::KEY_Eight},
|
||||
{AKEYCODE_9, cocos2d::KEY_Nine},
|
||||
{AKEYCODE_Q, cocos2d::KEY_Q},
|
||||
{AKEYCODE_W, cocos2d::KEY_W},
|
||||
{AKEYCODE_E, cocos2d::KEY_E},
|
||||
{AKEYCODE_R, cocos2d::KEY_R},
|
||||
{AKEYCODE_T, cocos2d::KEY_T},
|
||||
{AKEYCODE_Y, cocos2d::KEY_Y},
|
||||
{AKEYCODE_A, cocos2d::KEY_A},
|
||||
{AKEYCODE_S, cocos2d::KEY_S},
|
||||
{AKEYCODE_D, cocos2d::KEY_D},
|
||||
{AKEYCODE_F, cocos2d::KEY_F},
|
||||
{AKEYCODE_G, cocos2d::KEY_G},
|
||||
{AKEYCODE_H, cocos2d::KEY_H},
|
||||
{AKEYCODE_J, cocos2d::KEY_J},
|
||||
{AKEYCODE_K, cocos2d::KEY_K},
|
||||
{AKEYCODE_L, cocos2d::KEY_L},
|
||||
{AKEYCODE_Z, cocos2d::KEY_Z},
|
||||
{AKEYCODE_X, cocos2d::KEY_X},
|
||||
{AKEYCODE_C, cocos2d::KEY_C},
|
||||
{AKEYCODE_V, cocos2d::KEY_V},
|
||||
{AKEYCODE_B, cocos2d::KEY_B},
|
||||
{AKEYCODE_N, cocos2d::KEY_N},
|
||||
{AKEYCODE_M, cocos2d::KEY_M},
|
||||
{AKEYCODE_F1, cocos2d::KEY_F1},
|
||||
{AKEYCODE_F2, cocos2d::KEY_F2},
|
||||
{AKEYCODE_F3, cocos2d::KEY_F3},
|
||||
{AKEYCODE_F4, cocos2d::KEY_F4},
|
||||
{AKEYCODE_F5, cocos2d::KEY_F5},
|
||||
{AKEYCODE_F6, cocos2d::KEY_F6},
|
||||
{AKEYCODE_F7, cocos2d::KEY_F7},
|
||||
{AKEYCODE_F8, cocos2d::KEY_F8},
|
||||
{AKEYCODE_F9, cocos2d::KEY_F9},
|
||||
{AKEYCODE_F10, cocos2d::KEY_F10},
|
||||
{AKEYCODE_F11, cocos2d::KEY_F11},
|
||||
{AKEYCODE_F12, cocos2d::KEY_F12},
|
||||
{AKEYCODE_ENTER, cocos2d::KEY_Enter},
|
||||
{AKEYCODE_FORWARD_DEL, cocos2d::KEY_Delete},
|
||||
{AKEYCODE_DEL, cocos2d::KEY_Backspace},
|
||||
{AKEYCODE_CTRL_LEFT, cocos2d::KEY_LeftControl},
|
||||
{AKEYCODE_CTRL_RIGHT, cocos2d::KEY_RightContol}, // sic
|
||||
{AKEYCODE_SHIFT_LEFT, cocos2d::KEY_LeftShift},
|
||||
{AKEYCODE_SHIFT_RIGHT, cocos2d::KEY_RightShift},
|
||||
{AKEYCODE_ALT_LEFT, cocos2d::KEY_Alt},
|
||||
{AKEYCODE_ALT_RIGHT, cocos2d::KEY_Alt},
|
||||
{AKEYCODE_BUTTON_A, cocos2d::CONTROLLER_A},
|
||||
{AKEYCODE_BUTTON_B, cocos2d::CONTROLLER_B},
|
||||
{AKEYCODE_BUTTON_X, cocos2d::CONTROLLER_X},
|
||||
{AKEYCODE_BUTTON_Y, cocos2d::CONTROLLER_Y},
|
||||
{AKEYCODE_BUTTON_START, cocos2d::CONTROLLER_Start},
|
||||
{AKEYCODE_BUTTON_SELECT, cocos2d::CONTROLLER_Back},
|
||||
{AKEYCODE_BUTTON_R1, cocos2d::CONTROLLER_RB},
|
||||
{AKEYCODE_BUTTON_L1, cocos2d::CONTROLLER_LB},
|
||||
{AKEYCODE_BUTTON_R2, cocos2d::CONTROLLER_RT},
|
||||
{AKEYCODE_BUTTON_L2, cocos2d::CONTROLLER_LT},
|
||||
};
|
||||
|
||||
cocos2d::enumKeyCodes translateAndroidKeyCodeToWindows(int keyCode) {
|
||||
if (auto it = g_keymap.find(keyCode); it != g_keymap.end()) {
|
||||
return it->second;
|
||||
}
|
||||
else {
|
||||
return cocos2d::KEY_None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL
|
||||
Java_com_geode_launcher_utils_GeodeUtils_nativeKeyDown(
|
||||
JNIEnv* env, jobject, jint keycode, jint modifiers, jboolean isRepeat
|
||||
) {
|
||||
if (keycode != AKEYCODE_BACK && keycode != AKEYCODE_MENU) {
|
||||
auto keyboard_dispatcher = cocos2d::CCDirector::sharedDirector()->getKeyboardDispatcher();
|
||||
auto translated_code = translateAndroidKeyCodeToWindows(keycode);
|
||||
|
||||
auto isShiftPressed = modifiers & 0x1;
|
||||
auto isCtrlPressed = modifiers & 0x1000;
|
||||
auto isAltPressed = modifiers & 0x2;
|
||||
|
||||
keyboard_dispatcher->updateModifierKeys(isShiftPressed, isCtrlPressed, isAltPressed, false);
|
||||
|
||||
keyboard_dispatcher->dispatchKeyboardMSG(translated_code, true, isRepeat);
|
||||
} else {
|
||||
auto keypad_dispatcher = cocos2d::CCDirector::sharedDirector()->getKeypadDispatcher();
|
||||
if (keycode == AKEYCODE_BACK) {
|
||||
keypad_dispatcher->dispatchKeypadMSG(cocos2d::kTypeBackClicked);
|
||||
} else {
|
||||
keypad_dispatcher->dispatchKeypadMSG(cocos2d::kTypeMenuClicked);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL Java_com_geode_launcher_utils_GeodeUtils_nativeKeyUp(
|
||||
JNIEnv* env, jobject, jint keycode, jint modifiers
|
||||
) {
|
||||
// back/menu keys
|
||||
if (keycode != AKEYCODE_BACK && keycode != AKEYCODE_MENU) {
|
||||
auto keyboard_dispatcher = cocos2d::CCDirector::sharedDirector()->getKeyboardDispatcher();
|
||||
auto translated_code = translateAndroidKeyCodeToWindows(keycode);
|
||||
|
||||
auto isShiftPressed = modifiers & 0x1;
|
||||
auto isCtrlPressed = modifiers & 0x1000;
|
||||
auto isAltPressed = modifiers & 0x2;
|
||||
|
||||
keyboard_dispatcher->updateModifierKeys(
|
||||
isShiftPressed,
|
||||
isCtrlPressed,
|
||||
isAltPressed,
|
||||
false
|
||||
);
|
||||
|
||||
keyboard_dispatcher->dispatchKeyboardMSG(translated_code, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
constexpr auto g_scrollFactor = -13.0f;
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL Java_com_geode_launcher_utils_GeodeUtils_nativeActionScroll(
|
||||
JNIEnv* env, jobject, jfloat scrollX, jfloat scrollY
|
||||
) {
|
||||
cocos2d::CCDirector::sharedDirector()->getMouseDispatcher()->dispatchScrollMSG(
|
||||
scrollY * g_scrollFactor, scrollX * g_scrollFactor
|
||||
);
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL Java_com_geode_launcher_utils_GeodeUtils_resizeSurface(
|
||||
JNIEnv* env, jobject, jint width, jint height
|
||||
) {
|
||||
auto fWidth = static_cast<float>(width);
|
||||
auto fHeight = static_cast<float>(height);
|
||||
|
||||
cocos2d::CCEGLView::sharedOpenGLView()->setFrameSize(fWidth, fHeight);
|
||||
cocos2d::CCDirector::sharedDirector()->updateScreenScale({fWidth, fHeight});
|
||||
cocos2d::CCDirector::sharedDirector()->setViewport();
|
||||
cocos2d::CCDirector::sharedDirector()->setProjection(cocos2d::kCCDirectorProjection2D);
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "../load.hpp"
|
||||
#include <jni.h>
|
||||
#include <Geode/cocos/platform/android/jni/JniHelper.h>
|
||||
#include "internalString.hpp"
|
||||
#include <cocos2d.h>
|
||||
#include <Geode/loader/Log.hpp>
|
||||
|
@ -16,6 +17,31 @@ PFNGLGENVERTEXARRAYSOESPROC glGenVertexArraysOESEXT = 0;
|
|||
PFNGLBINDVERTEXARRAYOESPROC glBindVertexArrayOESEXT = 0;
|
||||
PFNGLDELETEVERTEXARRAYSOESPROC glDeleteVertexArraysOESEXT = 0;
|
||||
|
||||
namespace {
|
||||
bool reportPlatformCapability(std::string id) {
|
||||
JniMethodInfo t;
|
||||
if (JniHelper::getStaticMethodInfo(t, "com/geode/launcher/utils/GeodeUtils", "reportPlatformCapability", "(Ljava/lang/String;)Z")) {
|
||||
jstring stringArg1 = t.env->NewStringUTF(id.c_str());
|
||||
|
||||
auto r = t.env->CallStaticBooleanMethod(t.classID, t.methodID, stringArg1);
|
||||
|
||||
t.env->DeleteLocalRef(stringArg1);
|
||||
t.env->DeleteLocalRef(t.classID);
|
||||
|
||||
return r;
|
||||
} else {
|
||||
auto vm = JniHelper::getJavaVM();
|
||||
|
||||
JNIEnv* env;
|
||||
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) == JNI_OK) {
|
||||
env->ExceptionClear();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" [[gnu::visibility("default")]] jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
glGenVertexArraysOESEXT = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress("glGenVertexArraysOES");
|
||||
glBindVertexArrayOESEXT = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress("glBindVertexArrayOES");
|
||||
|
@ -36,6 +62,8 @@ extern "C" [[gnu::visibility("default")]] jint JNI_OnLoad(JavaVM* vm, void* rese
|
|||
delete cc;
|
||||
}
|
||||
|
||||
reportPlatformCapability("extended_input");
|
||||
|
||||
geodeEntry(nullptr);
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue