diff --git a/Makefile b/Makefile index 77b595e..c80a469 100644 --- a/Makefile +++ b/Makefile @@ -123,7 +123,6 @@ SOURCES=\ src/history.c \ src/world.c \ src/config.c \ - src/keymap.c \ src/code.c \ src/dialog.c \ src/menu.c \ @@ -215,9 +214,6 @@ bin/world.o: src/world.c $(TIC80_H) $(TIC_H) bin/config.o: src/config.c $(TIC80_H) $(TIC_H) $(DEMO_ASSETS) $(CC) $< $(OPT) $(INCLUDES) -c -o $@ -bin/keymap.o: src/keymap.c $(TIC80_H) $(TIC_H) - $(CC) $< $(OPT) $(INCLUDES) -c -o $@ - bin/code.o: src/code.c $(TIC80_H) $(TIC_H) $(CC) $< $(OPT) $(INCLUDES) -c -o $@ @@ -253,7 +249,6 @@ TIC_O=\ bin/history.o \ bin/world.o \ bin/config.o \ - bin/keymap.o \ bin/code.o \ bin/net.o \ bin/dialog.o \ diff --git a/src/console.c b/src/console.c index e20860c..fb38313 100644 --- a/src/console.c +++ b/src/console.c @@ -1293,13 +1293,6 @@ static void onConsoleCodeCommand(Console* console, const char* param) commandDone(console); } - -static void onConsoleKeymapCommand(Console* console, const char* param) -{ - setStudioMode(TIC_KEYMAP_MODE); - commandDone(console); -} - static void onConsoleVersionCommand(Console* console, const char* param) { printBack(console, "\n"); @@ -2242,7 +2235,6 @@ static const struct {"cls", NULL, "clear screen", onConsoleClsCommand}, {"demo", NULL, "install demo carts", onConsoleInstallDemosCommand}, {"config", NULL, "edit TIC config", onConsoleConfigCommand}, - {"keymap", NULL, "configure keyboard mapping", onConsoleKeymapCommand}, {"version", NULL, "show the current version", onConsoleVersionCommand}, {"edit", NULL, "open cart editor", onConsoleCodeCommand}, {"surf", NULL, "open carts browser", onConsoleSurfCommand}, diff --git a/src/keymap.c b/src/keymap.c deleted file mode 100644 index 096d83d..0000000 --- a/src/keymap.c +++ /dev/null @@ -1,178 +0,0 @@ -// MIT License - -// Copyright (c) 2017 Vadim Grigoruk @nesbox // grigoruk@gmail.com - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#include "keymap.h" -#include "fs.h" - -#define BUTTONS_COUNT BITS_IN_BYTE - -static const char* ButtonNames[] = {"UP", "DOWN", "LEFT", "RIGHT", "A", "B", "X", "Y"}; - -static void saveMapping(Keymap* keymap) -{ - fsSaveRootFile(keymap->fs, KEYMAP_DAT_PATH, getKeymap(), KEYMAP_SIZE, true); -} - -static void processKeydown(Keymap* keymap, SDL_Keysym* keysum) -{ - SDL_Scancode scancode = keysum->scancode; - - switch(scancode) - { - case SDL_SCANCODE_ESCAPE: break; - default: - if(keymap->button >= 0) - { - SDL_Scancode* codes = getKeymap(); - codes[keymap->button] = scancode; - keymap->button = -1; - - saveMapping(keymap); - } - } -} - -static void drawPlayer(Keymap* keymap, s32 x, s32 y, s32 id) -{ - { - char label[] = "PLAYER #%i"; - sprintf(label, label, id+1); - keymap->tic->api.text(keymap->tic, label, x, y, (tic_color_white)); - } - - - enum{OffsetX = 32, OffsetY = 16, Height = TIC_FONT_HEIGHT+1, Buttons = BUTTONS_COUNT}; - - y += OffsetY; - - SDL_Scancode* codes = getKeymap(); - - for(s32 i = 0; i < COUNT_OF(ButtonNames); i++) - { - SDL_Rect rect = {x, y + i * Height, (TIC80_WIDTH-OffsetX)/2, Height}; - - bool over = false; - if(checkMousePos(&rect)) - { - setCursor(SDL_SYSTEM_CURSOR_HAND); - over = true; - - if(checkMouseClick(&rect, SDL_BUTTON_LEFT)) - keymap->button = id * Buttons + i; - } - - s32 button = id * Buttons + i; - bool selected = keymap->button == button; - - if(over) - keymap->tic->api.rect(keymap->tic, rect.x-1, rect.y-1, rect.w, rect.h, (tic_color_dark_red)); - - if(selected) - keymap->tic->api.rect(keymap->tic, rect.x-1, rect.y-1, rect.w, rect.h, (tic_color_white)); - - keymap->tic->api.text(keymap->tic, ButtonNames[i], rect.x, rect.y, selected ? (tic_color_black) : (tic_color_gray)); - - keymap->tic->api.text(keymap->tic, SDL_GetKeyName(SDL_GetKeyFromScancode(codes[button])), rect.x + OffsetX, rect.y, selected ? (tic_color_black) : (tic_color_white)); - } -} - -static void drawCenterText(Keymap* keymap, const char* text, s32 y, u8 color) -{ - keymap->tic->api.fixed_text(keymap->tic, text, (TIC80_WIDTH - (s32)strlen(text) * TIC_FONT_WIDTH)/2, y, color); -} - -static void drawKeymap(Keymap* keymap) -{ - keymap->tic->api.rect(keymap->tic, 0, 0, TIC80_WIDTH, TIC_FONT_HEIGHT * 3, (tic_color_white)); - - { - static const char Label[] = "CONFIGURE BUTTONS MAPPING"; - keymap->tic->api.text(keymap->tic, Label, (TIC80_WIDTH - sizeof Label * TIC_FONT_WIDTH)/2, TIC_FONT_HEIGHT, (tic_color_black)); - } - - drawPlayer(keymap, 16, 40, 0); - drawPlayer(keymap, 120+16, 40, 1); - - if(keymap->button < 0) - { - if(keymap->ticks % TIC_FRAMERATE < TIC_FRAMERATE/2) - drawCenterText(keymap, "SELECT BUTTON", 120, (tic_color_white)); - } - else - { - char label[256]; - sprintf(label, "PRESS A KEY FOR '%s'", ButtonNames[keymap->button % BUTTONS_COUNT]); - drawCenterText(keymap, label, 120, (tic_color_white)); - drawCenterText(keymap, "ESC TO CANCEL", 126, (tic_color_white)); - } -} - -static void escape(Keymap* keymap) -{ - if(keymap->button < 0) - setStudioMode(TIC_CONSOLE_MODE); - else keymap->button = -1; -} - -static void tick(Keymap* keymap) -{ - keymap->ticks++; - - SDL_Event* event = NULL; - while ((event = pollEvent())) - { - switch(event->type) - { - case SDL_KEYDOWN: - processKeydown(keymap, &event->key.keysym); - break; - } - } - - keymap->tic->api.clear(keymap->tic, TIC_COLOR_BG); - - drawKeymap(keymap); -} - -void initKeymap(Keymap* keymap, tic_mem* tic, FileSystem* fs) -{ - *keymap = (Keymap) - { - .tic = tic, - .fs = fs, - .tick = tick, - .escape = escape, - .ticks = 0, - .button = -1, - }; - - s32 size = 0; - char* data = (char*)fsLoadFile(fs, KEYMAP_DAT_PATH, &size); - - if(data) - { - if(size == KEYMAP_SIZE) - memcpy(getKeymap(), data, KEYMAP_SIZE); - - SDL_free(data); - } -} \ No newline at end of file diff --git a/src/keymap.h b/src/keymap.h deleted file mode 100644 index 6762478..0000000 --- a/src/keymap.h +++ /dev/null @@ -1,41 +0,0 @@ -// MIT License - -// Copyright (c) 2017 Vadim Grigoruk @nesbox // grigoruk@gmail.com - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#pragma once - -#include "studio.h" - -typedef struct Keymap Keymap; - -struct Keymap -{ - tic_mem* tic; - struct FileSystem* fs; - - s32 ticks; - s32 button; - - void(*tick)(Keymap* keymap); - void(*escape)(Keymap* keymap); -}; - -void initKeymap(Keymap* keymap, tic_mem* tic, struct FileSystem* fs); \ No newline at end of file diff --git a/src/studio.c b/src/studio.c index fa7f676..3433e73 100644 --- a/src/studio.c +++ b/src/studio.c @@ -32,7 +32,6 @@ #include "music.h" #include "history.h" #include "config.h" -#include "keymap.h" #include "code.h" #include "dialog.h" #include "menu.h" @@ -223,7 +222,6 @@ static struct Run* run; World* world; Config* config; - Keymap* keymap; Dialog* dialog; Menu* menu; Surf* surf; @@ -1007,7 +1005,6 @@ void setStudioMode(EditorMode mode) case TIC_START_MODE: case TIC_CONSOLE_MODE: case TIC_RUN_MODE: - case TIC_KEYMAP_MODE: case TIC_DIALOG_MODE: case TIC_MENU_MODE: break; @@ -1851,13 +1848,6 @@ static bool processShortcuts(SDL_KeyboardEvent* event) return true; } - // TODO: move this to keymap - if(studio.mode == TIC_KEYMAP_MODE) - { - studio.keymap->escape(studio.keymap); - return true; - } - if(studio.mode == TIC_DIALOG_MODE) { studio.dialog->escape(studio.dialog); @@ -2418,7 +2408,6 @@ static void renderStudio() break; case TIC_WORLD_MODE: studio.world->tick(studio.world); break; - case TIC_KEYMAP_MODE: studio.keymap->tick(studio.keymap); break; case TIC_DIALOG_MODE: studio.dialog->tick(studio.dialog); break; case TIC_MENU_MODE: studio.menu->tick(studio.menu); break; case TIC_SURF_MODE: studio.surf->tick(studio.surf); break; @@ -2669,6 +2658,22 @@ u32 unzip(u8** dest, const u8* source, size_t size) return 0; } +static void initKeymap() +{ + FileSystem* fs = studio.fs; + + s32 size = 0; + u8* data = (u8*)fsLoadFile(fs, KEYMAP_DAT_PATH, &size); + + if(data) + { + if(size == KEYMAP_SIZE) + memcpy(getKeymap(), data, KEYMAP_SIZE); + + SDL_free(data); + } +} + static void onFSInitialized(FileSystem* fs) { studio.fs = fs; @@ -2709,7 +2714,6 @@ static void onFSInitialized(FileSystem* fs) studio.run = SDL_calloc(1, sizeof(Run)); studio.world = SDL_calloc(1, sizeof(World)); studio.config = SDL_calloc(1, sizeof(Config)); - studio.keymap = SDL_calloc(1, sizeof(Keymap)); studio.dialog = SDL_calloc(1, sizeof(Dialog)); studio.menu = SDL_calloc(1, sizeof(Menu)); studio.surf = SDL_calloc(1, sizeof(Surf)); @@ -2717,7 +2721,8 @@ static void onFSInitialized(FileSystem* fs) fsMakeDir(fs, TIC_LOCAL); initConfig(studio.config, studio.tic, studio.fs); - initKeymap(studio.keymap, studio.tic, studio.fs); + + initKeymap(); initStart(studio.start, studio.tic); initConsole(studio.console, studio.tic, studio.fs, studio.config, studio.argc, studio.argv); @@ -2848,7 +2853,6 @@ s32 main(s32 argc, char **argv) SDL_free(studio.run); SDL_free(studio.world); SDL_free(studio.config); - SDL_free(studio.keymap); SDL_free(studio.dialog); SDL_free(studio.menu); SDL_free(studio.surf); diff --git a/src/studio.h b/src/studio.h index c7769ef..e058117 100644 --- a/src/studio.h +++ b/src/studio.h @@ -116,7 +116,6 @@ typedef enum TIC_WORLD_MODE, TIC_SFX_MODE, TIC_MUSIC_MODE, - TIC_KEYMAP_MODE, TIC_DIALOG_MODE, TIC_MENU_MODE, TIC_SURF_MODE,