ScreenProviderManager.java
package com.github.quizclash.application;
import com.github.quizclash.application.room.GameRoomManager;
import com.github.quizclash.application.screen.ScreenFactory;
import com.github.quizclash.application.screen.provider.*;
import com.github.quizclash.domain.Repository;
public class ScreenProviderManager {
private final Repository repository;
private final ScreenFactory screenFactory;
private final GameRoomManager gameRoomManager;
private ScreenProvider currentScreenProvider;
public ScreenProviderManager(Repository repository,
ScreenFactory screenFactory,
GameRoomManager gameRoomManager) {
this.repository = repository;
this.screenFactory = screenFactory;
this.gameRoomManager = gameRoomManager;
this.currentScreenProvider = new WelcomeScreenProvider(repository, screenFactory);
}
public void run() {
while (currentScreenProvider != null) {
currentScreenProvider.execute();
this.updateScreenProvider();
}
}
public void updateScreenProvider() {
ScreenProviderType nextScreenProviderType = currentScreenProvider.getNextScreenProviderType();
if (nextScreenProviderType == null) {
currentScreenProvider = null;
return;
}
switch (nextScreenProviderType) {
case ADD_USER -> currentScreenProvider = new AddUserScreenProvider(repository, screenFactory);
case CHANGE_CATEGORY_SETTINGS ->
currentScreenProvider = new ChangeCategorySettingScreenProvider(repository,
screenFactory);
case GAME_MODE ->
currentScreenProvider = new GameModeScreenProvider(repository, screenFactory);
case GAME_SETTINGS ->
currentScreenProvider = new GameSettingsScreenProvider(repository, screenFactory);
case LOCAL_MULTIPLAYER ->
currentScreenProvider = new LocalMultiplayerScreenProvider(repository, screenFactory);
case MENU -> currentScreenProvider = new MenuScreenProvider(repository, screenFactory);
case ONLINE_MULTIPLAYER ->
currentScreenProvider = new OnlineMultiplayerScreenProvider(repository, screenFactory,
gameRoomManager);
case REMOVE_USER ->
currentScreenProvider = new RemoveUserScreenProvider(repository, screenFactory);
case TRAINING ->
currentScreenProvider = new TrainingScreenProvider(repository, screenFactory);
case USER_MENU ->
currentScreenProvider = new UserMenuScreenProvider(repository, screenFactory);
case WELCOME -> currentScreenProvider = new WelcomeScreenProvider(repository, screenFactory);
}
}
}