package net.hearthstats.game;
import java.util.EnumSet;
import net.hearthstats.game.imageanalysis.Pixel;
/**
* Represents the screens in Hearthstone.
*/
public enum Screen {
TITLE (
"Title Screen",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.TITLE_F,
Pixel.TITLE_L,
Pixel.TITLE_N,
Pixel.TITLE_Q
),
EnumSet.of(
Pixel.TITLE_C,
Pixel.TITLE_I
)),
MAIN (
"Main Menu",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.MAIN_C,
Pixel.MAIN_D,
Pixel.MAIN_E,
Pixel.MAIN_M
),
EnumSet.of(
Pixel.MAIN_A,
Pixel.MAIN_Q,
Pixel.MAIN_R
)),
MAIN_TODAYSQUESTS (
"Today's Quests",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.MAIN_TODAYSQUESTS_A,
Pixel.MAIN_TODAYSQUESTS_F,
Pixel.MAIN_TODAYSQUESTS_M
),
EnumSet.of(
Pixel.MAIN_TODAYSQUESTS_C,
Pixel.MAIN_TODAYSQUESTS_N,
Pixel.MAIN_TODAYSQUESTS_Q
)),
COLLECTION (
"Collection",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.COLLECTION_A,
Pixel.COLLECTION_B,
Pixel.COLLECTION_E,
Pixel.COLLECTION_M,
Pixel.COLLECTION_Q
),
EnumSet.of(
Pixel.COLLECTION_C,
Pixel.COLLECTION_I
)),
COLLECTION_ZOOM (
"Collection Card Zoom",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.COLLECTION_ZOOM_A,
Pixel.COLLECTION_ZOOM_O,
Pixel.COLLECTION_ZOOM_M,
Pixel.COLLECTION_ZOOM_Q
),
EnumSet.of(
Pixel.COLLECTION_ZOOM_C,
Pixel.COLLECTION_ZOOM_I
)),
COLLECTION_DECK (
"Collection Deck",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.COLLECTION_DECK_A,
Pixel.COLLECTION_DECK_B,
Pixel.COLLECTION_DECK_E,
Pixel.COLLECTION_DECK_M,
Pixel.COLLECTION_DECK_Q
),
EnumSet.of(
Pixel.COLLECTION_DECK_C,
Pixel.COLLECTION_DECK_I
)),
ARENA_CHOOSE (
"Arena Lobby",
ScreenGroup.ARENA,
EnumSet.of(
Pixel.ARENA_CHOOSE_E,
Pixel.ARENA_CHOOSE_F,
Pixel.ARENA_CHOOSE_L,
Pixel.ARENA_CHOOSE_P
),
EnumSet.of(
Pixel.ARENA_CHOOSE_C,
Pixel.ARENA_CHOOSE_G,
Pixel.ARENA_CHOOSE_Q
)),
ARENA_END (
"Arena Lobby",
ScreenGroup.ARENA,
EnumSet.of(
Pixel.ARENA_END_E,
Pixel.ARENA_END_F,
Pixel.ARENA_END_G,
Pixel.ARENA_END_L,
Pixel.ARENA_END_P
),
EnumSet.of(
Pixel.ARENA_END_C,
Pixel.ARENA_END_Q
)),
ARENA_LOBBY (
"Arena Lobby",
ScreenGroup.ARENA,
EnumSet.of(
Pixel.ARENA_LOBBY_E,
Pixel.ARENA_LOBBY_F,
Pixel.ARENA_LOBBY_L,
Pixel.ARENA_LOBBY_P
),
EnumSet.of(
Pixel.ARENA_LOBBY_C,
Pixel.ARENA_LOBBY_G,
Pixel.ARENA_LOBBY_Q
)),
PLAY_LOBBY (
"Play Lobby",
ScreenGroup.PLAY,
EnumSet.of(
Pixel.PLAY_LOBBY_E,
Pixel.PLAY_LOBBY_F,
Pixel.PLAY_LOBBY_H,
Pixel.PLAY_LOBBY_P
),
EnumSet.of(
Pixel.PLAY_LOBBY_C,
Pixel.PLAY_LOBBY_I,
Pixel.PLAY_LOBBY_Q
)),
PRACTICE_LOBBY (
"Practice Lobby",
ScreenGroup.PRACTICE,
EnumSet.of(
Pixel.PRACTICE_LOBBY_E,
Pixel.PRACTICE_LOBBY_F,
Pixel.PRACTICE_LOBBY_H,
Pixel.PRACTICE_LOBBY_P
),
EnumSet.of(
Pixel.PRACTICE_LOBBY_C,
Pixel.PRACTICE_LOBBY_I,
Pixel.PRACTICE_LOBBY_Q
)),
VERSUS_LOBBY (
"Versus Lobby",
ScreenGroup.PLAY,
EnumSet.of(
Pixel.VERSUS_LOBBY_E,
Pixel.VERSUS_LOBBY_F,
Pixel.VERSUS_LOBBY_H,
Pixel.VERSUS_LOBBY_P
),
EnumSet.of(
Pixel.VERSUS_LOBBY_C,
Pixel.VERSUS_LOBBY_I,
Pixel.VERSUS_LOBBY_Q
)),
FINDING_OPPONENT (
"Finding Opponent",
ScreenGroup.GENERAL,
EnumSet.of(
Pixel.FINDING_OPPONENT_E,
Pixel.FINDING_OPPONENT_F,
Pixel.FINDING_OPPONENT_G,
Pixel.FINDING_OPPONENT_N
),
EnumSet.of(
Pixel.FINDING_OPPONENT_C,
Pixel.FINDING_OPPONENT_R
)),
MATCH_VS (
"Match Start",
ScreenGroup.MATCH_START,
EnumSet.of(
Pixel.MATCH_VS_E,
Pixel.MATCH_VS_F,
Pixel.MATCH_VS_G,
Pixel.MATCH_VS_H
),
EnumSet.of(
Pixel.MATCH_VS_C,
Pixel.MATCH_VS_Q,
Pixel.MATCH_VS_R
)),
MATCH_STARTINGHAND (
"Starting Hand",
ScreenGroup.MATCH_START,
EnumSet.of(
Pixel.MATCH_STARTINGHAND_E,
Pixel.MATCH_STARTINGHAND_O,
Pixel.MATCH_STARTINGHAND_Q
),
EnumSet.of(
Pixel.MATCH_STARTINGHAND_C,
Pixel.MATCH_STARTINGHAND_R
)),
MATCH_NAXXRAMAS (
"Playing",
ScreenGroup.MATCH_PLAYING,
EnumSet.of(
Pixel.MATCH_NAXXRAMAS_B,
Pixel.MATCH_NAXXRAMAS_C,
Pixel.MATCH_NAXXRAMAS_K,
Pixel.MATCH_NAXXRAMAS_L
),
EnumSet.of(
Pixel.MATCH_NAXXRAMAS_D,
Pixel.MATCH_NAXXRAMAS_E,
Pixel.MATCH_NAXXRAMAS_R
)),
MATCH_ORGRIMMAR (
"Playing",
ScreenGroup.MATCH_PLAYING,
EnumSet.of(
Pixel.MATCH_ORGRIMMAR_B,
Pixel.MATCH_ORGRIMMAR_C,
Pixel.MATCH_ORGRIMMAR_K,
Pixel.MATCH_ORGRIMMAR_L
),
EnumSet.of(
Pixel.MATCH_ORGRIMMAR_D,
Pixel.MATCH_ORGRIMMAR_E,
Pixel.MATCH_ORGRIMMAR_R
)),
MATCH_PANDARIA (
"Playing",
ScreenGroup.MATCH_PLAYING,
EnumSet.of(
Pixel.MATCH_PANDARIA_B,
Pixel.MATCH_PANDARIA_C,
Pixel.MATCH_PANDARIA_K,
Pixel.MATCH_PANDARIA_L
),
EnumSet.of(
Pixel.MATCH_PANDARIA_D,
Pixel.MATCH_PANDARIA_E,
Pixel.MATCH_PANDARIA_R
)),
MATCH_STORMWIND (
"Playing",
ScreenGroup.MATCH_PLAYING,
EnumSet.of(
Pixel.MATCH_STORMWIND_B,
Pixel.MATCH_STORMWIND_C,
Pixel.MATCH_STORMWIND_K,
Pixel.MATCH_STORMWIND_L
),
EnumSet.of(
Pixel.MATCH_STORMWIND_D,
Pixel.MATCH_STORMWIND_E,
Pixel.MATCH_STORMWIND_R
)),
MATCH_STRANGLETHORN (
"Playing",
ScreenGroup.MATCH_PLAYING,
EnumSet.of(
Pixel.MATCH_STRANGLETHORN_B,
Pixel.MATCH_STRANGLETHORN_C,
Pixel.MATCH_STRANGLETHORN_K,
Pixel.MATCH_STRANGLETHORN_L
),
EnumSet.of(
Pixel.MATCH_STRANGLETHORN_D,
Pixel.MATCH_STRANGLETHORN_E,
Pixel.MATCH_STRANGLETHORN_R
)),
MATCH_NAXXRAMAS_END (
"Result",
ScreenGroup.MATCH_END,
EnumSet.of(
Pixel.MATCH_NAXXRAMAS_END_B,
Pixel.MATCH_NAXXRAMAS_END_C,
Pixel.MATCH_NAXXRAMAS_END_K,
Pixel.MATCH_NAXXRAMAS_END_L
),
EnumSet.of(
Pixel.MATCH_NAXXRAMAS_END_D,
Pixel.MATCH_NAXXRAMAS_END_E,
Pixel.MATCH_NAXXRAMAS_END_R
)),
MATCH_ORGRIMMAR_END (
"Result",
ScreenGroup.MATCH_END,
EnumSet.of(
Pixel.MATCH_ORGRIMMAR_END_B,
Pixel.MATCH_ORGRIMMAR_END_C,
Pixel.MATCH_ORGRIMMAR_END_K,
Pixel.MATCH_ORGRIMMAR_END_L
),
EnumSet.of(
Pixel.MATCH_ORGRIMMAR_END_D,
Pixel.MATCH_ORGRIMMAR_END_E,
Pixel.MATCH_ORGRIMMAR_END_R
)),
MATCH_PANDARIA_END (
"Result",
ScreenGroup.MATCH_END,
EnumSet.of(
Pixel.MATCH_PANDARIA_END_B,
Pixel.MATCH_PANDARIA_END_C,
Pixel.MATCH_PANDARIA_END_K,
Pixel.MATCH_PANDARIA_END_L
),
EnumSet.of(
Pixel.MATCH_PANDARIA_END_D,
Pixel.MATCH_PANDARIA_END_E,
Pixel.MATCH_PANDARIA_END_R
)),
MATCH_STORMWIND_END (
"Result",
ScreenGroup.MATCH_END,
EnumSet.of(
Pixel.MATCH_STORMWIND_END_B,
Pixel.MATCH_STORMWIND_END_C,
Pixel.MATCH_STORMWIND_END_K,
Pixel.MATCH_STORMWIND_END_L
),
EnumSet.of(
Pixel.MATCH_STORMWIND_END_D,
Pixel.MATCH_STORMWIND_END_E,
Pixel.MATCH_STORMWIND_END_R
)),
MATCH_STRANGLETHORN_END (
"Result",
ScreenGroup.MATCH_END,
EnumSet.of(
Pixel.MATCH_STRANGLETHORN_END_B,
Pixel.MATCH_STRANGLETHORN_END_C,
Pixel.MATCH_STRANGLETHORN_END_K,
Pixel.MATCH_STRANGLETHORN_END_L
),
EnumSet.of(
Pixel.MATCH_STRANGLETHORN_END_D,
Pixel.MATCH_STRANGLETHORN_END_E,
Pixel.MATCH_STRANGLETHORN_END_R
)),
;
/*
* Enums can't refer to themselves during construction, so the set of 'next' screens cannot be defined
* directly in the enums above. The following code adds that set to each screen immediately after it
* is constructed.
*/
static {
TITLE.nextScreens = EnumSet.of(
Screen.MAIN
);
MAIN.nextScreens = EnumSet.of(
Screen.COLLECTION,
Screen.PLAY_LOBBY,
Screen.PRACTICE_LOBBY,
Screen.ARENA_CHOOSE,
Screen.ARENA_LOBBY,
Screen.VERSUS_LOBBY
);
MAIN_TODAYSQUESTS.nextScreens = EnumSet.of(
Screen.MAIN
);
COLLECTION.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.COLLECTION_DECK,
Screen.COLLECTION_ZOOM
);
COLLECTION_DECK.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.COLLECTION,
Screen.COLLECTION_ZOOM
);
COLLECTION_ZOOM.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.COLLECTION,
Screen.COLLECTION_DECK
);
ARENA_CHOOSE.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.ARENA_LOBBY
);
ARENA_END.nextScreens = EnumSet.of(
Screen.MAIN
);
ARENA_LOBBY.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.FINDING_OPPONENT
);
PLAY_LOBBY.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.FINDING_OPPONENT
);
PRACTICE_LOBBY.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.FINDING_OPPONENT
);
VERSUS_LOBBY.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.MATCH_VS
);
FINDING_OPPONENT.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.PLAY_LOBBY,
Screen.PRACTICE_LOBBY,
Screen.ARENA_LOBBY,
Screen.MATCH_VS
);
MATCH_VS.nextScreens = EnumSet.of(
Screen.MATCH_STARTINGHAND
);
MATCH_STARTINGHAND.nextScreens = EnumSet.of(
Screen.MATCH_NAXXRAMAS,
Screen.MATCH_ORGRIMMAR,
Screen.MATCH_PANDARIA,
Screen.MATCH_STORMWIND,
Screen.MATCH_STRANGLETHORN
);
MATCH_NAXXRAMAS.nextScreens = EnumSet.of(
Screen.MATCH_NAXXRAMAS_END
);
MATCH_ORGRIMMAR.nextScreens = EnumSet.of(
Screen.MATCH_ORGRIMMAR_END
);
MATCH_PANDARIA.nextScreens = EnumSet.of(
Screen.MATCH_PANDARIA_END
);
MATCH_STORMWIND.nextScreens = EnumSet.of(
Screen.MATCH_STORMWIND_END
);
MATCH_STRANGLETHORN.nextScreens = EnumSet.of(
Screen.MATCH_STRANGLETHORN_END
);
MATCH_ORGRIMMAR_END.nextScreens = EnumSet.of(
Screen.MAIN,
Screen.PLAY_LOBBY,
Screen.PRACTICE_LOBBY,
Screen.ARENA_LOBBY,
Screen.VERSUS_LOBBY,
Screen.ARENA_END
);
MATCH_NAXXRAMAS_END.nextScreens = MATCH_ORGRIMMAR_END.nextScreens;
MATCH_PANDARIA_END.nextScreens = MATCH_ORGRIMMAR_END.nextScreens;
MATCH_STORMWIND_END.nextScreens = MATCH_ORGRIMMAR_END.nextScreens;
MATCH_STRANGLETHORN_END.nextScreens = MATCH_ORGRIMMAR_END.nextScreens;
}
public final String title;
public final ScreenGroup group;
public final EnumSet<Pixel> primary;
public final EnumSet<Pixel> secondary;
public final EnumSet<Pixel> primaryAndSecondary;
public EnumSet<Screen> nextScreens;
Screen(String title, ScreenGroup group, EnumSet<Pixel> primary, EnumSet<Pixel> secondary) {
this.title = title;
this.group = group;
this.primary = primary;
this.secondary = secondary;
// primaryAndSecondary is a convenience property that makes it easier to iterate through both primary and secondary in one loop
this.primaryAndSecondary = EnumSet.copyOf(primary);
this.primaryAndSecondary.addAll(secondary);
}
}