mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Fix bug where restarting a level while dead crashes the game
Also made rumble pack communication thread safe
This commit is contained in:
parent
721dc3b44d
commit
8b0dd06f74
|
@ -40,6 +40,7 @@ static OSContPad gControllerData[MAX_PLAYERS];
|
|||
static u16 gControllerLastButton[MAX_PLAYERS];
|
||||
static enum ControllerDirection gControllerLastDirection[MAX_PLAYERS];
|
||||
static int gControllerDeadFrames;
|
||||
static int gTargetRumbleState;
|
||||
|
||||
static OSMesgQueue gControllerDataQueue;
|
||||
static OSMesg gControllerDataMesg;
|
||||
|
@ -71,6 +72,8 @@ void controllersSavePreviousState() {
|
|||
#define CONTROLLER_READ_SKIP_NUMBER 10
|
||||
|
||||
void controllersTriggerRead() {
|
||||
gTargetRumbleState = rumblePakCalculateState();
|
||||
|
||||
OSMesg msg;
|
||||
if (osRecvMesg(&gControllerDataQueue, &msg, OS_MESG_NOBLOCK) == 0) {
|
||||
memCopy(&gControllerData, msg, sizeof(gControllerData));
|
||||
|
@ -160,12 +163,10 @@ void controllerCheckRumble(int prevStatus, OSMesgQueue* serialMsgQ) {
|
|||
gRumblePakState = RumblepakStateDisconnected;
|
||||
}
|
||||
|
||||
int targetRumbleStatus = rumblePakCalculateState();
|
||||
|
||||
if (gRumblePakState == RumblepakStateInitialized) {
|
||||
if (targetRumbleStatus != gRumblePakOn) {
|
||||
if (gTargetRumbleState != gRumblePakOn) {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
s32 rumbleError = targetRumbleStatus ? osMotorStart(&gRumbleBackFs) : osMotorStop(&gRumbleBackFs);
|
||||
s32 rumbleError = gTargetRumbleState ? osMotorStart(&gRumbleBackFs) : osMotorStop(&gRumbleBackFs);
|
||||
|
||||
if (rumbleError == PFS_ERR_CONTRFAIL) {
|
||||
if (i == 2) {
|
||||
|
@ -175,12 +176,12 @@ void controllerCheckRumble(int prevStatus, OSMesgQueue* serialMsgQ) {
|
|||
gRumblePakState = RumblepakStateDisconnected;
|
||||
break;
|
||||
} else {
|
||||
gRumblePakOn = targetRumbleStatus;
|
||||
gRumblePakOn = gTargetRumbleState;
|
||||
gRumbleFailCount = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (!targetRumbleStatus) {
|
||||
} else if (!gTargetRumbleState) {
|
||||
osMotorStop(&gRumbleBackFs);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ void rumblePakClipInit() {
|
|||
}
|
||||
|
||||
prev->next = NULL;
|
||||
gFirstActiveClip = NULL;
|
||||
}
|
||||
|
||||
RumbleID rumblePakClipPlay(struct RumblePakWave* wave) {
|
||||
|
|
Loading…
Reference in a new issue