mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-07 09:01:57 +00:00
- Fixed: Drawing the amount of an inventory item in the player's inventory did
not work - Added: PowerupTime to drawnumber and drawbar. You must specify a powerupgiver. Although drawnumber goes in seconds the powerup has left drawbar will use ticks for extra accuracy. - I have increased cross-port compatibility with Skulltag. If an unknown game mode is provided for sbarinfo's gamemode command it will ignore it and continue. SVN r1015 (trunk)
This commit is contained in:
parent
29380f70b3
commit
165875c7df
5 changed files with 532 additions and 475 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
June 2, 2008 (SBarInfo update #23)
|
||||||
|
- Fixed: Drawing the amount of an inventory item in the player's inventory did
|
||||||
|
not work
|
||||||
|
- Added: PowerupTime to drawnumber and drawbar. You must specify a
|
||||||
|
powerupgiver. Although drawnumber goes in seconds the powerup has left
|
||||||
|
drawbar will use ticks for extra accuracy.
|
||||||
|
- I have increased cross-port compatibility with Skulltag. If an unknown
|
||||||
|
game mode is provided for sbarinfo's gamemode command it will ignore it and
|
||||||
|
continue.
|
||||||
|
|
||||||
June 2, 2008 (Changes by Graf Zahl)
|
June 2, 2008 (Changes by Graf Zahl)
|
||||||
- Added an option to consider intermission screens gameplay for purposes of
|
- Added an option to consider intermission screens gameplay for purposes of
|
||||||
capturing the mouse.
|
capturing the mouse.
|
||||||
|
|
|
@ -199,6 +199,7 @@ enum //drawnumber flags
|
||||||
DRAWNUMBER_GLOBALARRAY = 0x10000,
|
DRAWNUMBER_GLOBALARRAY = 0x10000,
|
||||||
DRAWNUMBER_FILLZEROS = 0x20000,
|
DRAWNUMBER_FILLZEROS = 0x20000,
|
||||||
DRAWNUMBER_WHENNOTZERO = 0x40000,
|
DRAWNUMBER_WHENNOTZERO = 0x40000,
|
||||||
|
DRAWNUMBER_POWERUPTIME = 0x80000,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum //drawbar flags (will go into special2)
|
enum //drawbar flags (will go into special2)
|
||||||
|
|
|
@ -579,6 +579,16 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
|
||||||
value = ACS_GlobalVars[cmd.value];
|
value = ACS_GlobalVars[cmd.value];
|
||||||
else if(cmd.flags & DRAWNUMBER_GLOBALARRAY)
|
else if(cmd.flags & DRAWNUMBER_GLOBALARRAY)
|
||||||
value = ACS_GlobalArrays[cmd.value][consoleplayer];
|
value = ACS_GlobalArrays[cmd.value][consoleplayer];
|
||||||
|
else if(cmd.flags & DRAWNUMBER_POWERUPTIME)
|
||||||
|
{
|
||||||
|
//Get the PowerupType and check to see if the player has any in inventory.
|
||||||
|
const PClass* powerupType = ((APowerupGiver*) GetDefaultByType(PClass::FindClass(cmd.string[0])))->PowerupType;
|
||||||
|
APowerup* powerup = (APowerup*) CPlayer->mo->FindInventory(powerupType);
|
||||||
|
if(powerup != NULL)
|
||||||
|
{
|
||||||
|
value = powerup->EffectTics / TICRATE + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(cmd.flags & DRAWNUMBER_INVENTORY)
|
else if(cmd.flags & DRAWNUMBER_INVENTORY)
|
||||||
{
|
{
|
||||||
AInventory* item = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[0]));
|
AInventory* item = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[0]));
|
||||||
|
@ -780,6 +790,21 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
|
||||||
value = 0;
|
value = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(cmd.flags & DRAWNUMBER_POWERUPTIME)
|
||||||
|
{
|
||||||
|
//Get the PowerupType and check to see if the player has any in inventory.
|
||||||
|
APowerupGiver* powerupGiver = (APowerupGiver*) GetDefaultByType(PClass::FindClass(cmd.string[0]));
|
||||||
|
const PClass* powerupType = powerupGiver->PowerupType;
|
||||||
|
APowerup* powerup = (APowerup*) CPlayer->mo->FindInventory(powerupType);
|
||||||
|
if(powerup != NULL && powerupType != NULL && powerupGiver != NULL)
|
||||||
|
{
|
||||||
|
value = powerup->EffectTics + 1;
|
||||||
|
if(powerupGiver->EffectTics == 0) //if 0 we need to get the default from the powerup
|
||||||
|
max = ((APowerup*) GetDefaultByType(powerupType))->EffectTics + 1;
|
||||||
|
else
|
||||||
|
max = powerupGiver->EffectTics + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(cmd.special3 != 0)
|
if(cmd.special3 != 0)
|
||||||
value = max - value; //invert since the new drawing method requires drawing the bg on the fg.
|
value = max - value; //invert since the new drawing method requires drawing the bg on the fg.
|
||||||
if(max != 0 && value > 0)
|
if(max != 0 && value > 0)
|
||||||
|
|
|
@ -557,10 +557,20 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
||||||
sc.ScriptError("Global variable number out of range: %d", sc.Number);
|
sc.ScriptError("Global variable number out of range: %d", sc.Number);
|
||||||
cmd.value = sc.Number;
|
cmd.value = sc.Number;
|
||||||
}
|
}
|
||||||
|
else if(sc.Compare("poweruptime"))
|
||||||
|
{
|
||||||
|
cmd.flags |= DRAWNUMBER_POWERUPTIME;
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
cmd.setString(sc, sc.String, 0);
|
||||||
|
const PClass* item = PClass::FindClass(sc.String);
|
||||||
|
if(item == NULL || !PClass::FindClass("PowerupGiver")->IsAncestorOf(item))
|
||||||
|
{
|
||||||
|
sc.ScriptError("'%s' is not a type of PowerupGiver.", sc.String);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmd.flags = DRAWNUMBER_INVENTORY;
|
cmd.flags = DRAWNUMBER_INVENTORY;
|
||||||
sc.MustGetToken(TK_Identifier);
|
|
||||||
cmd.setString(sc, sc.String, 0);
|
cmd.setString(sc, sc.String, 0);
|
||||||
const PClass* item = PClass::FindClass(sc.String);
|
const PClass* item = PClass::FindClass(sc.String);
|
||||||
if(item == NULL || !PClass::FindClass("Inventory")->IsAncestorOf(item)) //must be a kind of ammo
|
if(item == NULL || !PClass::FindClass("Inventory")->IsAncestorOf(item)) //must be a kind of ammo
|
||||||
|
@ -834,6 +844,17 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
||||||
cmd.flags = DRAWNUMBER_ITEMS;
|
cmd.flags = DRAWNUMBER_ITEMS;
|
||||||
else if(sc.Compare("secrets"))
|
else if(sc.Compare("secrets"))
|
||||||
cmd.flags = DRAWNUMBER_SECRETS;
|
cmd.flags = DRAWNUMBER_SECRETS;
|
||||||
|
else if(sc.Compare("poweruptime"))
|
||||||
|
{
|
||||||
|
cmd.flags |= DRAWNUMBER_POWERUPTIME;
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
cmd.setString(sc, sc.String, 0);
|
||||||
|
const PClass* item = PClass::FindClass(sc.String);
|
||||||
|
if(item == NULL || !PClass::FindClass("PowerupGiver")->IsAncestorOf(item))
|
||||||
|
{
|
||||||
|
sc.ScriptError("'%s' is not a type of PowerupGiver.", sc.String);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmd.flags = DRAWNUMBER_INVENTORY;
|
cmd.flags = DRAWNUMBER_INVENTORY;
|
||||||
|
@ -978,8 +999,8 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
|
||||||
cmd.flags |= GAMETYPE_DEATHMATCH;
|
cmd.flags |= GAMETYPE_DEATHMATCH;
|
||||||
else if(sc.Compare("teamgame"))
|
else if(sc.Compare("teamgame"))
|
||||||
cmd.flags |= GAMETYPE_TEAMGAME;
|
cmd.flags |= GAMETYPE_TEAMGAME;
|
||||||
else
|
//else I'm removing this error to allow cross port compatiblity. If it doesn't know what a gamemode is lets just ignore it.
|
||||||
sc.ScriptError("Unknown gamemode: %s", sc.String);
|
// sc.ScriptError("Unknown gamemode: %s", sc.String);
|
||||||
if(sc.CheckToken('{'))
|
if(sc.CheckToken('{'))
|
||||||
break;
|
break;
|
||||||
sc.MustGetToken(',');
|
sc.MustGetToken(',');
|
||||||
|
|
|
@ -1,285 +1,285 @@
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "doomtype.h"
|
#include "doomtype.h"
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "doomdef.h"
|
#include "doomdef.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "i_input.h"
|
#include "i_input.h"
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
|
|
||||||
#include "d_main.h"
|
#include "d_main.h"
|
||||||
#include "d_gui.h"
|
#include "d_gui.h"
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
#include "c_cvars.h"
|
#include "c_cvars.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "dikeys.h"
|
#include "dikeys.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
|
|
||||||
static void I_CheckGUICapture ();
|
static void I_CheckGUICapture ();
|
||||||
static void I_CheckNativeMouse ();
|
static void I_CheckNativeMouse ();
|
||||||
|
|
||||||
static bool GUICapture;
|
static bool GUICapture;
|
||||||
static bool NativeMouse = true;
|
static bool NativeMouse = true;
|
||||||
|
|
||||||
extern int paused;
|
extern int paused;
|
||||||
|
|
||||||
CVAR (Bool, use_mouse, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, use_mouse, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Bool, m_noprescale, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, m_noprescale, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Bool, m_filter, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, m_filter, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
float JoyAxes[6];
|
float JoyAxes[6];
|
||||||
//static int JoyActive;
|
//static int JoyActive;
|
||||||
//static BYTE JoyButtons[128];
|
//static BYTE JoyButtons[128];
|
||||||
//static BYTE JoyPOV[4];
|
//static BYTE JoyPOV[4];
|
||||||
static BYTE JoyAxisMap[8];
|
static BYTE JoyAxisMap[8];
|
||||||
static float JoyAxisThresholds[8];
|
static float JoyAxisThresholds[8];
|
||||||
char *JoyAxisNames[8];
|
char *JoyAxisNames[8];
|
||||||
static const BYTE POVButtons[9] = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09, 0x00 };
|
static const BYTE POVButtons[9] = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09, 0x00 };
|
||||||
|
|
||||||
TArray<GUIDName> JoystickNames;
|
TArray<GUIDName> JoystickNames;
|
||||||
CVAR (Bool, use_joystick, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Bool, use_joystick, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (GUID, joy_guid, NULL, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
CVAR (GUID, joy_guid, NULL, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
|
||||||
|
|
||||||
static void MapAxis (FIntCVar &var, int num)
|
static void MapAxis (FIntCVar &var, int num)
|
||||||
{
|
{
|
||||||
if (var < JOYAXIS_NONE || var > JOYAXIS_UP)
|
if (var < JOYAXIS_NONE || var > JOYAXIS_UP)
|
||||||
{
|
{
|
||||||
var = JOYAXIS_NONE;
|
var = JOYAXIS_NONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
JoyAxisMap[num] = var;
|
JoyAxisMap[num] = var;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR (Int, joy_xaxis, JOYAXIS_YAW, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_xaxis, JOYAXIS_YAW, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 0);
|
MapAxis (self, 0);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_yaxis, JOYAXIS_FORWARD, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_yaxis, JOYAXIS_FORWARD, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 1);
|
MapAxis (self, 1);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_zaxis, JOYAXIS_SIDE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_zaxis, JOYAXIS_SIDE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 2);
|
MapAxis (self, 2);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_xrot, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_xrot, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 3);
|
MapAxis (self, 3);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_yrot, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_yrot, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 4);
|
MapAxis (self, 4);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_zrot, JOYAXIS_PITCH, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_zrot, JOYAXIS_PITCH, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 5);
|
MapAxis (self, 5);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_slider, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_slider, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 6);
|
MapAxis (self, 6);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Int, joy_dial, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Int, joy_dial, JOYAXIS_NONE, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
MapAxis (self, 7);
|
MapAxis (self, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR (Float, joy_xthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_xthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[0] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[0] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_ythreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_ythreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[1] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[1] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_zthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_zthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[2] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[2] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_xrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_xrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[3] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[3] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_yrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_yrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[4] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[4] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_zrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_zrotthreshold, 0.15f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[5] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[5] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_sliderthreshold, 0.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_sliderthreshold, 0.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[6] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[6] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
CUSTOM_CVAR (Float, joy_dialthreshold, 0.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR (Float, joy_dialthreshold, 0.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
JoyAxisThresholds[7] = clamp (self * 256.f, 0.f, 256.f);
|
JoyAxisThresholds[7] = clamp (self * 256.f, 0.f, 256.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
CVAR (Float, joy_speedmultiplier,1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_speedmultiplier,1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Float, joy_yawspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_yawspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Float, joy_pitchspeed, -.75f,CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_pitchspeed, -.75f,CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Float, joy_forwardspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_forwardspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Float, joy_sidespeed, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_sidespeed, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
CVAR (Float, joy_upspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CVAR (Float, joy_upspeed, -1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
static FBaseCVar * const JoyConfigVars[] =
|
static FBaseCVar * const JoyConfigVars[] =
|
||||||
{
|
{
|
||||||
&joy_xaxis, &joy_yaxis, &joy_zaxis, &joy_xrot, &joy_yrot, &joy_zrot, &joy_slider, &joy_dial,
|
&joy_xaxis, &joy_yaxis, &joy_zaxis, &joy_xrot, &joy_yrot, &joy_zrot, &joy_slider, &joy_dial,
|
||||||
&joy_xthreshold, &joy_ythreshold, &joy_zthreshold, &joy_xrotthreshold, &joy_yrotthreshold, &joy_zrotthreshold, &joy_sliderthreshold, &joy_dialthreshold,
|
&joy_xthreshold, &joy_ythreshold, &joy_zthreshold, &joy_xrotthreshold, &joy_yrotthreshold, &joy_zrotthreshold, &joy_sliderthreshold, &joy_dialthreshold,
|
||||||
&joy_speedmultiplier, &joy_yawspeed, &joy_pitchspeed, &joy_forwardspeed, &joy_sidespeed,
|
&joy_speedmultiplier, &joy_yawspeed, &joy_pitchspeed, &joy_forwardspeed, &joy_sidespeed,
|
||||||
&joy_upspeed
|
&joy_upspeed
|
||||||
};
|
};
|
||||||
|
|
||||||
EXTERN_CVAR (Bool, fullscreen)
|
EXTERN_CVAR (Bool, fullscreen)
|
||||||
|
|
||||||
extern int WaitingForKey, chatmodeon;
|
extern int WaitingForKey, chatmodeon;
|
||||||
extern constate_e ConsoleState;
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
static BYTE KeySymToDIK[SDLK_LAST], DownState[SDLK_LAST];
|
static BYTE KeySymToDIK[SDLK_LAST], DownState[SDLK_LAST];
|
||||||
|
|
||||||
static WORD DIKToKeySym[256] =
|
static WORD DIKToKeySym[256] =
|
||||||
{
|
{
|
||||||
0, SDLK_ESCAPE, '1', '2', '3', '4', '5', '6',
|
0, SDLK_ESCAPE, '1', '2', '3', '4', '5', '6',
|
||||||
'7', '8', '9', '0', '-', '=', SDLK_BACKSPACE, SDLK_TAB,
|
'7', '8', '9', '0', '-', '=', SDLK_BACKSPACE, SDLK_TAB,
|
||||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
|
||||||
'o', 'p', '[', ']', SDLK_RETURN, SDLK_LCTRL, 'a', 's',
|
'o', 'p', '[', ']', SDLK_RETURN, SDLK_LCTRL, 'a', 's',
|
||||||
'd', 'f', 'g', 'h', 'j', 'k', 'l', SDLK_SEMICOLON,
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', SDLK_SEMICOLON,
|
||||||
'\'', '`', SDLK_LSHIFT, '\\', 'z', 'x', 'c', 'v',
|
'\'', '`', SDLK_LSHIFT, '\\', 'z', 'x', 'c', 'v',
|
||||||
'b', 'n', 'm', ',', '.', '/', SDLK_RSHIFT, SDLK_KP_MULTIPLY,
|
'b', 'n', 'm', ',', '.', '/', SDLK_RSHIFT, SDLK_KP_MULTIPLY,
|
||||||
SDLK_LALT, ' ', SDLK_CAPSLOCK, SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5,
|
SDLK_LALT, ' ', SDLK_CAPSLOCK, SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5,
|
||||||
SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_NUMLOCK, SDLK_SCROLLOCK, SDLK_KP7,
|
SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_NUMLOCK, SDLK_SCROLLOCK, SDLK_KP7,
|
||||||
SDLK_KP8, SDLK_KP9, SDLK_KP_MINUS, SDLK_KP4, SDLK_KP5, SDLK_KP6, SDLK_KP_PLUS, SDLK_KP1,
|
SDLK_KP8, SDLK_KP9, SDLK_KP_MINUS, SDLK_KP4, SDLK_KP5, SDLK_KP6, SDLK_KP_PLUS, SDLK_KP1,
|
||||||
SDLK_KP2, SDLK_KP3, SDLK_KP0, SDLK_KP_PERIOD, 0, 0, 0, SDLK_F11,
|
SDLK_KP2, SDLK_KP3, SDLK_KP0, SDLK_KP_PERIOD, 0, 0, 0, SDLK_F11,
|
||||||
SDLK_F12, 0, 0, 0, 0, 0, 0, 0,
|
SDLK_F12, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, SDLK_F13, SDLK_F14, SDLK_F15, 0,
|
0, 0, 0, 0, SDLK_F13, SDLK_F14, SDLK_F15, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, SDLK_KP_EQUALS, 0, 0,
|
0, 0, 0, 0, 0, SDLK_KP_EQUALS, 0, 0,
|
||||||
0, SDLK_AT, SDLK_COLON, 0, 0, 0, 0, 0,
|
0, SDLK_AT, SDLK_COLON, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, SDLK_KP_ENTER, SDLK_RCTRL, 0, 0,
|
0, 0, 0, 0, SDLK_KP_ENTER, SDLK_RCTRL, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, SDLK_KP_DIVIDE, 0, SDLK_SYSREQ,
|
0, 0, 0, 0, 0, SDLK_KP_DIVIDE, 0, SDLK_SYSREQ,
|
||||||
SDLK_RALT, 0, 0, 0, 0, 0, 0, 0,
|
SDLK_RALT, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, SDLK_HOME,
|
0, 0, 0, 0, 0, 0, 0, SDLK_HOME,
|
||||||
SDLK_UP, SDLK_PAGEUP, 0, SDLK_LEFT, 0, SDLK_RIGHT, 0, SDLK_END,
|
SDLK_UP, SDLK_PAGEUP, 0, SDLK_LEFT, 0, SDLK_RIGHT, 0, SDLK_END,
|
||||||
SDLK_DOWN, SDLK_PAGEDOWN, SDLK_INSERT, SDLK_DELETE, 0, 0, 0, 0,
|
SDLK_DOWN, SDLK_PAGEDOWN, SDLK_INSERT, SDLK_DELETE, 0, 0, 0, 0,
|
||||||
0, 0, 0, SDLK_LSUPER, SDLK_RSUPER, SDLK_MENU, SDLK_POWER, 0,
|
0, 0, 0, SDLK_LSUPER, SDLK_RSUPER, SDLK_MENU, SDLK_POWER, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, SDLK_PAUSE
|
0, 0, 0, 0, 0, 0, 0, SDLK_PAUSE
|
||||||
};
|
};
|
||||||
|
|
||||||
static void FlushDIKState (int low=0, int high=NUM_KEYS-1)
|
static void FlushDIKState (int low=0, int high=NUM_KEYS-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void InitKeySymMap ()
|
static void InitKeySymMap ()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 256; ++i)
|
for (int i = 0; i < 256; ++i)
|
||||||
{
|
{
|
||||||
KeySymToDIK[DIKToKeySym[i]] = i;
|
KeySymToDIK[DIKToKeySym[i]] = i;
|
||||||
}
|
}
|
||||||
KeySymToDIK[0] = 0;
|
KeySymToDIK[0] = 0;
|
||||||
KeySymToDIK[SDLK_RSHIFT] = DIK_LSHIFT;
|
KeySymToDIK[SDLK_RSHIFT] = DIK_LSHIFT;
|
||||||
KeySymToDIK[SDLK_RCTRL] = DIK_LCONTROL;
|
KeySymToDIK[SDLK_RCTRL] = DIK_LCONTROL;
|
||||||
KeySymToDIK[SDLK_RALT] = DIK_LMENU;
|
KeySymToDIK[SDLK_RALT] = DIK_LMENU;
|
||||||
// Depending on your Linux flavor, you may get SDLK_PRINT or SDLK_SYSREQ
|
// Depending on your Linux flavor, you may get SDLK_PRINT or SDLK_SYSREQ
|
||||||
KeySymToDIK[SDLK_PRINT] = DIK_SYSRQ;
|
KeySymToDIK[SDLK_PRINT] = DIK_SYSRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void I_CheckGUICapture ()
|
static void I_CheckGUICapture ()
|
||||||
{
|
{
|
||||||
bool wantCapt;
|
bool wantCapt;
|
||||||
|
|
||||||
if (menuactive == MENU_Off)
|
if (menuactive == MENU_Off)
|
||||||
{
|
{
|
||||||
wantCapt = ConsoleState == c_down || ConsoleState == c_falling || chatmodeon;
|
wantCapt = ConsoleState == c_down || ConsoleState == c_falling || chatmodeon;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wantCapt = (menuactive == MENU_On || menuactive == MENU_OnNoPause);
|
wantCapt = (menuactive == MENU_On || menuactive == MENU_OnNoPause);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wantCapt != GUICapture)
|
if (wantCapt != GUICapture)
|
||||||
{
|
{
|
||||||
GUICapture = wantCapt;
|
GUICapture = wantCapt;
|
||||||
if (wantCapt)
|
if (wantCapt)
|
||||||
{
|
{
|
||||||
FlushDIKState ();
|
FlushDIKState ();
|
||||||
memset (DownState, 0, sizeof(DownState));
|
memset (DownState, 0, sizeof(DownState));
|
||||||
SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||||
SDL_EnableUNICODE (1);
|
SDL_EnableUNICODE (1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_EnableKeyRepeat (0, 0);
|
SDL_EnableKeyRepeat (0, 0);
|
||||||
SDL_EnableUNICODE (0);
|
SDL_EnableUNICODE (0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CenterMouse ()
|
static void CenterMouse ()
|
||||||
{
|
{
|
||||||
SDL_WarpMouse (screen->GetWidth()/2, screen->GetHeight()/2);
|
SDL_WarpMouse (screen->GetWidth()/2, screen->GetHeight()/2);
|
||||||
SDL_PumpEvents ();
|
SDL_PumpEvents ();
|
||||||
SDL_GetRelativeMouseState (NULL, NULL);
|
SDL_GetRelativeMouseState (NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PostMouseMove (int x, int y)
|
static void PostMouseMove (int x, int y)
|
||||||
{
|
{
|
||||||
static int lastx = 0, lasty = 0;
|
static int lastx = 0, lasty = 0;
|
||||||
event_t ev = { 0 };
|
event_t ev = { 0 };
|
||||||
|
|
||||||
if (m_filter)
|
if (m_filter)
|
||||||
{
|
{
|
||||||
ev.x = (x + lastx) / 2;
|
ev.x = (x + lastx) / 2;
|
||||||
ev.y = (y + lasty) / 2;
|
ev.y = (y + lasty) / 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ev.x = x;
|
ev.x = x;
|
||||||
ev.y = y;
|
ev.y = y;
|
||||||
}
|
}
|
||||||
lastx = x;
|
lastx = x;
|
||||||
lasty = y;
|
lasty = y;
|
||||||
if (ev.x | ev.y)
|
if (ev.x | ev.y)
|
||||||
{
|
{
|
||||||
ev.type = EV_Mouse;
|
ev.type = EV_Mouse;
|
||||||
D_PostEvent (&ev);
|
D_PostEvent (&ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MouseRead ()
|
static void MouseRead ()
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
if (NativeMouse)
|
if (NativeMouse)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_GetRelativeMouseState (&x, &y);
|
SDL_GetRelativeMouseState (&x, &y);
|
||||||
if (!m_noprescale)
|
if (!m_noprescale)
|
||||||
{
|
{
|
||||||
x *= 3;
|
x *= 3;
|
||||||
y *= 2;
|
y *= 2;
|
||||||
}
|
}
|
||||||
if (x | y)
|
if (x | y)
|
||||||
{
|
{
|
||||||
CenterMouse ();
|
CenterMouse ();
|
||||||
PostMouseMove (x, -y);
|
PostMouseMove (x, -y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG|CVAR_ARCHIVE)
|
CUSTOM_CVAR(Int, mouse_capturemode, 1, CVAR_GLOBALCONFIG|CVAR_ARCHIVE)
|
||||||
{
|
{
|
||||||
if (self < 0) self = 0;
|
if (self < 0) self = 0;
|
||||||
|
@ -300,193 +300,193 @@ static bool inGame()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void I_CheckNativeMouse ()
|
static void I_CheckNativeMouse ()
|
||||||
{
|
{
|
||||||
bool focus = (SDL_GetAppState() & (SDL_APPINPUTFOCUS|SDL_APPACTIVE))
|
bool focus = (SDL_GetAppState() & (SDL_APPINPUTFOCUS|SDL_APPACTIVE))
|
||||||
== (SDL_APPINPUTFOCUS|SDL_APPACTIVE);
|
== (SDL_APPINPUTFOCUS|SDL_APPACTIVE);
|
||||||
bool fs = (SDL_GetVideoSurface ()->flags & SDL_FULLSCREEN) != 0;
|
bool fs = (SDL_GetVideoSurface ()->flags & SDL_FULLSCREEN) != 0;
|
||||||
|
|
||||||
bool wantNative = !focus || !use_mouse || (!fs && (GUICapture || paused || demoplayback || !inGame()));
|
bool wantNative = !focus || !use_mouse || (!fs && (GUICapture || paused || demoplayback || !inGame()));
|
||||||
|
|
||||||
if (wantNative != NativeMouse)
|
if (wantNative != NativeMouse)
|
||||||
{
|
{
|
||||||
NativeMouse = wantNative;
|
NativeMouse = wantNative;
|
||||||
if (wantNative)
|
if (wantNative)
|
||||||
{
|
{
|
||||||
SDL_ShowCursor (1);
|
SDL_ShowCursor (1);
|
||||||
SDL_WM_GrabInput (SDL_GRAB_OFF);
|
SDL_WM_GrabInput (SDL_GRAB_OFF);
|
||||||
FlushDIKState (KEY_MOUSE1, KEY_MOUSE4);
|
FlushDIKState (KEY_MOUSE1, KEY_MOUSE4);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_ShowCursor (0);
|
SDL_ShowCursor (0);
|
||||||
SDL_WM_GrabInput (SDL_GRAB_ON);
|
SDL_WM_GrabInput (SDL_GRAB_ON);
|
||||||
CenterMouse ();
|
CenterMouse ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagePump (const SDL_Event &sev)
|
void MessagePump (const SDL_Event &sev)
|
||||||
{
|
{
|
||||||
static int lastx = 0, lasty = 0;
|
static int lastx = 0, lasty = 0;
|
||||||
int x, y;
|
int x, y;
|
||||||
event_t event = { 0, };
|
event_t event = { 0, };
|
||||||
|
|
||||||
switch (sev.type)
|
switch (sev.type)
|
||||||
{
|
{
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
exit (0);
|
exit (0);
|
||||||
|
|
||||||
case SDL_ACTIVEEVENT:
|
case SDL_ACTIVEEVENT:
|
||||||
if (sev.active.state == SDL_APPINPUTFOCUS)
|
if (sev.active.state == SDL_APPINPUTFOCUS)
|
||||||
{
|
{
|
||||||
if (sev.active.gain == 0)
|
if (sev.active.gain == 0)
|
||||||
{ // kill focus
|
{ // kill focus
|
||||||
FlushDIKState ();
|
FlushDIKState ();
|
||||||
if (!paused)
|
if (!paused)
|
||||||
S_PauseSound (false);
|
S_PauseSound (false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // set focus
|
{ // set focus
|
||||||
if (!paused)
|
if (!paused)
|
||||||
S_ResumeSound ();
|
S_ResumeSound ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
||||||
switch (sev.button.button)
|
switch (sev.button.button)
|
||||||
{
|
{
|
||||||
case 1: event.data1 = KEY_MOUSE1; break;
|
case 1: event.data1 = KEY_MOUSE1; break;
|
||||||
case 2: event.data1 = KEY_MOUSE3; break;
|
case 2: event.data1 = KEY_MOUSE3; break;
|
||||||
case 3: event.data1 = KEY_MOUSE2; break;
|
case 3: event.data1 = KEY_MOUSE2; break;
|
||||||
case 4: event.data1 = KEY_MWHEELUP; break;
|
case 4: event.data1 = KEY_MWHEELUP; break;
|
||||||
case 5: event.data1 = KEY_MWHEELDOWN; break;
|
case 5: event.data1 = KEY_MWHEELDOWN; break;
|
||||||
case 6: event.data1 = KEY_MOUSE4; break; /* dunno */
|
case 6: event.data1 = KEY_MOUSE4; break; /* dunno */
|
||||||
}
|
}
|
||||||
//DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
|
//DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
|
||||||
D_PostEvent (&event);
|
D_PostEvent (&event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
if (sev.key.keysym.sym >= SDLK_LAST)
|
if (sev.key.keysym.sym >= SDLK_LAST)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!GUICapture)
|
if (!GUICapture)
|
||||||
{
|
{
|
||||||
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
||||||
event.data1 = KeySymToDIK[sev.key.keysym.sym];
|
event.data1 = KeySymToDIK[sev.key.keysym.sym];
|
||||||
if (event.data1)
|
if (event.data1)
|
||||||
{
|
{
|
||||||
if (sev.key.keysym.sym < 256)
|
if (sev.key.keysym.sym < 256)
|
||||||
{
|
{
|
||||||
event.data2 = sev.key.keysym.sym;
|
event.data2 = sev.key.keysym.sym;
|
||||||
}
|
}
|
||||||
D_PostEvent (&event);
|
D_PostEvent (&event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
event.type = EV_GUI_Event;
|
event.type = EV_GUI_Event;
|
||||||
event.subtype = sev.type == SDL_KEYDOWN ? EV_GUI_KeyDown : EV_GUI_KeyUp;
|
event.subtype = sev.type == SDL_KEYDOWN ? EV_GUI_KeyDown : EV_GUI_KeyUp;
|
||||||
event.data3 = ((sev.key.keysym.mod & KMOD_SHIFT) ? GKM_SHIFT : 0) |
|
event.data3 = ((sev.key.keysym.mod & KMOD_SHIFT) ? GKM_SHIFT : 0) |
|
||||||
((sev.key.keysym.mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
((sev.key.keysym.mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
||||||
((sev.key.keysym.mod & KMOD_ALT) ? GKM_ALT : 0);
|
((sev.key.keysym.mod & KMOD_ALT) ? GKM_ALT : 0);
|
||||||
|
|
||||||
if (sev.key.keysym.sym < SDLK_LAST)
|
if (sev.key.keysym.sym < SDLK_LAST)
|
||||||
{
|
{
|
||||||
if (event.subtype == EV_GUI_KeyDown)
|
if (event.subtype == EV_GUI_KeyDown)
|
||||||
{
|
{
|
||||||
if (DownState[sev.key.keysym.sym])
|
if (DownState[sev.key.keysym.sym])
|
||||||
{
|
{
|
||||||
event.subtype = EV_GUI_KeyRepeat;
|
event.subtype = EV_GUI_KeyRepeat;
|
||||||
}
|
}
|
||||||
DownState[sev.key.keysym.sym] = 1;
|
DownState[sev.key.keysym.sym] = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DownState[sev.key.keysym.sym] = 0;
|
DownState[sev.key.keysym.sym] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sev.key.keysym.sym)
|
switch (sev.key.keysym.sym)
|
||||||
{
|
{
|
||||||
case SDLK_KP_ENTER: event.data1 = GK_RETURN; break;
|
case SDLK_KP_ENTER: event.data1 = GK_RETURN; break;
|
||||||
case SDLK_PAGEUP: event.data1 = GK_PGUP; break;
|
case SDLK_PAGEUP: event.data1 = GK_PGUP; break;
|
||||||
case SDLK_PAGEDOWN: event.data1 = GK_PGDN; break;
|
case SDLK_PAGEDOWN: event.data1 = GK_PGDN; break;
|
||||||
case SDLK_END: event.data1 = GK_END; break;
|
case SDLK_END: event.data1 = GK_END; break;
|
||||||
case SDLK_HOME: event.data1 = GK_HOME; break;
|
case SDLK_HOME: event.data1 = GK_HOME; break;
|
||||||
case SDLK_LEFT: event.data1 = GK_LEFT; break;
|
case SDLK_LEFT: event.data1 = GK_LEFT; break;
|
||||||
case SDLK_RIGHT: event.data1 = GK_RIGHT; break;
|
case SDLK_RIGHT: event.data1 = GK_RIGHT; break;
|
||||||
case SDLK_UP: event.data1 = GK_UP; break;
|
case SDLK_UP: event.data1 = GK_UP; break;
|
||||||
case SDLK_DOWN: event.data1 = GK_DOWN; break;
|
case SDLK_DOWN: event.data1 = GK_DOWN; break;
|
||||||
case SDLK_DELETE: event.data1 = GK_DEL; break;
|
case SDLK_DELETE: event.data1 = GK_DEL; break;
|
||||||
case SDLK_ESCAPE: event.data1 = GK_ESCAPE; break;
|
case SDLK_ESCAPE: event.data1 = GK_ESCAPE; break;
|
||||||
case SDLK_F1: event.data1 = GK_F1; break;
|
case SDLK_F1: event.data1 = GK_F1; break;
|
||||||
case SDLK_F2: event.data1 = GK_F2; break;
|
case SDLK_F2: event.data1 = GK_F2; break;
|
||||||
case SDLK_F3: event.data1 = GK_F3; break;
|
case SDLK_F3: event.data1 = GK_F3; break;
|
||||||
case SDLK_F4: event.data1 = GK_F4; break;
|
case SDLK_F4: event.data1 = GK_F4; break;
|
||||||
case SDLK_F5: event.data1 = GK_F5; break;
|
case SDLK_F5: event.data1 = GK_F5; break;
|
||||||
case SDLK_F6: event.data1 = GK_F6; break;
|
case SDLK_F6: event.data1 = GK_F6; break;
|
||||||
case SDLK_F7: event.data1 = GK_F7; break;
|
case SDLK_F7: event.data1 = GK_F7; break;
|
||||||
case SDLK_F8: event.data1 = GK_F8; break;
|
case SDLK_F8: event.data1 = GK_F8; break;
|
||||||
case SDLK_F9: event.data1 = GK_F9; break;
|
case SDLK_F9: event.data1 = GK_F9; break;
|
||||||
case SDLK_F10: event.data1 = GK_F10; break;
|
case SDLK_F10: event.data1 = GK_F10; break;
|
||||||
case SDLK_F11: event.data1 = GK_F11; break;
|
case SDLK_F11: event.data1 = GK_F11; break;
|
||||||
case SDLK_F12: event.data1 = GK_F12; break;
|
case SDLK_F12: event.data1 = GK_F12; break;
|
||||||
default:
|
default:
|
||||||
if (sev.key.keysym.sym < 256)
|
if (sev.key.keysym.sym < 256)
|
||||||
{
|
{
|
||||||
event.data1 = sev.key.keysym.sym;
|
event.data1 = sev.key.keysym.sym;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
event.data2 = sev.key.keysym.unicode & 0xff;
|
event.data2 = sev.key.keysym.unicode & 0xff;
|
||||||
if (event.data1 < 128)
|
if (event.data1 < 128)
|
||||||
{
|
{
|
||||||
event.data1 = toupper(event.data1);
|
event.data1 = toupper(event.data1);
|
||||||
D_PostEvent (&event);
|
D_PostEvent (&event);
|
||||||
}
|
}
|
||||||
if (!iscntrl(event.data2) && event.subtype != EV_GUI_KeyUp)
|
if (!iscntrl(event.data2) && event.subtype != EV_GUI_KeyUp)
|
||||||
{
|
{
|
||||||
event.subtype = EV_GUI_Char;
|
event.subtype = EV_GUI_Char;
|
||||||
event.data1 = event.data2;
|
event.data1 = event.data2;
|
||||||
event.data2 = sev.key.keysym.mod & KMOD_ALT;
|
event.data2 = sev.key.keysym.mod & KMOD_ALT;
|
||||||
event.data3 = 0;
|
event.data3 = 0;
|
||||||
D_PostEvent (&event);
|
D_PostEvent (&event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_GetEvent ()
|
void I_GetEvent ()
|
||||||
{
|
{
|
||||||
SDL_Event sev;
|
SDL_Event sev;
|
||||||
|
|
||||||
while (SDL_PollEvent (&sev))
|
while (SDL_PollEvent (&sev))
|
||||||
{
|
{
|
||||||
MessagePump (sev);
|
MessagePump (sev);
|
||||||
}
|
}
|
||||||
if (use_mouse)
|
if (use_mouse)
|
||||||
{
|
{
|
||||||
MouseRead ();
|
MouseRead ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_StartTic ()
|
void I_StartTic ()
|
||||||
{
|
{
|
||||||
I_CheckGUICapture ();
|
I_CheckGUICapture ();
|
||||||
I_CheckNativeMouse ();
|
I_CheckNativeMouse ();
|
||||||
I_GetEvent ();
|
I_GetEvent ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void I_StartFrame ()
|
void I_StartFrame ()
|
||||||
{
|
{
|
||||||
if (KeySymToDIK[SDLK_BACKSPACE] == 0)
|
if (KeySymToDIK[SDLK_BACKSPACE] == 0)
|
||||||
{
|
{
|
||||||
InitKeySymMap ();
|
InitKeySymMap ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue