This commit is contained in:
Paul 2000-10-26 15:45:09 +00:00
parent cf5d20c297
commit 9a655b7b82
3 changed files with 67 additions and 12 deletions

View file

@ -67,6 +67,7 @@ sPadData PadData[2];
u8 PadBuffer[2][34]; u8 PadBuffer[2][34];
u8 PadAlign[6]={0,1,0xFF,0xFF,0xFF,0xFF}; u8 PadAlign[6]={0,1,0xFF,0xFF,0xFF,0xFF};
u8 PadMotor[2][2]; u8 PadMotor[2][2];
int PadRepeatTimers[2][16];
/*****************************************************************************/ /*****************************************************************************/
// 701 // 701
@ -157,6 +158,9 @@ void PadsInit()
PadInitShock(0); PadInitShock(0);
PadInitShock(1); PadInitShock(1);
for(int i=0;i<2;i++)
for(int j=0;j<16;j++)
PadRepeatTimers[i][j]=0;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -335,6 +339,12 @@ u16 PadGetHeld(int Port)
return(PadData[Port].Held); return(PadData[Port].Held);
} }
/*****************************************************************************/
u16 PadGetRepeat(int Port)
{
return(PadData[Port].Repeat);
}
/*****************************************************************************/ /*****************************************************************************/
void PadClear(int Port) void PadClear(int Port)
{ {
@ -345,6 +355,47 @@ void PadClear(int Port)
/*****************************************************************************/ /*****************************************************************************/
void UpdateRepeats(int _port)
{
int frames,pad,i,mask,*repeatTimers;
u16 *repeatFlags;
frames=GameState::getFramesSinceLast();
pad=PadGetHeld(_port);
mask=1;
repeatTimers=PadRepeatTimers[_port];
repeatFlags=&PadData[_port].Repeat;
*repeatFlags=0;
for(i=0;i<16;i++)
{
if(pad&mask)
{
if(*repeatTimers)
{
*repeatTimers-=frames;
if(*repeatTimers<=0)
{
*repeatFlags|=mask;
*repeatTimers=TYPOMATIC_RATE;
}
}
else
{
*repeatFlags|=mask;
*repeatTimers=TYPOMATIC_DELAY;
}
}
else
{
*repeatTimers=0;
}
mask<<=1;
repeatTimers++;
}
}
void PadUpdate() void PadUpdate()
{ {
PadData[0].Dx= PadData[1].Dx=0; PadData[0].Dx= PadData[1].Dx=0;
@ -355,6 +406,8 @@ void PadUpdate()
ReadController(0); ReadController(0);
ReadController(1); ReadController(1);
UpdateRepeats(0);
UpdateRepeats(1);
} }

View file

@ -40,11 +40,14 @@
#define BUTTON_SELECT PAD_CROSS #define BUTTON_SELECT PAD_CROSS
#define BUTTON_BACK PAD_TRIANGLE #define BUTTON_BACK PAD_TRIANGLE
#define TYPOMATIC_DELAY 75
#define TYPOMATIC_RATE 50
/*****************************************************************************/ /*****************************************************************************/
typedef struct typedef struct
{ {
u16 Up,Held,Down,Old; u16 Up,Held,Down,Old,Repeat;
int XPos, YPos, XPos1, YPos1; // For analog int XPos, YPos, XPos1, YPos1; // For analog
int Dx,Dy, Dx1,Dy1; int Dx,Dy, Dx1,Dy1;
u8 Status; // These 8 values are obtained u8 Status; // These 8 values are obtained
@ -79,7 +82,8 @@ sPadData *PadGet(int Port);
u16 PadGetUp(int Port); u16 PadGetUp(int Port);
u16 PadGetDown(int Port); u16 PadGetDown(int Port);
u16 PadGetHeld(int Port); u16 PadGetHeld(int Port);
u16 PadGetTick(int Port); u16 PadGetRepeat(int Port);
int PadIsDualShock(int Port); int PadIsDualShock(int Port);

View file

@ -161,6 +161,7 @@ int psp=0;
void CPaulScene::think(int _frames) void CPaulScene::think(int _frames)
{ {
/*
int pad; int pad;
int sfxId=-1; int sfxId=-1;
int setSfxVolume=false; int setSfxVolume=false;
@ -246,21 +247,18 @@ void CPaulScene::think(int _frames)
{ {
PAUL_DBGMSG("speech:%d sfx:%d",mvol,svol); PAUL_DBGMSG("speech:%d sfx:%d",mvol,svol);
} }
*/
//CXAStream::ControlXA();
pad=PadGetHeld(1);
if(pad&PAD_L1)
{ {
} int pad=PadGetRepeat(0);
else int i;
for(i=0;i<16;i++)
{ {
if(pad&(1<<i))
s_fontBank.print(40+(i*10),120,"+");
}
} }
} }