Skip to content

Commit

Permalink
State Machine Update
Browse files Browse the repository at this point in the history
State Machine has been updated to allow Game over if no Overtime is needed. Game over can also be declared at the end of the overtime.
  • Loading branch information
BernardoCunha committed Feb 6, 2020
1 parent 5974125 commit 32ab034
Show file tree
Hide file tree
Showing 7 changed files with 554 additions and 145 deletions.
2 changes: 1 addition & 1 deletion mslrb2015/Button.pde
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ void buttonEvent(char group, int pos) {

// Special cases, that send only event message on game change (flags)
if( clickedButton.isYellow() || clickedButton.isRed() || clickedButton.isRepair() || clickedButton.isConfig() ||
clickedButton.isEndPart() || clickedButton.isReset() || clickedButton.isAlive())
clickedButton.isEndPart() || clickedButton.isReset() || clickedButton.isAlive() || clickedButton.isSubs())
{
// Do literally nothing...
}else{
Expand Down
264 changes: 136 additions & 128 deletions mslrb2015/RefreshButon.pde
Original file line number Diff line number Diff line change
Expand Up @@ -3,149 +3,150 @@ void RefreshButonStatus1() {

switch(StateMachine.GetCurrentGameState())
{
// PRE-GAME
case GS_PREGAME:
if (Popup.isEnabled() && (Popup.getType() == PopupTypeEnum.POPUP_WAIT)) Popup.close();

buttonAdisableAll(0); //team A commands
buttonBdisableAll(0); //team B commands
buttonCdisable(); //common commands

if(StateMachine.setpiece)
{
if(StateMachine.setpiece_left){
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).activate();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).disable();
// PRE-GAME
case GS_PREGAME:
if (Popup.isEnabled() && (Popup.getType() == PopupTypeEnum.POPUP_WAIT)) Popup.close();

buttonAdisableAll(0); //team A commands
buttonBdisableAll(0); //team B commands
buttonCdisable(); //common commands

if(StateMachine.setpiece)
{
if(StateMachine.setpiece_left){
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).activate();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).disable();

}else{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).disable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).activate();
}

buttonFromEnum(ButtonsEnum.BTN_RESET).disable();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_CONFIG).disable();

}else{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).disable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).activate();
}

buttonFromEnum(ButtonsEnum.BTN_RESET).disable();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_CONFIG).disable();

}else{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).enable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).enable();

buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).enable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).enable();
buttonFromEnum(ButtonsEnum.BTN_START).disable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_RESET).activate();
buttonFromEnum(ButtonsEnum.BTN_CONFIG).activate();
}


buttonFromEnum(ButtonsEnum.BTN_START).disable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_RESET).activate();
buttonFromEnum(ButtonsEnum.BTN_CONFIG).activate();
}

break;

case GS_GAMEON_H1:
case GS_GAMEON_H2:
case GS_GAMEON_H3:
case GS_GAMEON_H4:
refreshbutton_game_on();
break;

case GS_GAMESTOP_H1:
case GS_GAMESTOP_H2:
case GS_GAMESTOP_H3:
case GS_GAMESTOP_H4:
refreshbutton_game_stopped();
if(StateMachine.setpiece){
buttonAdisable(); //team A commands
buttonBdisable(); //team B commands
buttonCdisable(); //common commands
buttonFromEnum(StateMachine.setpiece_button).activate();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_PARK).disable();
}else{
buttonFromEnum(ButtonsEnum.BTN_START).disable();
}
break;

case GS_HALFTIME:
case GS_OVERTIME:
case GS_HALFTIME_OVERTIME:
buttonAdisableAll(0); //team A commands
buttonBdisableAll(0); //team B commands
buttonCdisable(); //common commands
bTeamAcmds[CMDID_TEAM_GOAL].disable(); // Disable goal button if part ended with a goal
bTeamBcmds[CMDID_TEAM_GOAL].disable(); // Disable goal button if part ended with a goal

if (StateMachine.GetCurrentGameState() == GameStateEnum.GS_OVERTIME){
buttonFromEnum(ButtonsEnum.BTN_ENDPART).enable();
}

// Alternate Kick-Offs
boolean enableLeft = StateMachine.firstKickoffLeft;
if(StateMachine.GetCurrentGameState() == GameStateEnum.GS_HALFTIME || StateMachine.GetCurrentGameState() == GameStateEnum.GS_HALFTIME_OVERTIME)
enableLeft = !enableLeft;

break;

case GS_GAMEON_H1:
case GS_GAMEON_H2:
case GS_GAMEON_H3:
case GS_GAMEON_H4:
refreshbutton_game_on();
break;

case GS_GAMESTOP_H1:
case GS_GAMESTOP_H2:
case GS_GAMESTOP_H3:
case GS_GAMESTOP_H4:
refreshbutton_game_stopped();
if(StateMachine.setpiece){
if(StateMachine.setpiece)
{
buttonFromEnum(StateMachine.setpiece_button).activate();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_PARK).disable();
buttonFromEnum(ButtonsEnum.BTN_RESET).disable();
}else{
if(enableLeft)
{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).enable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).disable();
}else{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).disable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).enable();
}
buttonFromEnum(ButtonsEnum.BTN_START).disable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_PARK).activate();
if(StateMachine.GetCurrentGameState() == GameStateEnum.GS_OVERTIME)
buttonFromEnum(ButtonsEnum.BTN_RESET).activate();
}
break;

