mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-26 11:40:44 +00:00
304 lines
5.5 KiB
C
304 lines
5.5 KiB
C
|
#include "sdl_inc.h"
|
||
|
#include "baselayer.h"
|
||
|
#include "keys.h"
|
||
|
#include "duke3d.h"
|
||
|
#include "common_game.h"
|
||
|
#include "osd.h"
|
||
|
#include "player.h"
|
||
|
|
||
|
#include "jmact/keyboard.h"
|
||
|
#include "jmact/control.h"
|
||
|
|
||
|
#include "../src/video/android/SDL_androidkeyboard.h"
|
||
|
|
||
|
#include "in_android.h"
|
||
|
|
||
|
#include <android/log.h>
|
||
|
|
||
|
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO,"DUKE", __VA_ARGS__))
|
||
|
|
||
|
|
||
|
extern int SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode);
|
||
|
extern int SDL_SendKeyboardText(const char *text);
|
||
|
|
||
|
char sdl_text[2];
|
||
|
int PortableKeyEvent(int state, int code,int unicode){
|
||
|
|
||
|
LOGI("PortableKeyEvent %d %d %d",state,code,unicode);
|
||
|
|
||
|
/*
|
||
|
if (state)
|
||
|
Android_OnKeyDown(code);
|
||
|
else
|
||
|
Android_OnKeyUp(code);
|
||
|
|
||
|
return;
|
||
|
*/
|
||
|
|
||
|
if (state)
|
||
|
SDL_SendKeyboardKey(SDL_PRESSED, code);
|
||
|
else
|
||
|
SDL_SendKeyboardKey(SDL_RELEASED, code);
|
||
|
|
||
|
SDL_EventState(SDL_TEXTINPUT,SDL_ENABLE);
|
||
|
|
||
|
if (code == 42)
|
||
|
unicode = 42;
|
||
|
|
||
|
if (state)
|
||
|
{
|
||
|
//if (unicode < 128)
|
||
|
{
|
||
|
sdl_text[0] = unicode;
|
||
|
sdl_text[1] = 0;
|
||
|
|
||
|
int posted = SDL_SendKeyboardText((const char*)sdl_text);
|
||
|
LOGI("posted = %d",posted);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
int crouchToggleState=0;
|
||
|
|
||
|
#define BUTTONSET(x,value) (CONTROL_ButtonState |= ((uint64_t)value<<((uint64_t)(x))))
|
||
|
#define BUTTONCLEAR(x) (CONTROL_ButtonState &= ~((uint64_t)1<<((uint64_t)(x))))
|
||
|
|
||
|
uint64_t functionSticky = 0; //To let at least one tick
|
||
|
uint64_t functionHeld = 0;
|
||
|
|
||
|
void changeActionState(int state, int action)
|
||
|
{
|
||
|
if (state)
|
||
|
{
|
||
|
//BUTTONSET(action,1);
|
||
|
functionSticky |= ((uint64_t)1<<((uint64_t)(action)));
|
||
|
functionHeld |= ((uint64_t)1<<((uint64_t)(action)));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//BUTTONCLEAR(action);
|
||
|
functionHeld &= ~((uint64_t)1<<((uint64_t)(action)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void PortableAction(int state, int action)
|
||
|
{
|
||
|
LOGI("PortableAction action = %d, state = %d",action,state);
|
||
|
|
||
|
//Special toggle for crouch, NOT when using jetpack or in water
|
||
|
if (!g_player[myconnectindex].ps->jetpack_on &&
|
||
|
g_player[myconnectindex].ps->on_ground &&
|
||
|
(sector[g_player[myconnectindex].ps->cursectnum].lotag != 2))// This means underwater!
|
||
|
{
|
||
|
|
||
|
if (action == gamefunc_Crouch)
|
||
|
{
|
||
|
if (state)
|
||
|
{
|
||
|
crouchToggleState =!crouchToggleState;
|
||
|
}
|
||
|
state = crouchToggleState;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Check if jumping while crouched
|
||
|
if (action == gamefunc_Jump)
|
||
|
{
|
||
|
if (crouchToggleState)
|
||
|
{
|
||
|
crouchToggleState = 0;
|
||
|
changeActionState(0,gamefunc_Crouch);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
changeActionState(state,action);
|
||
|
LOGI("PortableAction state = 0x%016llX",CONTROL_ButtonState);
|
||
|
}
|
||
|
|
||
|
// =================== FORWARD and SIDE MOVMENT ==============
|
||
|
|
||
|
float forwardmove, sidemove; //Joystick mode
|
||
|
|
||
|
void PortableMoveFwd(float fwd)
|
||
|
{
|
||
|
if (fwd > 1)
|
||
|
fwd = 1;
|
||
|
else if (fwd < -1)
|
||
|
fwd = -1;
|
||
|
|
||
|
forwardmove = fwd;
|
||
|
}
|
||
|
|
||
|
void PortableMoveSide(float strafe)
|
||
|
{
|
||
|
if (strafe > 1)
|
||
|
strafe = 1;
|
||
|
else if (strafe < -1)
|
||
|
strafe = -1;
|
||
|
|
||
|
sidemove = strafe;
|
||
|
}
|
||
|
|
||
|
void PortableMove(float fwd, float strafe)
|
||
|
{
|
||
|
PortableMoveFwd(fwd);
|
||
|
PortableMoveSide(strafe);
|
||
|
}
|
||
|
|
||
|
//======================================================================
|
||
|
|
||
|
//Look up and down
|
||
|
int look_pitch_mode;
|
||
|
float look_pitch_mouse,look_pitch_abs,look_pitch_joy;
|
||
|
void PortableLookPitch(int mode, float pitch)
|
||
|
{
|
||
|
//LOGI("PortableLookPitch %d %f",mode, pitch);
|
||
|
look_pitch_mode = mode;
|
||
|
switch(mode)
|
||
|
{
|
||
|
case LOOK_MODE_MOUSE:
|
||
|
look_pitch_mouse += pitch;
|
||
|
break;
|
||
|
case LOOK_MODE_ABSOLUTE:
|
||
|
look_pitch_abs = pitch;
|
||
|
break;
|
||
|
case LOOK_MODE_JOYSTICK:
|
||
|
look_pitch_joy = pitch;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//left right
|
||
|
int look_yaw_mode;
|
||
|
float look_yaw_mouse,look_yaw_joy;
|
||
|
void PortableLookYaw(int mode, float yaw)
|
||
|
{
|
||
|
look_yaw_mode = mode;
|
||
|
switch(mode)
|
||
|
{
|
||
|
case LOOK_MODE_MOUSE:
|
||
|
look_yaw_mouse += yaw;
|
||
|
break;
|
||
|
case LOOK_MODE_JOYSTICK:
|
||
|
look_yaw_joy = yaw;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void PortableCommand(const char * cmd){}
|
||
|
|
||
|
extern int32_t main(int32_t argc, char *argv[]);
|
||
|
void PortableInit(int argc,const char ** argv){
|
||
|
|
||
|
main(argc,argv);
|
||
|
}
|
||
|
|
||
|
|
||
|
void PortableFrame(){
|
||
|
//NOT USED for DUKE
|
||
|
}
|
||
|
|
||
|
int PortableInMenu(){
|
||
|
return ( (g_player[myconnectindex].ps->gm & MODE_MENU) || !(g_player[myconnectindex].ps->gm & MODE_GAME))?1:0;
|
||
|
}
|
||
|
|
||
|
unsigned int PortableGetWeapons()
|
||
|
{
|
||
|
return g_player[myconnectindex].ps->gotweapon;
|
||
|
}
|
||
|
int PortableInAutomap()
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int PortableShowKeyboard(){
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int PortableIsSoftwareMode()
|
||
|
{
|
||
|
if (getrendermode() >= REND_POLYMOST)
|
||
|
return 0;
|
||
|
else
|
||
|
return 1;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
static int lastWeapon = -1;
|
||
|
int getLastWeapon(){
|
||
|
return lastWeapon;
|
||
|
}
|
||
|
|
||
|
extern user_defs ud;
|
||
|
|
||
|
int isPaused()
|
||
|
{
|
||
|
return ud.pause_on;
|
||
|
}
|
||
|
|
||
|
///This stuff is called from the game/engine
|
||
|
|
||
|
void setLastWeapon(int w)
|
||
|
{
|
||
|
LOGI("setLastWeapon %d",w);
|
||
|
lastWeapon = w;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CONTROL_Android_ClearButton(int32_t whichbutton)
|
||
|
{
|
||
|
BUTTONCLEAR(whichbutton);
|
||
|
functionHeld &= ~((uint64_t)1<<((uint64_t)(whichbutton)));
|
||
|
}
|
||
|
|
||
|
void CONTROL_Android_PollDevices(ControlInfo *info)
|
||
|
{
|
||
|
//LOGI("CONTROL_Android_PollDevices %f %f",forwardmove,sidemove);
|
||
|
|
||
|
info->dz = -forwardmove * 5000;
|
||
|
info->dx = sidemove * 200;
|
||
|
|
||
|
switch(look_pitch_mode)
|
||
|
{
|
||
|
case LOOK_MODE_MOUSE:
|
||
|
info->dpitch = look_pitch_mouse * 100000;
|
||
|
look_pitch_mouse = 0;
|
||
|
break;
|
||
|
case LOOK_MODE_ABSOLUTE:
|
||
|
//cl.viewangles[0] = look_pitch_abs * 80;
|
||
|
break;
|
||
|
case LOOK_MODE_JOYSTICK:
|
||
|
info->dpitch = look_pitch_joy * 2000;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
|
||
|
switch(look_yaw_mode)
|
||
|
{
|
||
|
case LOOK_MODE_MOUSE:
|
||
|
info->dyaw = -look_yaw_mouse * 80000;
|
||
|
look_yaw_mouse = 0;
|
||
|
break;
|
||
|
case LOOK_MODE_JOYSTICK:
|
||
|
info->dyaw = -look_yaw_joy * 4000;
|
||
|
break;
|
||
|
}
|
||
|
CONTROL_ButtonState = 0;
|
||
|
CONTROL_ButtonState |= functionSticky;
|
||
|
CONTROL_ButtonState |= functionHeld;
|
||
|
|
||
|
functionSticky = 0;
|
||
|
|
||
|
//LOGI("poll state = 0x%016llX",CONTROL_ButtonState);
|
||
|
}
|
||
|
|
||
|
|