Working on input... working on the entry point
This commit is contained in:
parent
e93827de46
commit
0498f7ce25
7 changed files with 325 additions and 4 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,6 +1,11 @@
|
|||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Misc
|
||||
/obj
|
||||
Config.dat
|
||||
Profile.dat
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
|
|
4
Makefile
4
Makefile
|
@ -11,6 +11,9 @@ endif
|
|||
ifeq ($(JAPANESE), 1)
|
||||
CXXFLAGS += -DJAPANESE
|
||||
endif
|
||||
ifeq ($(FIX_BUGS), 1)
|
||||
CXXFLAGS += -DFIX_BUGS
|
||||
endif
|
||||
|
||||
CXXFLAGS += `sdl2-config --cflags`
|
||||
LIBS += `sdl2-config --static-libs`
|
||||
|
@ -18,6 +21,7 @@ LIBS += `sdl2-config --static-libs`
|
|||
# For an accurate result to the original's code, compile in alphabetical order
|
||||
SOURCES = \
|
||||
Config \
|
||||
Input \
|
||||
KeyControl \
|
||||
Main \
|
||||
|
||||
|
|
68
src/Input.cpp
Normal file
68
src/Input.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "Types.h"
|
||||
#include <stdint.h>
|
||||
#include <SDL_gamepad.h>
|
||||
#include "Input.h"
|
||||
|
||||
#define JOYSTICK_DEADZONE 0x2000
|
||||
|
||||
bool gbUseJoystick;
|
||||
int gJoystickButtonTable[8];
|
||||
|
||||
SDL_GameController *joystick; //This may be a name that was given by Simon, but it fits the rest of Pixel's names so it's fine.
|
||||
|
||||
void ReleaseDirectInput()
|
||||
{
|
||||
//Close opened joystick (if exists)
|
||||
if (joystick)
|
||||
{
|
||||
SDL_GameControllerClose(joystick);
|
||||
joystick = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool InitDirectInput()
|
||||
{
|
||||
//Open first available joystick
|
||||
for (int i = 0; i < SDL_NumJoysticks(); ++i)
|
||||
{
|
||||
if (SDL_IsGameController(i))
|
||||
{
|
||||
joystick = SDL_GameControllerOpen(i);
|
||||
|
||||
//Break as soon as a joystick is properly opened
|
||||
if (joystick)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
signed int GetJoystickStatus(JOYSTICK_STATUS *pStatus)
|
||||
{
|
||||
//Clear status
|
||||
memset(pStatus, 0, sizeof(JOYSTICK_STATUS));
|
||||
|
||||
if (joystick)
|
||||
{
|
||||
int32_t x = SDL_GameControllerGetAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX);
|
||||
int32_t y = SDL_GameControllerGetAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY);
|
||||
pStatus->bLeft = x <= -JOYSTICK_DEADZONE;
|
||||
pStatus->bRight = x >= JOYSTICK_DEADZONE;
|
||||
pStatus->bUp = v2 <= -JOYSTICK_DEADZONE;
|
||||
pStatus->bDown = v2 >= JOYSTICK_DEADZONE;
|
||||
|
||||
int numButtons = SDL_GameControllerNumButtons(joystick);
|
||||
if (numButtons > 32)
|
||||
numButtons = 32;
|
||||
|
||||
for (int button = 0; button < numButtons; button++)
|
||||
pStatus->bButton[button] = SDL_GameControllerGetButton(joystick, button) != 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
signed int ResetJoystickStatus()
|
||||
{
|
||||
return 1;
|
||||
}
|
12
src/Input.h
Normal file
12
src/Input.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
extern bool gbUseJoystick;
|
||||
extern int gJoystickButtonTable[8];
|
||||
|
||||
struct JOYSTICK_STATUS
|
||||
{
|
||||
bool bLeft;
|
||||
bool bRight;
|
||||
bool bUp;
|
||||
bool bDown;
|
||||
bool bButton[32];
|
||||
};
|
|
@ -1,5 +1,4 @@
|
|||
#include "KeyControl.h"
|
||||
|
||||
int gKey;
|
||||
int gKeyTrg;
|
||||
|
||||
|
|
|
@ -8,12 +8,14 @@ enum KEYBIND
|
|||
KEY_DOWN = 0x00000008,
|
||||
//Map key
|
||||
KEY_MAP = 0x00000010,
|
||||
//Okay and cancel keys
|
||||
//Okay and cancel / Jump and Shoot keys
|
||||
KEY_X = 0x00000020,
|
||||
KEY_Z = 0x00000040,
|
||||
//Left and right weapon switch keys
|
||||
KEY_ARMS = 0x00000080,
|
||||
KEY_ARMSREV = 0x00000100,
|
||||
//Unused?
|
||||
KEY_SHIFT = 0x00000200,
|
||||
//Function keys
|
||||
KEY_F1 = 0x00000400,
|
||||
KEY_F2 = 0x00000800,
|
||||
|
@ -23,9 +25,12 @@ enum KEYBIND
|
|||
KEY_ESCAPE = 0x00008000,
|
||||
//The alt movement keys go in the order of left, up, right and down
|
||||
KEY_ALT_LEFT = 0x00010000,
|
||||
KEY_ALT_UP = 0x00020000,
|
||||
KEY_ALT_DOWN = 0x00020000,
|
||||
KEY_ALT_RIGHT = 0x00040000,
|
||||
KEY_ALT_DOWN = 0x00080000,
|
||||
KEY_ALT_UP = 0x00180000,
|
||||
//Alt up actually has 2 seperate keys, but they're kind of merged together (and also for some reason the second one is +/=)
|
||||
KEY_L = 0x00080000,
|
||||
KEY_PLUS = 0x00100000,
|
||||
};
|
||||
|
||||
extern int gKey;
|
||||
|
|
228
src/Main.cpp
228
src/Main.cpp
|
@ -10,6 +10,7 @@
|
|||
#include <SDL_filesystem.h>
|
||||
#include <SDL_events.h>
|
||||
|
||||
#include "Input.h"
|
||||
#include "Config.h"
|
||||
#include "KeyControl.h"
|
||||
|
||||
|
@ -83,5 +84,232 @@ int main(int argc, char *argv[])
|
|||
gKeyDown = KEY_DOWN;
|
||||
}
|
||||
|
||||
//Set gamepad inputs
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
switch (config.joystick_button[i])
|
||||
{
|
||||
case 1:
|
||||
gJoystickButtonTable[i] = gKeyJump;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
gJoystickButtonTable[i] = gKeyShot;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
gJoystickButtonTable[i] = gKeyArms;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
gJoystickButtonTable[i] = gKeyArmsRev;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
gJoystickButtonTable[i] = gKeyItem;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
gJoystickButtonTable[i] = gKeyMap;
|
||||
break;
|
||||
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool SystemTask()
|
||||
{
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event))
|
||||
{
|
||||
switch (event.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
return false;
|
||||
break;
|
||||
|
||||
case SDL_KEYDOWN:
|
||||
switch (event.key.keysym.scancode)
|
||||
{
|
||||
case SDL_SCANCODE_ESCAPE:
|
||||
gKey |= KEY_ESCAPE;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_W:
|
||||
gKey |= KEY_MAP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_LEFT:
|
||||
gKey |= KEY_LEFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_RIGHT:
|
||||
gKey |= KEY_RIGHT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_UP:
|
||||
gKey |= KEY_UP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_DOWN:
|
||||
gKey |= KEY_DOWN;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_X:
|
||||
gKey |= KEY_X;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_Z:
|
||||
gKey |= KEY_Z;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_S:
|
||||
gKey |= KEY_ARMS;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_A:
|
||||
gKey |= KEY_ARMSREV;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_RSHIFT:
|
||||
case SDL_SCANCODE_LSHIFT:
|
||||
gKey |= KEY_SHIFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_F1:
|
||||
gKey |= KEY_F1;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_F2:
|
||||
gKey |= KEY_F2;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_Q:
|
||||
gKey |= KEY_ITEM;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_COMMA:
|
||||
gKey |= KEY_ALT_LEFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_PERIOD:
|
||||
gKey |= KEY_ALT_DOWN;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_SLASH:
|
||||
gKey |= KEY_ALT_RIGHT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_L:
|
||||
gKey |= KEY_ALT_UP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_EQUALS:
|
||||
gKey |= KEY_PLUS;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_F5:
|
||||
gbUseJoystick = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_KEYUP:
|
||||
switch (event.key.keysym.scancode)
|
||||
{
|
||||
case SDL_SCANCODE_ESCAPE:
|
||||
gKey &= ~KEY_ESCAPE;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_W:
|
||||
gKey &= ~KEY_MAP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_LEFT:
|
||||
gKey &= ~KEY_LEFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_RIGHT:
|
||||
gKey &= ~KEY_RIGHT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_UP:
|
||||
gKey &= ~KEY_UP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_DOWN:
|
||||
gKey &= ~KEY_DOWN;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_X:
|
||||
gKey &= ~KEY_X;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_Z:
|
||||
gKey &= ~KEY_Z;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_S:
|
||||
gKey &= ~KEY_ARMS;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_A:
|
||||
gKey &= ~KEY_ARMSREV;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_RSHIFT:
|
||||
case SDL_SCANCODE_LSHIFT:
|
||||
gKey &= ~KEY_SHIFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_F1:
|
||||
gKey &= ~KEY_F1;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_F2:
|
||||
gKey &= ~KEY_F2;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_Q:
|
||||
gKey &= ~KEY_ITEM;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_COMMA:
|
||||
gKey &= ~KEY_ALT_LEFT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_PERIOD:
|
||||
gKey &= ~KEY_ALT_DOWN;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_SLASH:
|
||||
gKey &= ~KEY_ALT_RIGHT;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_L:
|
||||
gKey &= ~KEY_ALT_UP;
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_EQUALS:
|
||||
gKey &= ~KEY_PLUS;
|
||||
break;
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue