add BurnTrackballConfigStartStopPoints() to trackball device
This commit is contained in:
parent
75918297a5
commit
4c93aa6b86
|
@ -1,9 +1,9 @@
|
||||||
#include "burnint.h"
|
#include "burnint.h"
|
||||||
#include "burn_gun.h"
|
#include "burn_gun.h"
|
||||||
|
|
||||||
// Generic Light Gun support for FBA
|
// Generic Light Gun & Trackball (dial, paddle, wheel, trackball) support for FBA
|
||||||
// written by Barry Harris (Treble Winner) based on the code in Kev's opwolf driver
|
// written by Barry Harris (Treble Winner) based on the code in Kev's opwolf driver
|
||||||
// Trackball/Paddle/Dial section by dink
|
// Trackball/Paddle/Dial emulation by dink
|
||||||
|
|
||||||
INT32 nBurnGunNumPlayers = 0;
|
INT32 nBurnGunNumPlayers = 0;
|
||||||
bool bBurnGunAutoHide = 1;
|
bool bBurnGunAutoHide = 1;
|
||||||
|
@ -145,12 +145,14 @@ void BurnPaddleReturn(BurnDialINF &dial, INT32 num, INT32 isB)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trackball Helpers
|
// Trackball Helpers
|
||||||
static UINT16 TrackA[MAX_GUNS]; // trackball counters
|
static INT32 TrackA[MAX_GUNS]; // trackball counters
|
||||||
static UINT16 TrackB[MAX_GUNS];
|
static INT32 TrackB[MAX_GUNS];
|
||||||
|
|
||||||
static INT32 DIAL_INC[MAX_GUNS * 2]; // velocity counter
|
static INT32 DIAL_INC[MAX_GUNS * 2]; // velocity counter
|
||||||
static UINT8 DrvJoyT[MAX_GUNS * 4]; // direction bytes
|
static UINT8 DrvJoyT[MAX_GUNS * 4]; // direction bytes
|
||||||
static UINT8 TrackRev[MAX_GUNS * 2]; // normal/reversed config
|
static UINT8 TrackRev[MAX_GUNS * 2]; // normal/reversed config
|
||||||
|
static INT32 TrackStart[MAX_GUNS * 2]; // Start / Stop points
|
||||||
|
static INT32 TrackStop[MAX_GUNS * 2];
|
||||||
|
|
||||||
void BurnTrackballFrame(INT32 dev, INT16 PortA, INT16 PortB, INT32 VelocityStart, INT32 VelocityMax)
|
void BurnTrackballFrame(INT32 dev, INT16 PortA, INT16 PortB, INT32 VelocityStart, INT32 VelocityMax)
|
||||||
{
|
{
|
||||||
|
@ -193,6 +195,14 @@ void BurnTrackballUpdate(INT32 dev)
|
||||||
else
|
else
|
||||||
TrackA[dev] += DIAL_INC[(dev*2) + 0];
|
TrackA[dev] += DIAL_INC[(dev*2) + 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PortA Start / Stop points (if configured)
|
||||||
|
if (TrackStart[(dev*2) + 0] != -1 && TrackA[dev] < TrackStart[(dev*2) + 0])
|
||||||
|
TrackA[dev] = TrackStart[(dev*2) + 0];
|
||||||
|
|
||||||
|
if (TrackStop[(dev*2) + 0] != -1 && TrackA[dev] > TrackStop[(dev*2) + 0])
|
||||||
|
TrackA[dev] = TrackStop[(dev*2) + 0];
|
||||||
|
|
||||||
// PortB (usually Y-Axis)
|
// PortB (usually Y-Axis)
|
||||||
if (DrvJoyT[(dev*4) + 2]) { // Backward
|
if (DrvJoyT[(dev*4) + 2]) { // Backward
|
||||||
if (TrackRev[(dev*2) + 1])
|
if (TrackRev[(dev*2) + 1])
|
||||||
|
@ -206,6 +216,13 @@ void BurnTrackballUpdate(INT32 dev)
|
||||||
else
|
else
|
||||||
TrackB[dev] += DIAL_INC[(dev*2) + 1];
|
TrackB[dev] += DIAL_INC[(dev*2) + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PortB Start / Stop points (if configured)
|
||||||
|
if (TrackStart[(dev*2) + 1] != -1 && TrackB[dev] < TrackStart[(dev*2) + 1])
|
||||||
|
TrackB[dev] = TrackStart[(dev*2) + 1];
|
||||||
|
|
||||||
|
if (TrackStop[(dev*2) + 1] != -1 && TrackB[dev] > TrackStop[(dev*2) + 1])
|
||||||
|
TrackB[dev] = TrackStop[(dev*2) + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void BurnTrackballUpdateSlither(INT32 dev)
|
void BurnTrackballUpdateSlither(INT32 dev)
|
||||||
|
@ -217,30 +234,30 @@ void BurnTrackballUpdateSlither(INT32 dev)
|
||||||
flippy[0] ^= 1;
|
flippy[0] ^= 1;
|
||||||
if (flippy[0]) return;
|
if (flippy[0]) return;
|
||||||
if (TrackRev[(dev*2) + 0])
|
if (TrackRev[(dev*2) + 0])
|
||||||
TrackA[dev] += DIAL_INC[(dev*2) + 0] / 2;
|
TrackA[dev] += DIAL_INC[(dev*2) + 0];
|
||||||
else
|
else
|
||||||
TrackA[dev] -= DIAL_INC[(dev*2) + 0] / 2;
|
TrackA[dev] -= DIAL_INC[(dev*2) + 0];
|
||||||
}
|
}
|
||||||
if (DrvJoyT[(dev*4) + 1]) { // Forward
|
if (DrvJoyT[(dev*4) + 1]) { // Forward
|
||||||
if (TrackRev[(dev*2) + 0])
|
if (TrackRev[(dev*2) + 0])
|
||||||
TrackA[dev] -= DIAL_INC[(dev*2) + 0] / 2;
|
TrackA[dev] -= DIAL_INC[(dev*2) + 0];
|
||||||
else
|
else
|
||||||
TrackA[dev] += DIAL_INC[(dev*2) + 0] / 2;
|
TrackA[dev] += DIAL_INC[(dev*2) + 0];
|
||||||
}
|
}
|
||||||
// PortB (usually Y-Axis)
|
// PortB (usually Y-Axis)
|
||||||
if (DrvJoyT[(dev*4) + 2]) { // Backward
|
if (DrvJoyT[(dev*4) + 2]) { // Backward
|
||||||
if (TrackRev[(dev*2) + 1])
|
if (TrackRev[(dev*2) + 1])
|
||||||
TrackB[dev] += DIAL_INC[(dev*2) + 1] / 2;
|
TrackB[dev] += DIAL_INC[(dev*2) + 1];
|
||||||
else
|
else
|
||||||
TrackB[dev] -= DIAL_INC[(dev*2) + 1] / 2;
|
TrackB[dev] -= DIAL_INC[(dev*2) + 1];
|
||||||
}
|
}
|
||||||
if (DrvJoyT[(dev*4) + 3]) { // Forward
|
if (DrvJoyT[(dev*4) + 3]) { // Forward
|
||||||
flippy[1] ^= 1;
|
flippy[1] ^= 1;
|
||||||
if (flippy[1]) return;
|
if (flippy[1]) return;
|
||||||
if (TrackRev[(dev*2) + 1])
|
if (TrackRev[(dev*2) + 1])
|
||||||
TrackB[dev] -= DIAL_INC[(dev*2) + 1] / 2;
|
TrackB[dev] -= DIAL_INC[(dev*2) + 1];
|
||||||
else
|
else
|
||||||
TrackB[dev] += DIAL_INC[(dev*2) + 1] / 2;
|
TrackB[dev] += DIAL_INC[(dev*2) + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,6 +290,15 @@ void BurnTrackballConfig(INT32 dev, INT32 PortA_rev, INT32 PortB_rev)
|
||||||
TrackRev[(dev*2) + 0] = PortA_rev;
|
TrackRev[(dev*2) + 0] = PortA_rev;
|
||||||
TrackRev[(dev*2) + 1] = PortB_rev;
|
TrackRev[(dev*2) + 1] = PortB_rev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BurnTrackballConfigStartStopPoints(INT32 dev, INT32 PortA_Start, INT32 PortA_Stop, INT32 PortB_Start, INT32 PortB_Stop)
|
||||||
|
{
|
||||||
|
TrackStart[(dev*2) + 0] = PortA_Start;
|
||||||
|
TrackStart[(dev*2) + 1] = PortB_Start;
|
||||||
|
TrackStop[(dev*2) + 0] = PortA_Stop;
|
||||||
|
TrackStop[(dev*2) + 1] = PortB_Stop;
|
||||||
|
}
|
||||||
|
|
||||||
// end Trackball Helpers
|
// end Trackball Helpers
|
||||||
|
|
||||||
void BurnPaddleSetWrap(INT32 num, INT32 xmin, INT32 xmax, INT32 ymin, INT32 ymax)
|
void BurnPaddleSetWrap(INT32 num, INT32 xmin, INT32 xmax, INT32 ymin, INT32 ymax)
|
||||||
|
@ -374,12 +400,16 @@ void BurnGunInit(INT32 nNumPlayers, bool bDrawTargets)
|
||||||
BurnPaddleSetWrap(i, 0, 0xf0, 0, 0xf0); // Paddle/dial stuff
|
BurnPaddleSetWrap(i, 0, 0xf0, 0, 0xf0); // Paddle/dial stuff
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trackball stuff
|
// Trackball stuff (init)
|
||||||
memset(&TrackA, 0, sizeof(TrackA));
|
memset(&TrackA, 0, sizeof(TrackA));
|
||||||
memset(&TrackB, 0, sizeof(TrackB));
|
memset(&TrackB, 0, sizeof(TrackB));
|
||||||
memset(&DrvJoyT, 0, sizeof(DrvJoyT));
|
memset(&DrvJoyT, 0, sizeof(DrvJoyT));
|
||||||
memset(&DIAL_INC, 0, sizeof(DIAL_INC));
|
memset(&DIAL_INC, 0, sizeof(DIAL_INC));
|
||||||
memset(&TrackRev, 0, sizeof(TrackRev));
|
memset(&TrackRev, 0, sizeof(TrackRev));
|
||||||
|
for (INT32 i = 0; i < MAX_GUNS*2; i++) {
|
||||||
|
TrackStart[i] = -1;
|
||||||
|
TrackStop[i] = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BurnGunExit()
|
void BurnGunExit()
|
||||||
|
@ -420,7 +450,6 @@ void BurnGunScan()
|
||||||
|
|
||||||
SCAN_VAR(DIAL_INC);
|
SCAN_VAR(DIAL_INC);
|
||||||
SCAN_VAR(DrvJoyT);
|
SCAN_VAR(DrvJoyT);
|
||||||
SCAN_VAR(TrackRev);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ void BurnTrackballUDLR(INT32 dev, INT32 u, INT32 d, INT32 l, INT32 r);
|
||||||
|
|
||||||
// Configure if an axis (Port) is reversed (1) or normal (0)
|
// Configure if an axis (Port) is reversed (1) or normal (0)
|
||||||
void BurnTrackballConfig(INT32 dev, INT32 PortA_rev, INT32 PortB_rev);
|
void BurnTrackballConfig(INT32 dev, INT32 PortA_rev, INT32 PortB_rev);
|
||||||
|
void BurnTrackballConfigStartStopPoints(INT32 dev, INT32 PortA_Start, INT32 PortA_Stop, INT32 PortB_Start, INT32 PortB_Stop);
|
||||||
|
|
||||||
// Read the position counter (8/16bit)
|
// Read the position counter (8/16bit)
|
||||||
UINT8 BurnTrackballRead(INT32 dev, INT32 isB);
|
UINT8 BurnTrackballRead(INT32 dev, INT32 isB);
|
||||||
|
|
|
@ -1097,8 +1097,8 @@ static INT32 DrvFrame()
|
||||||
if (is_slither) {
|
if (is_slither) {
|
||||||
BurnTrackballConfig(0, AXIS_NORMAL, AXIS_REVERSED);
|
BurnTrackballConfig(0, AXIS_NORMAL, AXIS_REVERSED);
|
||||||
BurnTrackballConfig(1, AXIS_NORMAL, AXIS_REVERSED);
|
BurnTrackballConfig(1, AXIS_NORMAL, AXIS_REVERSED);
|
||||||
BurnTrackballFrame(0, DrvAnalogPort0, DrvAnalogPort1, 2, 3);
|
BurnTrackballFrame(0, DrvAnalogPort0, DrvAnalogPort1, 1, 2);
|
||||||
BurnTrackballFrame(1, DrvAnalogPort2, DrvAnalogPort3, 2, 3);
|
BurnTrackballFrame(1, DrvAnalogPort2, DrvAnalogPort3, 1, 2);
|
||||||
BurnTrackballUpdateSlither(0);
|
BurnTrackballUpdateSlither(0);
|
||||||
BurnTrackballUpdateSlither(1);
|
BurnTrackballUpdateSlither(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue