From 4d97ad1f34e2cc43cccae1e65bcf27d09af1210d Mon Sep 17 00:00:00 2001 From: giongto35 Date: Tue, 14 Jan 2020 03:49:01 +0800 Subject: [PATCH] Fix bug, add more game port --- pkg/emulator/libretro/nanoarch/naemulator.go | 18 +++++++++--------- pkg/emulator/libretro/nanoarch/nanoarch.go | 18 ++---------------- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/pkg/emulator/libretro/nanoarch/naemulator.go b/pkg/emulator/libretro/nanoarch/naemulator.go index f43355c4..202f4414 100644 --- a/pkg/emulator/libretro/nanoarch/naemulator.go +++ b/pkg/emulator/libretro/nanoarch/naemulator.go @@ -58,8 +58,8 @@ type naEmulator struct { gameName string isSavingLoading bool - keys []bool - done chan struct{} + keysMap map[string][]int + done chan struct{} // lock to lock uninteruptable operation lock *sync.Mutex @@ -74,6 +74,8 @@ type InputEvent struct { var NAEmulator *naEmulator var outputImg *image.RGBA +const maxPort = 8 + // NAEmulator implements CloudEmulator interface based on NanoArch(golang RetroArch) func NewNAEmulator(etype string, roomID string, inputChannel <-chan InputEvent) (*naEmulator, chan *image.RGBA, chan []int16) { meta := config.EmulatorConfig[etype] @@ -85,15 +87,13 @@ func NewNAEmulator(etype string, roomID string, inputChannel <-chan InputEvent) imageChannel: imageChannel, audioChannel: audioChannel, inputChannel: inputChannel, - keys: make([]bool, joypadNumKeys*4), + keysMap: map[string][]int{}, roomID: roomID, done: make(chan struct{}, 1), lock: &sync.Mutex{}, }, imageChannel, audioChannel } -var keysMap = map[string][]int{} - // Init initialize new RetroArch cloud emulator func Init(etype string, roomID string, inputChannel <-chan InputEvent) (*naEmulator, chan *image.RGBA, chan []int16) { emulator, imageChannel, audioChannel := NewNAEmulator(etype, roomID, inputChannel) @@ -112,15 +112,15 @@ func (na *naEmulator) listenInput() { if inpBitmap == -1 { // terminated - delete(keysMap, inpEvent.ConnID) + delete(na.keysMap, inpEvent.ConnID) continue } - if _, ok := keysMap[inpEvent.ConnID]; !ok { - keysMap[inpEvent.ConnID] = make([]int, 4) + if _, ok := na.keysMap[inpEvent.ConnID]; !ok { + na.keysMap[inpEvent.ConnID] = make([]int, maxPort) } - keysMap[inpEvent.ConnID][inpEvent.PlayerIdx] = inpBitmap + na.keysMap[inpEvent.ConnID][inpEvent.PlayerIdx] = inpBitmap } } diff --git a/pkg/emulator/libretro/nanoarch/nanoarch.go b/pkg/emulator/libretro/nanoarch/nanoarch.go index d7054c99..3d59a57a 100644 --- a/pkg/emulator/libretro/nanoarch/nanoarch.go +++ b/pkg/emulator/libretro/nanoarch/nanoarch.go @@ -64,25 +64,11 @@ var video struct { } const bufSize = 1024 * 4 - const joypadNumKeys = int(C.RETRO_DEVICE_ID_JOYPAD_R3 + 1) var joy [joypadNumKeys]bool var ewidth, eheight int -var bindRetroKeys = map[int]int{ - 0: C.RETRO_DEVICE_ID_JOYPAD_A, - 1: C.RETRO_DEVICE_ID_JOYPAD_B, - 2: C.RETRO_DEVICE_ID_JOYPAD_X, - 3: C.RETRO_DEVICE_ID_JOYPAD_Y, - 4: C.RETRO_DEVICE_ID_JOYPAD_SELECT, - 5: C.RETRO_DEVICE_ID_JOYPAD_START, - 6: C.RETRO_DEVICE_ID_JOYPAD_UP, - 7: C.RETRO_DEVICE_ID_JOYPAD_DOWN, - 8: C.RETRO_DEVICE_ID_JOYPAD_LEFT, - 9: C.RETRO_DEVICE_ID_JOYPAD_RIGHT, -} - var bindKeysMap = map[int]int{ C.RETRO_DEVICE_ID_JOYPAD_A: 0, C.RETRO_DEVICE_ID_JOYPAD_B: 1, @@ -142,8 +128,8 @@ func coreInputState(port C.unsigned, device C.unsigned, index C.unsigned, id C.u } // check if any player is pressing that key - for k := range keysMap { - if ((keysMap[k][port] >> uint(key)) & 1) == 1 { + for k := range NAEmulator.keysMap { + if ((NAEmulator.keysMap[k][port] >> uint(key)) & 1) == 1 { return 1 } }