case GS_PENALTIES:
refreshbutton_game_stopped();
buttonAdisable(); //team A commands
buttonBdisable(); //team B commands
buttonCdisable(); //common commands
buttonFromEnum(StateMachine.setpiece_button).activate();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_PARK).disable();
}else{
buttonFromEnum(ButtonsEnum.BTN_START).disable();
}
break;

case GS_HALFTIME:
case GS_OVERTIME:
case GS_HALFTIME_OVERTIME:
buttonAdisableAll(0); //team A commands
buttonBdisableAll(0); //team B commands
buttonCdisable(); //common commands
bTeamAcmds[CMDID_TEAM_GOAL].disable(); // Disable goal button if part ended with a goal
bTeamBcmds[CMDID_TEAM_GOAL].disable(); // Disable goal button if part ended with a goal

// Alternate Kick-Offs
boolean enableLeft = StateMachine.firstKickoffLeft;
if(StateMachine.GetCurrentGameState() == GameStateEnum.GS_HALFTIME || StateMachine.GetCurrentGameState() == GameStateEnum.GS_HALFTIME_OVERTIME)
enableLeft = !enableLeft;

if(StateMachine.setpiece)
{

bTeamAcmds[CMDID_TEAM_PENALTY].enable();
bTeamBcmds[CMDID_TEAM_PENALTY].enable();

if(StateMachine.setpiece)
buttonFromEnum(StateMachine.setpiece_button).activate();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_PARK).disable();
buttonFromEnum(ButtonsEnum.BTN_RESET).disable();
}else{
if(enableLeft)
{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).enable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).disable();
}else{
buttonFromEnum(ButtonsEnum.BTN_L_KICKOFF).disable();
buttonFromEnum(ButtonsEnum.BTN_R_KICKOFF).enable();
}
buttonFromEnum(ButtonsEnum.BTN_START).disable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_PARK).activate();
if(StateMachine.GetCurrentGameState() == GameStateEnum.GS_OVERTIME)
buttonFromEnum(ButtonsEnum.BTN_RESET).activate();
}
break;

case GS_PENALTIES:
refreshbutton_game_stopped();
buttonAdisable(); //team A commands
buttonBdisable(); //team B commands
buttonCdisable(); //common commands

bTeamAcmds[CMDID_TEAM_PENALTY].enable();
bTeamBcmds[CMDID_TEAM_PENALTY].enable();

if(StateMachine.setpiece)
buttonFromEnum(StateMachine.setpiece_button).activate();
buttonFromEnum(ButtonsEnum.BTN_START).enable();
buttonFromEnum(ButtonsEnum.BTN_STOP).activate();
buttonFromEnum(ButtonsEnum.BTN_PARK).disable();
buttonFromEnum(ButtonsEnum.BTN_RESET).disable();

bCommoncmds[CMDID_COMMON_DROP_BALL].disable();
bCommoncmds[CMDID_COMMON_HALFTIME].enable();
break;

case GS_PENALTIES_ON:
refreshbutton_game_on();
break;

case GS_ENDGAME:
buttonAdisable(); //team A commands
buttonBdisable(); //team B commands
buttonCenable(); //common commands

bCommoncmds[CMDID_COMMON_DROP_BALL].disable();
bCommoncmds[CMDID_COMMON_HALFTIME].disable();
bCommoncmds[CMDID_COMMON_RESET].activate();
bCommoncmds[CMDID_COMMON_PARKING].activate();
buttonCSTARTdisable();
buttonCSTOPactivate();
break;

default:
buttonAenable(); //team A commands
buttonBenable(); //team B commands
buttonCenable(); //common commands
buttonCSTOPactivate();
break;
bCommoncmds[CMDID_COMMON_DROP_BALL].disable();
bCommoncmds[CMDID_COMMON_HALFTIME].enable();
break;

case GS_PENALTIES_ON:
refreshbutton_game_on();
break;

case GS_ENDGAME:
buttonAdisableAll(-1); //disabke team A commands
buttonBdisableAll(-1); //disable team B commands
buttonCdisable(); //disable common commands
bCommoncmds[CMDID_COMMON_RESET].activate();
bCommoncmds[CMDID_COMMON_PARKING].activate();
buttonCSTARTdisable();
buttonCSTOPactivate();
break;

default:
buttonAenable(); //team A commands
buttonBenable(); //team B commands
buttonCenable(); //common commands
buttonCSTOPactivate();
break;

}

Expand All @@ -162,6 +163,7 @@ void RefreshButonStatus1() {
}

// Update End Part / End Game button

String endPartOrEndGame = "End Part";
switch(StateMachine.GetCurrentGameState())
{
Expand All @@ -171,7 +173,13 @@ void RefreshButonStatus1() {
case GS_GAMESTOP_H2:
case GS_GAMESTOP_H4:
endPartOrEndGame = "End Game";
break;
case GS_PENALTIES:
case GS_OVERTIME:
endPartOrEndGame = "Game Over";
break;
}

bCommoncmds[CMDID_COMMON_HALFTIME].Label = endPartOrEndGame;
}

Expand Down
Loading

0 comments on commit 32ab034

Please sign in to comment.