refactoring
This commit is contained in:
parent
b4b1f39a80
commit
2d3062dcc3
@ -12,6 +12,8 @@ import java.util.Objects;
|
|||||||
|
|
||||||
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
|
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
|
||||||
import static eu.jonahbauer.wizard.client.libgdx.actions.MyActions.changeParent;
|
import static eu.jonahbauer.wizard.client.libgdx.actions.MyActions.changeParent;
|
||||||
|
import static eu.jonahbauer.wizard.client.libgdx.screens.GameScreen.PAD_OF_TRUTH_POSITION;
|
||||||
|
import static eu.jonahbauer.wizard.client.libgdx.util.AnimationTimings.OVERLAY_SHARED_ELEMENT;
|
||||||
|
|
||||||
public class ScoreOverlay extends Overlay {
|
public class ScoreOverlay extends Overlay {
|
||||||
private final PadOfTruth padOfTruth;
|
private final PadOfTruth padOfTruth;
|
||||||
@ -36,13 +38,13 @@ public class ScoreOverlay extends Overlay {
|
|||||||
root.addAction(sequence(
|
root.addAction(sequence(
|
||||||
run(() -> padOfTruth.setEnabled(false)),
|
run(() -> padOfTruth.setEnabled(false)),
|
||||||
parallel(
|
parallel(
|
||||||
targeting(padOfTruth, scaleTo(1, 1, AnimationTimings.OVERLAY_SHARED_ELEMENT)),
|
targeting(padOfTruth, scaleTo(1, 1, OVERLAY_SHARED_ELEMENT)),
|
||||||
targeting(padOfTruth, moveTo((WizardGame.WIDTH - padOfTruth.getWidth()) / 2, (WizardGame.HEIGHT - padOfTruth.getHeight()) / 2, AnimationTimings.OVERLAY_SHARED_ELEMENT))
|
targeting(padOfTruth, moveTo((WizardGame.WIDTH - padOfTruth.getWidth()) / 2, (WizardGame.HEIGHT - padOfTruth.getHeight()) / 2, OVERLAY_SHARED_ELEMENT))
|
||||||
),
|
),
|
||||||
delay(AnimationTimings.OVERLAY_HOLD),
|
delay(AnimationTimings.OVERLAY_HOLD),
|
||||||
parallel(
|
parallel(
|
||||||
targeting(padOfTruth, scaleTo(PadOfTruth.COLLAPSED_SCALE, PadOfTruth.COLLAPSED_SCALE, AnimationTimings.OVERLAY_SHARED_ELEMENT)),
|
targeting(padOfTruth, scaleTo(PadOfTruth.COLLAPSED_SCALE, PadOfTruth.COLLAPSED_SCALE, OVERLAY_SHARED_ELEMENT)),
|
||||||
targeting(padOfTruth, moveTo(WizardGame.WIDTH - 10 - PadOfTruth.EXTENDED_WIDTH, 10, AnimationTimings.OVERLAY_SHARED_ELEMENT))
|
targeting(padOfTruth, moveTo(PAD_OF_TRUTH_POSITION.x, PAD_OF_TRUTH_POSITION.y, OVERLAY_SHARED_ELEMENT))
|
||||||
),
|
),
|
||||||
targeting(padOfTruth, changeParent(screen.getContentRoot())),
|
targeting(padOfTruth, changeParent(screen.getContentRoot())),
|
||||||
run(() -> padOfTruth.setEnabled(true)),
|
run(() -> padOfTruth.setEnabled(true)),
|
||||||
|
@ -2,7 +2,6 @@ package eu.jonahbauer.wizard.client.libgdx.actions.overlay;
|
|||||||
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Group;
|
import com.badlogic.gdx.scenes.scene2d.Group;
|
||||||
import com.badlogic.gdx.scenes.scene2d.actions.ParallelAction;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
|
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
|
import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
|
||||||
@ -10,78 +9,19 @@ import eu.jonahbauer.wizard.client.libgdx.util.AnimationTimings;
|
|||||||
import eu.jonahbauer.wizard.client.libgdx.actions.MyActions;
|
import eu.jonahbauer.wizard.client.libgdx.actions.MyActions;
|
||||||
import eu.jonahbauer.wizard.client.libgdx.actors.CardActor;
|
import eu.jonahbauer.wizard.client.libgdx.actors.CardActor;
|
||||||
import eu.jonahbauer.wizard.client.libgdx.screens.GameScreen;
|
import eu.jonahbauer.wizard.client.libgdx.screens.GameScreen;
|
||||||
|
import eu.jonahbauer.wizard.client.libgdx.util.CardUtil;
|
||||||
import eu.jonahbauer.wizard.common.model.Card;
|
import eu.jonahbauer.wizard.common.model.Card;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
|
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
|
||||||
import static eu.jonahbauer.wizard.client.libgdx.actions.MyActions.*;
|
import static eu.jonahbauer.wizard.client.libgdx.actions.MyActions.*;
|
||||||
|
import static eu.jonahbauer.wizard.client.libgdx.screens.GameScreen.*;
|
||||||
|
import static eu.jonahbauer.wizard.client.libgdx.util.AnimationTimings.OVERLAY_SHARED_ELEMENT;
|
||||||
|
|
||||||
public class TrumpOverlay extends Overlay {
|
public class TrumpOverlay extends Overlay {
|
||||||
@SuppressWarnings("RedundantTypeArguments")
|
|
||||||
private static final Map<Card, Card.Suit> DEFAULT_SUITES = Map.<Card, Card.Suit>ofEntries(
|
|
||||||
Map.entry(Card.BLUE_1, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_2, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_3, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_4, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_5, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_6, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_7, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_8, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_9, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_10, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_11, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_12, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.BLUE_13, Card.Suit.BLUE),
|
|
||||||
Map.entry(Card.RED_1, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_2, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_3, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_4, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_5, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_6, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_7, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_8, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_9, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_10, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_11, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_12, Card.Suit.RED),
|
|
||||||
Map.entry(Card.RED_13, Card.Suit.RED),
|
|
||||||
Map.entry(Card.GREEN_1, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_2, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_3, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_4, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_5, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_6, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_7, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_8, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_9, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_10, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_11, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_12, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.GREEN_13, Card.Suit.GREEN),
|
|
||||||
Map.entry(Card.YELLOW_1, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_2, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_3, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_4, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_5, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_6, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_7, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_8, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_9, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_10, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_11, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_12, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.YELLOW_13, Card.Suit.YELLOW),
|
|
||||||
Map.entry(Card.RED_JESTER, Card.Suit.NONE),
|
|
||||||
Map.entry(Card.GREEN_JESTER, Card.Suit.NONE),
|
|
||||||
Map.entry(Card.BLUE_JESTER, Card.Suit.NONE),
|
|
||||||
Map.entry(Card.YELLOW_JESTER, Card.Suit.NONE),
|
|
||||||
Map.entry(Card.BOMB, Card.Suit.NONE),
|
|
||||||
Map.entry(Card.FAIRY, Card.Suit.NONE)
|
|
||||||
);
|
|
||||||
|
|
||||||
private final @Nullable String player;
|
private final @Nullable String player;
|
||||||
private final @Nullable Card card;
|
private final @Nullable Card card;
|
||||||
@ -142,7 +82,7 @@ public class TrumpOverlay extends Overlay {
|
|||||||
trumpCardActor.setCard(card != null ? card : Card.HIDDEN);
|
trumpCardActor.setCard(card != null ? card : Card.HIDDEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
animateSuit = suit != null && suit != DEFAULT_SUITES.get(card);
|
animateSuit = suit != null && suit != CardUtil.getDefaultTrumpSuit(card);
|
||||||
if (animateSuit) {
|
if (animateSuit) {
|
||||||
trumpSuitActor.setRotation(0);
|
trumpSuitActor.setRotation(0);
|
||||||
trumpSuitActor.setOrigin(0, 0);
|
trumpSuitActor.setOrigin(0, 0);
|
||||||
@ -186,15 +126,13 @@ public class TrumpOverlay extends Overlay {
|
|||||||
// animate
|
// animate
|
||||||
parallel = parallel();
|
parallel = parallel();
|
||||||
if (animateSuit) {
|
if (animateSuit) {
|
||||||
parallel.addAction(targeting(trumpSuitActor, rotateTo(-90, AnimationTimings.OVERLAY_SHARED_ELEMENT)));
|
parallel.addAction(targeting(trumpSuitActor, rotateTo(TRUMP_SUIT_ROTATION, OVERLAY_SHARED_ELEMENT)));
|
||||||
parallel.addAction(
|
parallel.addAction(
|
||||||
targeting(trumpSuitActor,
|
targeting(trumpSuitActor, moveTo(TRUMP_SUIT_POSITION.x, TRUMP_SUIT_POSITION.y, OVERLAY_SHARED_ELEMENT))
|
||||||
moveTo(10, 10 + (trumpSuitActor.getHeight() + trumpSuitActor.getWidth()) / 2, AnimationTimings.OVERLAY_SHARED_ELEMENT)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (animateCard) {
|
if (animateCard) {
|
||||||
parallel.addAction(targeting(trumpCardActor, moveTo(10, 10, AnimationTimings.OVERLAY_SHARED_ELEMENT)));
|
parallel.addAction(targeting(trumpCardActor, moveTo(TRUMP_CARD_POSITION.x, TRUMP_CARD_POSITION.y, OVERLAY_SHARED_ELEMENT)));
|
||||||
}
|
}
|
||||||
cardAnimation.addAction(parallel);
|
cardAnimation.addAction(parallel);
|
||||||
|
|
||||||
|
@ -40,6 +40,12 @@ public class GameScreen extends WizardScreen {
|
|||||||
public static final int LAYER_BELOW_OVERLAY = 0;
|
public static final int LAYER_BELOW_OVERLAY = 0;
|
||||||
public static final int LAYER_BELOW_MENU = 1;
|
public static final int LAYER_BELOW_MENU = 1;
|
||||||
|
|
||||||
|
// positions for externally animated actors
|
||||||
|
public static final Vector2 TRUMP_CARD_POSITION = new Vector2(10, 10);
|
||||||
|
public static final Vector2 TRUMP_SUIT_POSITION = new Vector2(10, 10 + (CardActor.PREF_HEIGHT + CardActor.PREF_WIDTH) / 2);
|
||||||
|
public static final float TRUMP_SUIT_ROTATION = -90;
|
||||||
|
public static final Vector2 PAD_OF_TRUTH_POSITION = new Vector2(WizardGame.WIDTH - 10 - PadOfTruth.EXTENDED_WIDTH, 10);
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private TextureAtlas atlas;
|
private TextureAtlas atlas;
|
||||||
|
|
||||||
@ -131,7 +137,7 @@ public class GameScreen extends WizardScreen {
|
|||||||
messageStack.setTouchable(Touchable.disabled);
|
messageStack.setTouchable(Touchable.disabled);
|
||||||
|
|
||||||
padOfTruth = new PadOfTruth(skin, new TextureRegionDrawable(atlas.findRegion(GameAtlas.PAD_OF_TRUTH)));
|
padOfTruth = new PadOfTruth(skin, new TextureRegionDrawable(atlas.findRegion(GameAtlas.PAD_OF_TRUTH)));
|
||||||
padOfTruth.setPosition(WizardGame.WIDTH - 10 - PadOfTruth.EXTENDED_WIDTH, 10);
|
padOfTruth.setPosition(PAD_OF_TRUTH_POSITION.x, PAD_OF_TRUTH_POSITION.y);
|
||||||
padOfTruth.setOrigin(PadOfTruth.EXTENDED_WIDTH, 0);
|
padOfTruth.setOrigin(PadOfTruth.EXTENDED_WIDTH, 0);
|
||||||
|
|
||||||
cardStack = new CardStack();
|
cardStack = new CardStack();
|
||||||
@ -620,14 +626,7 @@ public class GameScreen extends WizardScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void showTrumpOverlay(@Nullable UUID player, @Nullable Card trumpCard, @Nullable Card.Suit trumpSuit) {
|
public void showTrumpOverlay(@Nullable UUID player, @Nullable Card trumpCard, @Nullable Card.Suit trumpSuit) {
|
||||||
if (trumpCardActor == null) {
|
initTrumpCards();
|
||||||
trumpCardActor = new CardActor(Card.HIDDEN, atlas);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trumpSuitActor == null) {
|
|
||||||
trumpSuitActor = new CardActor(Card.HIDDEN, atlas);
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(new TrumpOverlay(this, players.get(player), trumpCard, trumpSuit));
|
execute(new TrumpOverlay(this, players.get(player), trumpCard, trumpSuit));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -812,6 +811,16 @@ public class GameScreen extends WizardScreen {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initTrumpCards() {
|
||||||
|
if (trumpCardActor == null) {
|
||||||
|
trumpCardActor = new CardActor(Card.HIDDEN, atlas);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trumpSuitActor == null) {
|
||||||
|
trumpSuitActor = new CardActor(Card.HIDDEN, atlas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum Seat {
|
public enum Seat {
|
||||||
FALLBACK(WizardGame.WIDTH * 0.5f, WizardGame.HEIGHT * 0.5f, 0, 0, 0, WizardGame.WIDTH * 0.5f, WizardGame.HEIGHT * 0.5f),
|
FALLBACK(WizardGame.WIDTH * 0.5f, WizardGame.HEIGHT * 0.5f, 0, 0, 0, WizardGame.WIDTH * 0.5f, WizardGame.HEIGHT * 0.5f),
|
||||||
|
@ -9,6 +9,8 @@ import java.util.Optional;
|
|||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public abstract class Awaiting extends BaseState implements ClientState {
|
public abstract class Awaiting extends BaseState implements ClientState {
|
||||||
|
private static final int TIMEOUT_MILLIS = 10_000;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ClientState> onMessage(Client client, ServerMessage message) {
|
public Optional<ClientState> onMessage(Client client, ServerMessage message) {
|
||||||
return unexpectedMessage(message);
|
return unexpectedMessage(message);
|
||||||
@ -17,7 +19,7 @@ public abstract class Awaiting extends BaseState implements ClientState {
|
|||||||
@Override
|
@Override
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public Optional<ClientState> onEnter(Client client) {
|
public Optional<ClientState> onEnter(Client client) {
|
||||||
client.timeout(this, 10_000);
|
client.timeout(this, TIMEOUT_MILLIS);
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import lombok.extern.log4j.Log4j2;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public class AwaitingConnection extends Awaiting {
|
public final class AwaitingConnection extends Awaiting {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ClientState> onEnter(Client client) {
|
public Optional<ClientState> onEnter(Client client) {
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
package eu.jonahbauer.wizard.client.libgdx.util;
|
||||||
|
|
||||||
|
import eu.jonahbauer.wizard.common.model.Card;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@UtilityClass
|
||||||
|
public class CardUtil {
|
||||||
|
@SuppressWarnings("RedundantTypeArguments")
|
||||||
|
private static final Map<Card, Card.Suit> DEFAULT_SUITES = Map.<Card, Card.Suit>ofEntries(
|
||||||
|
Map.entry(Card.BLUE_1, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_2, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_3, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_4, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_5, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_6, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_7, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_8, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_9, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_10, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_11, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_12, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.BLUE_13, Card.Suit.BLUE),
|
||||||
|
Map.entry(Card.RED_1, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_2, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_3, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_4, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_5, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_6, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_7, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_8, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_9, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_10, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_11, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_12, Card.Suit.RED),
|
||||||
|
Map.entry(Card.RED_13, Card.Suit.RED),
|
||||||
|
Map.entry(Card.GREEN_1, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_2, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_3, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_4, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_5, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_6, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_7, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_8, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_9, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_10, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_11, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_12, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.GREEN_13, Card.Suit.GREEN),
|
||||||
|
Map.entry(Card.YELLOW_1, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_2, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_3, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_4, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_5, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_6, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_7, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_8, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_9, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_10, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_11, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_12, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.YELLOW_13, Card.Suit.YELLOW),
|
||||||
|
Map.entry(Card.RED_JESTER, Card.Suit.NONE),
|
||||||
|
Map.entry(Card.GREEN_JESTER, Card.Suit.NONE),
|
||||||
|
Map.entry(Card.BLUE_JESTER, Card.Suit.NONE),
|
||||||
|
Map.entry(Card.YELLOW_JESTER, Card.Suit.NONE),
|
||||||
|
Map.entry(Card.BOMB, Card.Suit.NONE),
|
||||||
|
Map.entry(Card.FAIRY, Card.Suit.NONE)
|
||||||
|
);
|
||||||
|
|
||||||
|
public Card.Suit getDefaultTrumpSuit(Card card) {
|
||||||
|
return DEFAULT_SUITES.get(card);
|
||||||
|
}
|
||||||
|
}
|
@ -34,5 +34,16 @@ public final class SessionJoinedMessage extends ServerMessage implements Respons
|
|||||||
this.player = player;
|
this.player = player;
|
||||||
this.players = List.copyOf(players);
|
this.players = List.copyOf(players);
|
||||||
this.secret = secret;
|
this.secret = secret;
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
for (var playerData : players) {
|
||||||
|
if (playerData.getUuid().equals(player)) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
throw new IllegalArgumentException("Player not contained in players.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ public class Lobby {
|
|||||||
|
|
||||||
private final Map<UUID, Session> sessions = new ConcurrentHashMap<>();
|
private final Map<UUID, Session> sessions = new ConcurrentHashMap<>();
|
||||||
private final List<Player> players = new ArrayList<>();
|
private final List<Player> players = new ArrayList<>();
|
||||||
|
// read lock is required whenever players are read or sessions are modified, write lock is required when players are modified
|
||||||
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
||||||
|
|
||||||
private Lobby() {}
|
private Lobby() {}
|
||||||
@ -79,6 +80,9 @@ public class Lobby {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a player to the lobby.
|
||||||
|
*/
|
||||||
public void join(Player player) {
|
public void join(Player player) {
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
try {
|
try {
|
||||||
@ -89,6 +93,11 @@ public class Lobby {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a player from the lobby. It is ensured that no further lobby related messages
|
||||||
|
* ({@link SessionCreatedMessage}, {@link SessionModifiedMessage}, {@link SessionRemovedMessage}) are set to this
|
||||||
|
* player after the call to this method returns.
|
||||||
|
*/
|
||||||
public void leave(Player player) {
|
public void leave(Player player) {
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user