Working on input... working on the entry point

This commit is contained in:
GreenDev 2019-01-11 22:04:35 -05:00
parent e93827de46
commit 0498f7ce25
7 changed files with 325 additions and 4 deletions

5
.gitignore vendored
View file

@ -1,6 +1,11 @@
# Prerequisites
*.d
# Misc
/obj
Config.dat
Profile.dat
# Compiled Object files
*.slo
*.lo

View file

@ -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
View 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
View 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];
};

View file

@ -1,5 +1,4 @@
#include "KeyControl.h"
int gKey;
int gKeyTrg;

View file

@ -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;

View file

@ -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;
}