Shahrazad

This commit is contained in:
Alumi
2021-02-02 16:00:30 +00:00
committed by Michael Kamensky
parent 9f4c694c21
commit 3d8749e5e1
16 changed files with 462 additions and 6 deletions

View File

@@ -34,6 +34,7 @@ import forge.game.GameRules;
import forge.game.GameType;
import forge.game.GameView;
import forge.game.Match;
import forge.game.event.*;
import forge.game.player.Player;
import forge.game.player.PlayerView;
import forge.game.player.RegisteredPlayer;
@@ -332,7 +333,7 @@ public class HostedMatch {
return isMatchOver;
}
private final class MatchUiEventVisitor implements IUiEventVisitor<Void> {
private final class MatchUiEventVisitor extends IGameEventVisitor.Base<Void> implements IUiEventVisitor<Void> {
@Override
public Void visit(final UiEventBlockerAssigned event) {
for (final PlayerControllerHuman humanController : humanControllers) {
@@ -359,6 +360,69 @@ public class HostedMatch {
return null;
}
@Override
public Void visit(final GameEventSubgameStart event) {
event.subgame.subscribeToEvents(SoundSystem.instance);
event.subgame.subscribeToEvents(visitor);
final GameView gameView = event.subgame.getView();
Runnable switchGameView = new Runnable() {
@Override
public void run() {
for (final Player p : event.subgame.getPlayers()) {
if (p.getController() instanceof PlayerControllerHuman) {
final PlayerControllerHuman humanController = (PlayerControllerHuman) p.getController();
final IGuiGame gui = guis.get(p.getRegisteredPlayer());
humanController.setGui(gui);
gui.setGameView(null);
gui.setGameView(gameView);
gui.setOriginalGameController(p.getView(), humanController);
gui.openView(new TrackableCollection<>(p.getView()));
gui.setGameView(null);
gui.setGameView(gameView);
event.subgame.subscribeToEvents(new FControlGameEventHandler(humanController));
gui.message(event.message);
}
}
}
};
GuiBase.getInterface().invokeInEdtAndWait(switchGameView);
//ensure opponents set properly
for (final Player p : event.subgame.getPlayers()) {
p.updateOpponentsForView();
}
return null;
}
@Override
public Void visit(final GameEventSubgameEnd event) {
final GameView gameView = event.maingame.getView();
Runnable switchGameView = new Runnable() {
@Override
public void run() {
for (final Player p : event.maingame.getPlayers()) {
if (p.getController() instanceof PlayerControllerHuman) {
final PlayerControllerHuman humanController = (PlayerControllerHuman) p.getController();
final IGuiGame gui = guis.get(p.getRegisteredPlayer());
gui.setGameView(null);
gui.setGameView(gameView);
gui.setOriginalGameController(p.getView(), humanController);
gui.openView(new TrackableCollection<>(p.getView()));
gui.setGameView(null);
gui.setGameView(gameView);
gui.updatePhase();
gui.message(event.message);
}
}
}
};
GuiBase.getInterface().invokeInEdtAndWait(switchGameView);
return null;
}
@Subscribe
public void receiveEvent(final UiEvent evt) {
try {
@@ -368,6 +432,16 @@ public class HostedMatch {
e.printStackTrace();
}
}
@Subscribe
public void receiveGameEvent(final GameEvent evt) {
try {
evt.visit(this);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
private void addNextGameDecision(final PlayerControllerHuman controller, final NextGameDecision decision) {