diff --git a/src/main.c b/src/main.c index bb1924d..d557013 100644 --- a/src/main.c +++ b/src/main.c @@ -22,6 +22,32 @@ static struct SDL_AudioCVT cvt; } audio; + SDL_Joystick* joysticks[TIC_GAMEPADS]; + + struct + { + // tic80_gamepads keyboard; + tic80_gamepads touch; + tic80_gamepads joystick; + + SDL_Texture* texture; + + bool show; + s32 counter; + s32 alpha; + bool backProcessed; + + struct + { + s32 size; + SDL_Point axis; + SDL_Point a; + SDL_Point b; + SDL_Point x; + SDL_Point y; + } part; + } gamepad; + bool quitFlag; bool missedFrame; } platform; @@ -50,16 +76,16 @@ static void initSound() static void setWindowIcon() { // enum{ Size = 64, TileSize = 16, ColorKey = 14, Cols = TileSize / TIC_SPRITESIZE, Scale = Size/TileSize}; - // platform.tic->api.clear(platform.tic, 0); + // platform.studio->tic->api.clear(platform.studio->tic, 0); // u32* pixels = SDL_malloc(Size * Size * sizeof(u32)); - // const u32* pal = tic_palette_blit(&platform.tic->config.palette); + // const u32* pal = tic_palette_blit(&platform.studio->tic->config.palette); // for(s32 j = 0, index = 0; j < Size; j++) // for(s32 i = 0; i < Size; i++, index++) // { - // u8 color = getSpritePixel(platform.tic->config.bank0.tiles.data, i/Scale, j/Scale); + // u8 color = getSpritePixel(platform.studio->tic->config.bank0.tiles.data, i/Scale, j/Scale); // pixels[index] = color == ColorKey ? 0 : pal[color]; // } @@ -74,82 +100,82 @@ static void setWindowIcon() static void updateGamepadParts() { - // s32 tileSize = TIC_SPRITESIZE; - // s32 offset = 0; - // SDL_Rect rect; + s32 tileSize = TIC_SPRITESIZE; + s32 offset = 0; + SDL_Rect rect; - // const s32 JoySize = 3; - // SDL_GetWindowSize(platform.window, &rect.w, &rect.h); + const s32 JoySize = 3; + SDL_GetWindowSize(platform.window, &rect.w, &rect.h); - // if(rect.w < rect.h) - // { - // tileSize = rect.w / 2 / JoySize; - // offset = (rect.h * 2 - JoySize * tileSize) / 3; - // } - // else - // { - // tileSize = rect.w / 5 / JoySize; - // offset = (rect.h - JoySize * tileSize) / 2; - // } + if(rect.w < rect.h) + { + tileSize = rect.w / 2 / JoySize; + offset = (rect.h * 2 - JoySize * tileSize) / 3; + } + else + { + tileSize = rect.w / 5 / JoySize; + offset = (rect.h - JoySize * tileSize) / 2; + } - // platform.gamepad.part.size = tileSize; - // platform.gamepad.part.axis = (SDL_Point){0, offset}; - // platform.gamepad.part.a = (SDL_Point){rect.w - 2*tileSize, 2*tileSize + offset}; - // platform.gamepad.part.b = (SDL_Point){rect.w - 1*tileSize, 1*tileSize + offset}; - // platform.gamepad.part.x = (SDL_Point){rect.w - 3*tileSize, 1*tileSize + offset}; - // platform.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset}; + platform.gamepad.part.size = tileSize; + platform.gamepad.part.axis = (SDL_Point){0, offset}; + platform.gamepad.part.a = (SDL_Point){rect.w - 2*tileSize, 2*tileSize + offset}; + platform.gamepad.part.b = (SDL_Point){rect.w - 1*tileSize, 1*tileSize + offset}; + platform.gamepad.part.x = (SDL_Point){rect.w - 3*tileSize, 1*tileSize + offset}; + platform.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset}; } static void transparentBlit(u32* out, s32 pitch) { - // const u8* in = platform.tic->ram.vram.screen.data; - // const u8* end = in + sizeof(platform.tic->ram.vram.screen); - // const u32* pal = tic_palette_blit(&platform.tic->config.palette); - // const u32 Delta = (pitch/sizeof *out - TIC80_WIDTH); + const u8* in = platform.studio->tic->ram.vram.screen.data; + const u8* end = in + sizeof(platform.studio->tic->ram.vram.screen); + const u32* pal = tic_palette_blit(&platform.studio->tic->config.palette); + const u32 Delta = (pitch/sizeof *out - TIC80_WIDTH); - // s32 col = 0; + s32 col = 0; - // while(in != end) - // { - // u8 low = *in & 0x0f; - // u8 hi = (*in & 0xf0) >> TIC_PALETTE_BPP; - // *out++ = low ? (*(pal + low) | 0xff000000) : 0; - // *out++ = hi ? (*(pal + hi) | 0xff000000) : 0; - // in++; + while(in != end) + { + u8 low = *in & 0x0f; + u8 hi = (*in & 0xf0) >> TIC_PALETTE_BPP; + *out++ = low ? (*(pal + low) | 0xff000000) : 0; + *out++ = hi ? (*(pal + hi) | 0xff000000) : 0; + in++; - // col += BITS_IN_BYTE / TIC_PALETTE_BPP; + col += BITS_IN_BYTE / TIC_PALETTE_BPP; - // if (col == TIC80_WIDTH) - // { - // col = 0; - // out += Delta; - // } - // } + if (col == TIC80_WIDTH) + { + col = 0; + out += Delta; + } + } } static void initTouchGamepad() { - // if (!platform.renderer) - // return; + if (!platform.renderer) + return; - // platform.tic->api.map(platform.tic, &platform.tic->config.bank0.map, &platform.tic->config.bank0.tiles, 0, 0, TIC_MAP_SCREEN_WIDTH, TIC_MAP_SCREEN_HEIGHT, 0, 0, -1, 1); + platform.studio->tic->api.map(platform.studio->tic, &platform.studio->tic->config.bank0.map, &platform.studio->tic->config.bank0.tiles, 0, 0, TIC_MAP_SCREEN_WIDTH, TIC_MAP_SCREEN_HEIGHT, 0, 0, -1, 1); - // if(!platform.gamepad.texture) - // { - // platform.gamepad.texture = SDL_CreateTexture(platform.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE); - // SDL_SetTextureBlendMode(platform.gamepad.texture, SDL_BLENDMODE_BLEND); - // } + if(!platform.gamepad.texture) + { + platform.gamepad.texture = SDL_CreateTexture(platform.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE); + SDL_SetTextureBlendMode(platform.gamepad.texture, SDL_BLENDMODE_BLEND); + } - // { - // void* pixels = NULL; - // s32 pitch = 0; + { + void* pixels = NULL; + s32 pitch = 0; - // SDL_LockTexture(platform.gamepad.texture, NULL, &pixels, &pitch); - // transparentBlit(pixels, pitch); - // SDL_UnlockTexture(platform.gamepad.texture); - // } + SDL_LockTexture(platform.gamepad.texture, NULL, &pixels, &pitch); + transparentBlit(pixels, pitch); + SDL_UnlockTexture(platform.gamepad.texture); + } - // updateGamepadParts(); + updateGamepadParts(); } static void calcTextureRect(SDL_Rect* rect) @@ -207,21 +233,21 @@ static void processMouse() input->mouse.right = mb & SDL_BUTTON_RMASK; } - // for(int i = 0; i < COUNT_OF(studioImpl.mouse.state); i++) + // for(int i = 0; i < COUNT_OF(platform.mouse.state); i++) // { - // MouseState* state = &studioImpl.mouse.state[i]; + // MouseState* state = &platform.mouse.state[i]; - // if(!state->down && (studioImpl.mouse.button & SDL_BUTTON(i + 1))) + // if(!state->down && (platform.mouse.button & SDL_BUTTON(i + 1))) // { // state->down = true; - // state->start.x = studioImpl.mouse.cursor.x; - // state->start.y = studioImpl.mouse.cursor.y; + // state->start.x = platform.mouse.cursor.x; + // state->start.y = platform.mouse.cursor.y; // } - // else if(state->down && !(studioImpl.mouse.button & SDL_BUTTON(i + 1))) + // else if(state->down && !(platform.mouse.button & SDL_BUTTON(i + 1))) // { - // state->end.x = studioImpl.mouse.cursor.x; - // state->end.y = studioImpl.mouse.cursor.y; + // state->end.x = platform.mouse.cursor.x; + // state->end.y = platform.mouse.cursor.y; // state->click = true; // state->down = false; @@ -246,6 +272,243 @@ static void processKeyboard() input->keyboard.keys[c++] = KeyboardCodes[i]; } +#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) + +static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y) +{ + s32 devices = SDL_GetNumTouchDevices(); + s32 width = 0, height = 0; + SDL_GetWindowSize(platform.window, &width, &height); + + for (s32 i = 0; i < devices; i++) + { + SDL_TouchID id = SDL_GetTouchDevice(i); + + // very strange, but on Android id always == 0 + //if (id) + { + s32 fingers = SDL_GetNumTouchFingers(id); + + if(fingers) + { + platform.gamepad.counter = 0; + + if (!platform.gamepad.show) + { + platform.gamepad.alpha = getConfig()->theme.gamepad.touch.alpha; + SDL_SetTextureAlphaMod(platform.gamepad.texture, platform.gamepad.alpha); + platform.gamepad.show = true; + return false; + } + } + + for (s32 f = 0; f < fingers; f++) + { + SDL_Finger* finger = SDL_GetTouchFinger(id, f); + + if (finger && finger->pressure > 0.0f) + { + SDL_Point point = { (s32)(finger->x * width), (s32)(finger->y * height) }; + if (SDL_PointInRect(&point, rect)) + { + *x = point.x; + *y = point.y; + return true; + } + } + } + } + } + + return false; +} + +static void processTouchGamepad() +{ + platform.gamepad.touch.data = 0; + + const s32 size = platform.gamepad.part.size; + s32 x = 0, y = 0; + + { + SDL_Rect axis = {platform.gamepad.part.axis.x, platform.gamepad.part.axis.y, size*3, size*3}; + + if(checkTouch(&axis, &x, &y)) + { + x -= axis.x; + y -= axis.y; + + s32 xt = x / size; + s32 yt = y / size; + + if(yt == 0) platform.gamepad.touch.first.up = true; + else if(yt == 2) platform.gamepad.touch.first.down = true; + + if(xt == 0) platform.gamepad.touch.first.left = true; + else if(xt == 2) platform.gamepad.touch.first.right = true; + + if(xt == 1 && yt == 1) + { + xt = (x - size)/(size/3); + yt = (y - size)/(size/3); + + if(yt == 0) platform.gamepad.touch.first.up = true; + else if(yt == 2) platform.gamepad.touch.first.down = true; + + if(xt == 0) platform.gamepad.touch.first.left = true; + else if(xt == 2) platform.gamepad.touch.first.right = true; + } + } + } + + { + SDL_Rect a = {platform.gamepad.part.a.x, platform.gamepad.part.a.y, size, size}; + if(checkTouch(&a, &x, &y)) platform.gamepad.touch.first.a = true; + } + + { + SDL_Rect b = {platform.gamepad.part.b.x, platform.gamepad.part.b.y, size, size}; + if(checkTouch(&b, &x, &y)) platform.gamepad.touch.first.b = true; + } + + { + SDL_Rect xb = {platform.gamepad.part.x.x, platform.gamepad.part.x.y, size, size}; + if(checkTouch(&xb, &x, &y)) platform.gamepad.touch.first.x = true; + } + + { + SDL_Rect yb = {platform.gamepad.part.y.x, platform.gamepad.part.y.y, size, size}; + if(checkTouch(&yb, &x, &y)) platform.gamepad.touch.first.y = true; + } +} + +#endif + +static s32 getAxisMask(SDL_Joystick* joystick) +{ + s32 mask = 0; + + s32 axesCount = SDL_JoystickNumAxes(joystick); + + for (s32 a = 0; a < axesCount; a++) + { + s32 axe = SDL_JoystickGetAxis(joystick, a); + + if (axe) + { + if (a == 0) + { + if (axe > 16384) mask |= SDL_HAT_RIGHT; + else if(axe < -16384) mask |= SDL_HAT_LEFT; + } + else if (a == 1) + { + if (axe > 16384) mask |= SDL_HAT_DOWN; + else if (axe < -16384) mask |= SDL_HAT_UP; + } + } + } + + return mask; +} + +static s32 getJoystickHatMask(s32 hat) +{ + tic80_gamepads gamepad; + gamepad.data = 0; + + gamepad.first.up = hat & SDL_HAT_UP; + gamepad.first.down = hat & SDL_HAT_DOWN; + gamepad.first.left = hat & SDL_HAT_LEFT; + gamepad.first.right = hat & SDL_HAT_RIGHT; + + return gamepad.data; +} + +static void processJoysticks() +{ + platform.gamepad.joystick.data = 0; + s32 index = 0; + + for(s32 i = 0; i < COUNT_OF(platform.joysticks); i++) + { + SDL_Joystick* joystick = platform.joysticks[i]; + + if(joystick && SDL_JoystickGetAttached(joystick)) + { + tic80_gamepad* gamepad = NULL; + + switch(index) + { + case 0: gamepad = &platform.gamepad.joystick.first; break; + case 1: gamepad = &platform.gamepad.joystick.second; break; + } + + if(gamepad) + { + gamepad->data |= getJoystickHatMask(getAxisMask(joystick)); + + for (s32 h = 0; h < SDL_JoystickNumHats(joystick); h++) + gamepad->data |= getJoystickHatMask(SDL_JoystickGetHat(joystick, h)); + + s32 numButtons = SDL_JoystickNumButtons(joystick); + if(numButtons >= 2) + { + gamepad->a = SDL_JoystickGetButton(joystick, 0); + gamepad->b = SDL_JoystickGetButton(joystick, 1); + + if(numButtons >= 4) + { + gamepad->x = SDL_JoystickGetButton(joystick, 2); + gamepad->y = SDL_JoystickGetButton(joystick, 3); + + // for(s32 i = 5; i < numButtons; i++) + // { + // s32 back = SDL_JoystickGetButton(joystick, i); + + // if(back) + // { + // if(!platform.gamepad.backProcessed) + // { + // if(isGameMenu()) + // { + // platform.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); + // platform.gamepad.backProcessed = true; + // } + // } + + // return; + // } + // } + + // platform.gamepad.backProcessed = false; + } + } + + index++; + } + } + } +} + +static void processGamepad() +{ + // processKeyboardGamepad(); + +#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) + processTouchGamepad(); +#endif + processJoysticks(); + + { + platform.studio->tic->ram.input.gamepads.data = 0; + + // platform.studio->tic->ram.input.gamepads.data |= platform.gamepad.keyboard.data; + platform.studio->tic->ram.input.gamepads.data |= platform.gamepad.touch.data; + platform.studio->tic->ram.input.gamepads.data |= platform.gamepad.joystick.data; + } +} + static void pollEvent() { SDL_Event event; @@ -282,10 +545,10 @@ static void pollEvent() // } // } // break; -// case SDL_WINDOWEVENT: -// switch(event.window.event) -// { -// case SDL_WINDOWEVENT_RESIZED: updateGamepadParts(); break; + case SDL_WINDOWEVENT: + switch(event.window.event) + { + case SDL_WINDOWEVENT_RESIZED: updateGamepadParts(); break; // case SDL_WINDOWEVENT_FOCUS_GAINED: // #if defined(TIC80_PRO) @@ -322,9 +585,9 @@ static void pollEvent() // if(platform.console->codeLiveReload.active && code->update) // code->update(code); // } -// break; -// } -// break; + // break; + } + break; // case SDL_FINGERUP: // showSoftKeyboard(); // break; @@ -345,13 +608,14 @@ static void pollEvent() // if(!platform.gesture.active) processMouse(); + processGamepad(); processKeyboard(); // if(platform.mode == TIC_RUN_MODE) // { - // if(platform.tic->input.gamepad) processGamepadInput(); - // if(platform.tic->input.mouse) processMouseInput(); - // if(platform.tic->input.keyboard) processKeyboardInput(); + // if(platform.studio->tic->input.gamepad) processGamepadInput(); + // if(platform.studio->tic->input.mouse) processMouseInput(); + // if(platform.studio->tic->input.keyboard) processKeyboardInput(); // } // else // { @@ -361,7 +625,7 @@ static void pollEvent() static void blitTexture() { - // tic_mem* tic = platform.tic; + // tic_mem* tic = platform.studio->tic; SDL_Rect rect = {0, 0, 0, 0}; calcTextureRect(&rect); @@ -462,6 +726,54 @@ static void blitSound() else SDL_QueueAudio(platform.audio.device, tic->samples.buffer, tic->samples.size); } +static void renderGamepad() +{ + if(platform.gamepad.show || platform.gamepad.alpha); else return; + + const s32 tileSize = platform.gamepad.part.size; + const SDL_Point axis = platform.gamepad.part.axis; + typedef struct { bool press; s32 x; s32 y;} Tile; + const Tile Tiles[] = + { + {platform.studio->tic->ram.input.gamepads.first.up, axis.x + 1*tileSize, axis.y + 0*tileSize}, + {platform.studio->tic->ram.input.gamepads.first.down, axis.x + 1*tileSize, axis.y + 2*tileSize}, + {platform.studio->tic->ram.input.gamepads.first.left, axis.x + 0*tileSize, axis.y + 1*tileSize}, + {platform.studio->tic->ram.input.gamepads.first.right, axis.x + 2*tileSize, axis.y + 1*tileSize}, + + {platform.studio->tic->ram.input.gamepads.first.a, platform.gamepad.part.a.x, platform.gamepad.part.a.y}, + {platform.studio->tic->ram.input.gamepads.first.b, platform.gamepad.part.b.x, platform.gamepad.part.b.y}, + {platform.studio->tic->ram.input.gamepads.first.x, platform.gamepad.part.x.x, platform.gamepad.part.x.y}, + {platform.studio->tic->ram.input.gamepads.first.y, platform.gamepad.part.y.x, platform.gamepad.part.y.y}, + }; + + enum {ButtonsCount = 8}; + + for(s32 i = 0; i < COUNT_OF(Tiles); i++) + { + const Tile* tile = Tiles + i; + SDL_Rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE}; + SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize}; + + SDL_RenderCopy(platform.renderer, platform.gamepad.texture, &src, &dest); + } + + if(!platform.gamepad.show && platform.gamepad.alpha) + { + enum {Step = 3}; + + if(platform.gamepad.alpha - Step >= 0) platform.gamepad.alpha -= Step; + else platform.gamepad.alpha = 0; + + SDL_SetTextureAlphaMod(platform.gamepad.texture, platform.gamepad.alpha); + } + + platform.gamepad.counter = platform.gamepad.touch.data ? 0 : platform.gamepad.counter+1; + + // wait 5 seconds and hide touch gamepad + if(platform.gamepad.counter >= 5 * TIC_FRAMERATE) + platform.gamepad.show = false; +} + static void tick() { pollEvent(); @@ -471,7 +783,7 @@ static void tick() // if(platform.quitFlag) // { // #if defined __EMSCRIPTEN__ -// platform.tic->api.clear(platform.tic, TIC_COLOR_BG); +// platform.studio->tic->api.clear(platform.studio->tic, TIC_COLOR_BG); // blitTexture(); // emscripten_cancel_main_loop(); // #endif @@ -484,9 +796,10 @@ static void tick() SDL_RenderClear(platform.renderer); + blitTexture(); - // if(platform.mode == TIC_RUN_MODE && platform.tic->input.gamepad) - // renderGamepad(); + // if(platform.mode == TIC_RUN_MODE && platform.studio->tic->input.gamepad) + renderGamepad(); // if(platform.mode == TIC_MENU_MODE || platform.mode == TIC_SURF_MODE) // renderGamepad(); @@ -494,7 +807,6 @@ static void tick() // if(platform.mouse.system != cursor) // SDL_SetCursor(SDL_CreateSystemCursor(platform.mouse.system)); - blitTexture(); SDL_RenderPresent(platform.renderer); @@ -534,10 +846,10 @@ s32 main(s32 argc, char **argv) platform.texture = SDL_CreateTexture(platform.renderer, STUDIO_PIXEL_FORMAT, SDL_TEXTUREACCESS_STREAMING, TEXTURE_SIZE, TEXTURE_SIZE); - initTouchGamepad(); - platform.studio = studioInit(argc, argv, platform.audio.spec.freq); + initTouchGamepad(); + #if defined(__EMSCRIPTEN__) emscripten_set_main_loop(emstick, TIC_FRAMERATE, 1); #else @@ -596,6 +908,8 @@ s32 main(s32 argc, char **argv) // if(platform.mouse.texture) // SDL_DestroyTexture(platform.mouse.texture); + SDL_DestroyTexture(platform.gamepad.texture); + SDL_DestroyTexture(platform.texture); SDL_DestroyRenderer(platform.renderer); SDL_DestroyWindow(platform.window); diff --git a/src/studio.c b/src/studio.c index 5b87248..a456439 100644 --- a/src/studio.c +++ b/src/studio.c @@ -107,7 +107,7 @@ static struct // SDL_AudioCVT cvt; // } audio; - SDL_Joystick* joysticks[TIC_GAMEPADS]; + // SDL_Joystick* joysticks[TIC_GAMEPADS]; EditorMode mode; EditorMode prevMode; @@ -133,31 +133,31 @@ static struct const u8* keyboard; - SDL_Scancode keycodes[KEYMAP_COUNT]; + tic_key keycodes[KEYMAP_COUNT]; - struct - { - tic80_gamepads keyboard; - tic80_gamepads touch; - tic80_gamepads joystick; + // struct + // { + // tic80_gamepads keyboard; + // tic80_gamepads touch; + // tic80_gamepads joystick; - SDL_Texture* texture; + // SDL_Texture* texture; - bool show; - s32 counter; - s32 alpha; - bool backProcessed; + // bool show; + // s32 counter; + // s32 alpha; + // bool backProcessed; - struct - { - s32 size; - SDL_Point axis; - SDL_Point a; - SDL_Point b; - SDL_Point x; - SDL_Point y; - } part; - } gamepad; + // struct + // { + // s32 size; + // SDL_Point axis; + // SDL_Point a; + // SDL_Point b; + // SDL_Point x; + // SDL_Point y; + // } part; + // } gamepad; struct { @@ -251,7 +251,7 @@ static struct .mdate = 0, }, - .joysticks = {NULL, NULL, NULL, NULL}, + // .joysticks = {NULL, NULL, NULL, NULL}, .mode = TIC_START_MODE, .prevMode = TIC_CODE_MODE, @@ -275,23 +275,21 @@ static struct .keyboard = NULL, .keycodes = { - SDL_SCANCODE_UP, - SDL_SCANCODE_DOWN, - SDL_SCANCODE_LEFT, - SDL_SCANCODE_RIGHT, + tic_key_up, + tic_key_down, + tic_key_left, + tic_key_right, - SDL_SCANCODE_Z, // a - SDL_SCANCODE_X, // b - SDL_SCANCODE_A, // x - SDL_SCANCODE_S, // y - - 0, 0, 0, 0, 0, 0, 0, 0, + tic_key_z, // a + tic_key_x, // b + tic_key_a, // x + tic_key_s, // y }, - .gamepad = - { - .show = false, - }, + // .gamepad = + // { + // .show = false, + // }, .bank = { @@ -1281,308 +1279,306 @@ bool studioCartChanged() // } // } -SDL_Scancode* getKeymap() +tic_key* getKeymap() { return studioImpl.keycodes; } -static void processKeyboard() +static void processGamepadMapping() { - studioImpl.keyboard = SDL_GetKeyboardState(NULL); - - studioImpl.gamepad.keyboard.data = 0; + tic_mem* tic = studioImpl.studio.tic; for(s32 i = 0; i < KEYMAP_COUNT; i++) - if(studioImpl.keyboard[studioImpl.keycodes[i]]) - studioImpl.gamepad.keyboard.data |= 1 << i; + if(tic->api.key(tic, studioImpl.keycodes[i])) + tic->ram.input.gamepads.data |= 1 << i; } -#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) +// #if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) -static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y) -{ - s32 devices = SDL_GetNumTouchDevices(); - s32 width = 0, height = 0; - SDL_GetWindowSize(studioImpl.window, &width, &height); +// static bool checkTouch(const SDL_Rect* rect, s32* x, s32* y) +// { +// s32 devices = SDL_GetNumTouchDevices(); +// s32 width = 0, height = 0; +// SDL_GetWindowSize(studioImpl.window, &width, &height); - for (s32 i = 0; i < devices; i++) - { - SDL_TouchID id = SDL_GetTouchDevice(i); +// for (s32 i = 0; i < devices; i++) +// { +// SDL_TouchID id = SDL_GetTouchDevice(i); - // very strange, but on Android id always == 0 - //if (id) - { - s32 fingers = SDL_GetNumTouchFingers(id); +// // very strange, but on Android id always == 0 +// //if (id) +// { +// s32 fingers = SDL_GetNumTouchFingers(id); - if(fingers) - { - studioImpl.gamepad.counter = 0; +// if(fingers) +// { +// studioImpl.gamepad.counter = 0; - if (!studioImpl.gamepad.show) - { - studioImpl.gamepad.alpha = getConfig()->theme.gamepad.touch.alpha; - SDL_SetTextureAlphaMod(studioImpl.gamepad.texture, studioImpl.gamepad.alpha); - studioImpl.gamepad.show = true; - return false; - } - } +// if (!studioImpl.gamepad.show) +// { +// studioImpl.gamepad.alpha = getConfig()->theme.gamepad.touch.alpha; +// SDL_SetTextureAlphaMod(studioImpl.gamepad.texture, studioImpl.gamepad.alpha); +// studioImpl.gamepad.show = true; +// return false; +// } +// } - for (s32 f = 0; f < fingers; f++) - { - SDL_Finger* finger = SDL_GetTouchFinger(id, f); +// for (s32 f = 0; f < fingers; f++) +// { +// SDL_Finger* finger = SDL_GetTouchFinger(id, f); - if (finger && finger->pressure > 0.0f) - { - SDL_Point point = { (s32)(finger->x * width), (s32)(finger->y * height) }; - if (SDL_PointInRect(&point, rect)) - { - *x = point.x; - *y = point.y; - return true; - } - } - } - } - } +// if (finger && finger->pressure > 0.0f) +// { +// SDL_Point point = { (s32)(finger->x * width), (s32)(finger->y * height) }; +// if (SDL_PointInRect(&point, rect)) +// { +// *x = point.x; +// *y = point.y; +// return true; +// } +// } +// } +// } +// } - return false; -} +// return false; +// } -static void processTouchGamepad() -{ - studioImpl.gamepad.touch.data = 0; +// static void processTouchGamepad() +// { +// studioImpl.gamepad.touch.data = 0; - const s32 size = studioImpl.gamepad.part.size; - s32 x = 0, y = 0; +// const s32 size = studioImpl.gamepad.part.size; +// s32 x = 0, y = 0; - { - SDL_Rect axis = {studioImpl.gamepad.part.axis.x, studioImpl.gamepad.part.axis.y, size*3, size*3}; +// { +// SDL_Rect axis = {studioImpl.gamepad.part.axis.x, studioImpl.gamepad.part.axis.y, size*3, size*3}; - if(checkTouch(&axis, &x, &y)) - { - x -= axis.x; - y -= axis.y; +// if(checkTouch(&axis, &x, &y)) +// { +// x -= axis.x; +// y -= axis.y; - s32 xt = x / size; - s32 yt = y / size; +// s32 xt = x / size; +// s32 yt = y / size; - if(yt == 0) studioImpl.gamepad.touch.first.up = true; - else if(yt == 2) studioImpl.gamepad.touch.first.down = true; +// if(yt == 0) studioImpl.gamepad.touch.first.up = true; +// else if(yt == 2) studioImpl.gamepad.touch.first.down = true; - if(xt == 0) studioImpl.gamepad.touch.first.left = true; - else if(xt == 2) studioImpl.gamepad.touch.first.right = true; +// if(xt == 0) studioImpl.gamepad.touch.first.left = true; +// else if(xt == 2) studioImpl.gamepad.touch.first.right = true; - if(xt == 1 && yt == 1) - { - xt = (x - size)/(size/3); - yt = (y - size)/(size/3); +// if(xt == 1 && yt == 1) +// { +// xt = (x - size)/(size/3); +// yt = (y - size)/(size/3); - if(yt == 0) studioImpl.gamepad.touch.first.up = true; - else if(yt == 2) studioImpl.gamepad.touch.first.down = true; +// if(yt == 0) studioImpl.gamepad.touch.first.up = true; +// else if(yt == 2) studioImpl.gamepad.touch.first.down = true; - if(xt == 0) studioImpl.gamepad.touch.first.left = true; - else if(xt == 2) studioImpl.gamepad.touch.first.right = true; - } - } - } +// if(xt == 0) studioImpl.gamepad.touch.first.left = true; +// else if(xt == 2) studioImpl.gamepad.touch.first.right = true; +// } +// } +// } - { - SDL_Rect a = {studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y, size, size}; - if(checkTouch(&a, &x, &y)) studioImpl.gamepad.touch.first.a = true; - } +// { +// SDL_Rect a = {studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y, size, size}; +// if(checkTouch(&a, &x, &y)) studioImpl.gamepad.touch.first.a = true; +// } - { - SDL_Rect b = {studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y, size, size}; - if(checkTouch(&b, &x, &y)) studioImpl.gamepad.touch.first.b = true; - } +// { +// SDL_Rect b = {studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y, size, size}; +// if(checkTouch(&b, &x, &y)) studioImpl.gamepad.touch.first.b = true; +// } - { - SDL_Rect xb = {studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y, size, size}; - if(checkTouch(&xb, &x, &y)) studioImpl.gamepad.touch.first.x = true; - } +// { +// SDL_Rect xb = {studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y, size, size}; +// if(checkTouch(&xb, &x, &y)) studioImpl.gamepad.touch.first.x = true; +// } - { - SDL_Rect yb = {studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y, size, size}; - if(checkTouch(&yb, &x, &y)) studioImpl.gamepad.touch.first.y = true; - } -} +// { +// SDL_Rect yb = {studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y, size, size}; +// if(checkTouch(&yb, &x, &y)) studioImpl.gamepad.touch.first.y = true; +// } +// } -#endif +// #endif -static s32 getAxisMask(SDL_Joystick* joystick) -{ - s32 mask = 0; +// static s32 getAxisMask(SDL_Joystick* joystick) +// { +// s32 mask = 0; - s32 axesCount = SDL_JoystickNumAxes(joystick); +// s32 axesCount = SDL_JoystickNumAxes(joystick); - for (s32 a = 0; a < axesCount; a++) - { - s32 axe = SDL_JoystickGetAxis(joystick, a); +// for (s32 a = 0; a < axesCount; a++) +// { +// s32 axe = SDL_JoystickGetAxis(joystick, a); - if (axe) - { - if (a == 0) - { - if (axe > 16384) mask |= SDL_HAT_RIGHT; - else if(axe < -16384) mask |= SDL_HAT_LEFT; - } - else if (a == 1) - { - if (axe > 16384) mask |= SDL_HAT_DOWN; - else if (axe < -16384) mask |= SDL_HAT_UP; - } - } - } +// if (axe) +// { +// if (a == 0) +// { +// if (axe > 16384) mask |= SDL_HAT_RIGHT; +// else if(axe < -16384) mask |= SDL_HAT_LEFT; +// } +// else if (a == 1) +// { +// if (axe > 16384) mask |= SDL_HAT_DOWN; +// else if (axe < -16384) mask |= SDL_HAT_UP; +// } +// } +// } - return mask; -} +// return mask; +// } -static s32 getJoystickHatMask(s32 hat) -{ - tic80_gamepads gamepad; - gamepad.data = 0; +// static s32 getJoystickHatMask(s32 hat) +// { +// tic80_gamepads gamepad; +// gamepad.data = 0; - gamepad.first.up = hat & SDL_HAT_UP; - gamepad.first.down = hat & SDL_HAT_DOWN; - gamepad.first.left = hat & SDL_HAT_LEFT; - gamepad.first.right = hat & SDL_HAT_RIGHT; +// gamepad.first.up = hat & SDL_HAT_UP; +// gamepad.first.down = hat & SDL_HAT_DOWN; +// gamepad.first.left = hat & SDL_HAT_LEFT; +// gamepad.first.right = hat & SDL_HAT_RIGHT; - return gamepad.data; -} +// return gamepad.data; +// } static bool isGameMenu() { return (studioImpl.mode == TIC_RUN_MODE && studioImpl.console->showGameMenu) || studioImpl.mode == TIC_MENU_MODE; } -static void processJoysticksWithMouseInput() -{ - s32 index = 0; +// static void processJoysticksWithMouseInput() +// { +// s32 index = 0; - for(s32 i = 0; i < COUNT_OF(studioImpl.joysticks); i++) - { - SDL_Joystick* joystick = studioImpl.joysticks[i]; +// for(s32 i = 0; i < COUNT_OF(studioImpl.joysticks); i++) +// { +// SDL_Joystick* joystick = studioImpl.joysticks[i]; - if(joystick && SDL_JoystickGetAttached(joystick)) - { - tic80_gamepad* gamepad = NULL; +// if(joystick && SDL_JoystickGetAttached(joystick)) +// { +// tic80_gamepad* gamepad = NULL; - switch(index) - { - case 0: gamepad = &studioImpl.gamepad.joystick.first; break; - case 1: gamepad = &studioImpl.gamepad.joystick.second; break; - } +// switch(index) +// { +// case 0: gamepad = &studioImpl.gamepad.joystick.first; break; +// case 1: gamepad = &studioImpl.gamepad.joystick.second; break; +// } - if(gamepad) - { - s32 numButtons = SDL_JoystickNumButtons(joystick); - for(s32 i = 5; i < numButtons; i++) - { - s32 back = SDL_JoystickGetButton(joystick, i); +// if(gamepad) +// { +// s32 numButtons = SDL_JoystickNumButtons(joystick); +// for(s32 i = 5; i < numButtons; i++) +// { +// s32 back = SDL_JoystickGetButton(joystick, i); - if(back) - { - if(!studioImpl.gamepad.backProcessed) - { - if(isGameMenu()) - { - studioImpl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); - studioImpl.gamepad.backProcessed = true; - } - } +// if(back) +// { +// if(!studioImpl.gamepad.backProcessed) +// { +// if(isGameMenu()) +// { +// studioImpl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); +// studioImpl.gamepad.backProcessed = true; +// } +// } - return; - } - } +// return; +// } +// } - studioImpl.gamepad.backProcessed = false; +// studioImpl.gamepad.backProcessed = false; - index++; - } - } - } -} +// index++; +// } +// } +// } +// } -static void processJoysticks() -{ - studioImpl.gamepad.joystick.data = 0; - s32 index = 0; +// static void processJoysticks() +// { +// studioImpl.gamepad.joystick.data = 0; +// s32 index = 0; - for(s32 i = 0; i < COUNT_OF(studioImpl.joysticks); i++) - { - SDL_Joystick* joystick = studioImpl.joysticks[i]; +// for(s32 i = 0; i < COUNT_OF(studioImpl.joysticks); i++) +// { +// SDL_Joystick* joystick = studioImpl.joysticks[i]; - if(joystick && SDL_JoystickGetAttached(joystick)) - { - tic80_gamepad* gamepad = NULL; +// if(joystick && SDL_JoystickGetAttached(joystick)) +// { +// tic80_gamepad* gamepad = NULL; - switch(index) - { - case 0: gamepad = &studioImpl.gamepad.joystick.first; break; - case 1: gamepad = &studioImpl.gamepad.joystick.second; break; - } +// switch(index) +// { +// case 0: gamepad = &studioImpl.gamepad.joystick.first; break; +// case 1: gamepad = &studioImpl.gamepad.joystick.second; break; +// } - if(gamepad) - { - gamepad->data |= getJoystickHatMask(getAxisMask(joystick)); +// if(gamepad) +// { +// gamepad->data |= getJoystickHatMask(getAxisMask(joystick)); - for (s32 h = 0; h < SDL_JoystickNumHats(joystick); h++) - gamepad->data |= getJoystickHatMask(SDL_JoystickGetHat(joystick, h)); +// for (s32 h = 0; h < SDL_JoystickNumHats(joystick); h++) +// gamepad->data |= getJoystickHatMask(SDL_JoystickGetHat(joystick, h)); - s32 numButtons = SDL_JoystickNumButtons(joystick); - if(numButtons >= 2) - { - gamepad->a = SDL_JoystickGetButton(joystick, 0); - gamepad->b = SDL_JoystickGetButton(joystick, 1); +// s32 numButtons = SDL_JoystickNumButtons(joystick); +// if(numButtons >= 2) +// { +// gamepad->a = SDL_JoystickGetButton(joystick, 0); +// gamepad->b = SDL_JoystickGetButton(joystick, 1); - if(numButtons >= 4) - { - gamepad->x = SDL_JoystickGetButton(joystick, 2); - gamepad->y = SDL_JoystickGetButton(joystick, 3); +// if(numButtons >= 4) +// { +// gamepad->x = SDL_JoystickGetButton(joystick, 2); +// gamepad->y = SDL_JoystickGetButton(joystick, 3); - for(s32 i = 5; i < numButtons; i++) - { - s32 back = SDL_JoystickGetButton(joystick, i); +// for(s32 i = 5; i < numButtons; i++) +// { +// s32 back = SDL_JoystickGetButton(joystick, i); - if(back) - { - if(!studioImpl.gamepad.backProcessed) - { - if(isGameMenu()) - { - studioImpl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); - studioImpl.gamepad.backProcessed = true; - } - } +// if(back) +// { +// if(!studioImpl.gamepad.backProcessed) +// { +// if(isGameMenu()) +// { +// studioImpl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); +// studioImpl.gamepad.backProcessed = true; +// } +// } - return; - } - } +// return; +// } +// } - studioImpl.gamepad.backProcessed = false; - } - } +// studioImpl.gamepad.backProcessed = false; +// } +// } - index++; - } - } - } +// index++; +// } +// } +// } - if(studioImpl.mode == TIC_CONSOLE_MODE && studioImpl.gamepad.joystick.data) - { - studioImpl.gamepad.joystick.data = 0; - setStudioMode(TIC_SURF_MODE); - } -} +// if(studioImpl.mode == TIC_CONSOLE_MODE && studioImpl.gamepad.joystick.data) +// { +// studioImpl.gamepad.joystick.data = 0; +// setStudioMode(TIC_SURF_MODE); +// } +// } -static void processGamepad() -{ - studioImpl.studio.tic->ram.input.gamepads.data = 0; +// static void processGamepad() +// { +// studioImpl.studio.tic->ram.input.gamepads.data = 0; - studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.keyboard.data; - studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.touch.data; - studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.joystick.data; -} +// studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.keyboard.data; +// studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.touch.data; +// studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.joystick.data; +// } static void processGesture() { @@ -1800,7 +1796,7 @@ static bool processShortcuts(SDL_KeyboardEvent* event) case SDLK_ESCAPE: case SDLK_AC_BACK: studioImpl.mode == TIC_MENU_MODE ? hideGameMenu() : showGameMenu(); - studioImpl.gamepad.backProcessed = true; + // studioImpl.gamepad.backProcessed = true; return true; case SDLK_F11: goFullscreen(); @@ -1929,16 +1925,23 @@ static bool processShortcuts(SDL_KeyboardEvent* event) return false; } -static void processGamepadInput() -{ - processKeyboard(); +// static void processGamepad() +// { +// // processKeyboardGamepad(); -#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) - processTouchGamepad(); -#endif - processJoysticks(); - processGamepad(); -} +// #if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__) +// processTouchGamepad(); +// #endif +// processJoysticks(); + +// { +// studioImpl.studio.tic->ram.input.gamepads.data = 0; + +// // studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.keyboard.data; +// studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.touch.data; +// studioImpl.studio.tic->ram.input.gamepads.data |= studioImpl.gamepad.joystick.data; +// } +// } // static void processMouseInput() // { @@ -2523,53 +2526,53 @@ static void renderStudio() // studioImpl.gamepad.part.y = (SDL_Point){rect.w - 2*tileSize, 0*tileSize + offset}; // } -static void renderGamepad() -{ - if(studioImpl.gamepad.show || studioImpl.gamepad.alpha); else return; +// static void renderGamepad() +// { +// if(studioImpl.gamepad.show || studioImpl.gamepad.alpha); else return; - const s32 tileSize = studioImpl.gamepad.part.size; - const SDL_Point axis = studioImpl.gamepad.part.axis; - typedef struct { bool press; s32 x; s32 y;} Tile; - const Tile Tiles[] = - { - {studioImpl.studio.tic->ram.input.gamepads.first.up, axis.x + 1*tileSize, axis.y + 0*tileSize}, - {studioImpl.studio.tic->ram.input.gamepads.first.down, axis.x + 1*tileSize, axis.y + 2*tileSize}, - {studioImpl.studio.tic->ram.input.gamepads.first.left, axis.x + 0*tileSize, axis.y + 1*tileSize}, - {studioImpl.studio.tic->ram.input.gamepads.first.right, axis.x + 2*tileSize, axis.y + 1*tileSize}, +// const s32 tileSize = studioImpl.gamepad.part.size; +// const SDL_Point axis = studioImpl.gamepad.part.axis; +// typedef struct { bool press; s32 x; s32 y;} Tile; +// const Tile Tiles[] = +// { +// {studioImpl.studio.tic->ram.input.gamepads.first.up, axis.x + 1*tileSize, axis.y + 0*tileSize}, +// {studioImpl.studio.tic->ram.input.gamepads.first.down, axis.x + 1*tileSize, axis.y + 2*tileSize}, +// {studioImpl.studio.tic->ram.input.gamepads.first.left, axis.x + 0*tileSize, axis.y + 1*tileSize}, +// {studioImpl.studio.tic->ram.input.gamepads.first.right, axis.x + 2*tileSize, axis.y + 1*tileSize}, - {studioImpl.studio.tic->ram.input.gamepads.first.a, studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y}, - {studioImpl.studio.tic->ram.input.gamepads.first.b, studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y}, - {studioImpl.studio.tic->ram.input.gamepads.first.x, studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y}, - {studioImpl.studio.tic->ram.input.gamepads.first.y, studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y}, - }; +// {studioImpl.studio.tic->ram.input.gamepads.first.a, studioImpl.gamepad.part.a.x, studioImpl.gamepad.part.a.y}, +// {studioImpl.studio.tic->ram.input.gamepads.first.b, studioImpl.gamepad.part.b.x, studioImpl.gamepad.part.b.y}, +// {studioImpl.studio.tic->ram.input.gamepads.first.x, studioImpl.gamepad.part.x.x, studioImpl.gamepad.part.x.y}, +// {studioImpl.studio.tic->ram.input.gamepads.first.y, studioImpl.gamepad.part.y.x, studioImpl.gamepad.part.y.y}, +// }; - enum {ButtonsCount = 8}; +// enum {ButtonsCount = 8}; - for(s32 i = 0; i < COUNT_OF(Tiles); i++) - { - const Tile* tile = Tiles + i; - SDL_Rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE}; - SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize}; +// for(s32 i = 0; i < COUNT_OF(Tiles); i++) +// { +// const Tile* tile = Tiles + i; +// SDL_Rect src = {(tile->press ? ButtonsCount + i : i) * TIC_SPRITESIZE, 0, TIC_SPRITESIZE, TIC_SPRITESIZE}; +// SDL_Rect dest = {tile->x, tile->y, tileSize, tileSize}; - SDL_RenderCopy(studioImpl.renderer, studioImpl.gamepad.texture, &src, &dest); - } +// SDL_RenderCopy(studioImpl.renderer, studioImpl.gamepad.texture, &src, &dest); +// } - if(!studioImpl.gamepad.show && studioImpl.gamepad.alpha) - { - enum {Step = 3}; +// if(!studioImpl.gamepad.show && studioImpl.gamepad.alpha) +// { +// enum {Step = 3}; - if(studioImpl.gamepad.alpha - Step >= 0) studioImpl.gamepad.alpha -= Step; - else studioImpl.gamepad.alpha = 0; +// if(studioImpl.gamepad.alpha - Step >= 0) studioImpl.gamepad.alpha -= Step; +// else studioImpl.gamepad.alpha = 0; - SDL_SetTextureAlphaMod(studioImpl.gamepad.texture, studioImpl.gamepad.alpha); - } +// SDL_SetTextureAlphaMod(studioImpl.gamepad.texture, studioImpl.gamepad.alpha); +// } - studioImpl.gamepad.counter = studioImpl.gamepad.touch.data ? 0 : studioImpl.gamepad.counter+1; +// studioImpl.gamepad.counter = studioImpl.gamepad.touch.data ? 0 : studioImpl.gamepad.counter+1; - // wait 5 seconds and hide touch gamepad - if(studioImpl.gamepad.counter >= 5 * TIC_FRAMERATE) - studioImpl.gamepad.show = false; -} +// // wait 5 seconds and hide touch gamepad +// if(studioImpl.gamepad.counter >= 5 * TIC_FRAMERATE) +// studioImpl.gamepad.show = false; +// } // static void tick() // { @@ -2726,18 +2729,18 @@ u32 unzip(u8** dest, const u8* source, size_t size) static void initKeymap() { - FileSystem* fs = studioImpl.fs; + // FileSystem* fs = studioImpl.fs; - s32 size = 0; - u8* data = (u8*)fsLoadFile(fs, KEYMAP_DAT_PATH, &size); + // s32 size = 0; + // u8* data = (u8*)fsLoadFile(fs, KEYMAP_DAT_PATH, &size); - if(data) - { - if(size == KEYMAP_SIZE) - memcpy(getKeymap(), data, KEYMAP_SIZE); + // if(data) + // { + // if(size == KEYMAP_SIZE) + // memcpy(getKeymap(), data, KEYMAP_SIZE); - SDL_free(data); - } + // SDL_free(data); + // } } static void onFSInitialized(FileSystem* fs) @@ -2918,6 +2921,7 @@ static void processMouseStates() void studioTick(void* pixels) { processMouseStates(); + processGamepadMapping(); renderStudio(); @@ -2990,7 +2994,7 @@ void studioClose() // if(studioImpl.audio.cvt.buf) // SDL_free(studioImpl.audio.cvt.buf); - SDL_DestroyTexture(studioImpl.gamepad.texture); + // SDL_DestroyTexture(studioImpl.gamepad.texture); // SDL_DestroyTexture(studioImpl.texture); // if(studioImpl.mouse.texture) diff --git a/src/studio.h b/src/studio.h index 254c702..3e9abae 100644 --- a/src/studio.h +++ b/src/studio.h @@ -55,8 +55,8 @@ #define CONFIG_TIC "config " TIC_VERSION_LABEL ".tic" #define CONFIG_TIC_PATH TIC_LOCAL CONFIG_TIC -#define KEYMAP_COUNT (sizeof(tic80_input) * BITS_IN_BYTE) -#define KEYMAP_SIZE (KEYMAP_COUNT * sizeof(SDL_Scancode)) +#define KEYMAP_COUNT (sizeof(tic80_gamepads) * BITS_IN_BYTE) +#define KEYMAP_SIZE (KEYMAP_COUNT) #define KEYMAP_DAT "keymap.dat" #define KEYMAP_DAT_PATH TIC_LOCAL KEYMAP_DAT @@ -174,7 +174,7 @@ typedef enum void setStudioEvent(StudioEvent event); void showTooltip(const char* text); -SDL_Scancode* getKeymap(); +tic_key* getKeymap(); const StudioConfig* getConfig();