diff --git a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java index 5d3e289..9931a08 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java +++ b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java @@ -176,13 +176,12 @@ public class GameRoom extends Thread implements IGameRoom { if( pi < this.players.size() ) { players.get(pi).setController(i == 2 ? 2 : 1); - decks.put(players.get(pi).getUserId(), new GameDeck( - userService.getDeckContentForDeckId(players.get(pi).getUserId(), players.get(pi).getDeckId()) + GameDeck gd = new GameDeck(); + userService.getDeckContentForDeckId(players.get(pi).getUserId(), players.get(pi).getDeckId()) .stream() .map(d -> card2Entity(d.getAssetId()).get()) - .collect(Collectors.toList()) - ) - ); + .forEach(gd::addCard); + decks.put(players.get(pi).getUserId(), gd); } if( i == 2 ) { @@ -340,7 +339,7 @@ public class GameRoom extends Thread implements IGameRoom { ); } - List<PegasusGame.PowerHistoryEntity> ens = List.of( + List<PegasusGame.PowerHistoryEntity.Builder> ens = List.of( card2Entity("TB_SPT_Boss").get(), card2Entity("CS1h_001").get() ); @@ -348,7 +347,6 @@ public class GameRoom extends Thread implements IGameRoom { for(int i = 0; i < 2; i++, this.entity_id++) { pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(ens.get(i) - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -370,10 +368,10 @@ public class GameRoom extends Thread implements IGameRoom { for( RoomPlayerDTO player : this.players ) { int di = 0; for (int i = 0; i < 26; i++, this.entity_id++, di++) { - PegasusGame.PowerHistoryEntity b = di < this.decks.get(player.getUserId()).getDeck().size() ? this.decks.get(player.getUserId()).getDeck().get(di) : PegasusGame.PowerHistoryEntity.newBuilder().build(); + PegasusGame.PowerHistoryEntity.Builder b = di < this.decks.get(player.getUserId()).getSize() ? this.decks.get(player.getUserId()).getCard(di) : PegasusGame.PowerHistoryEntity.newBuilder(); + log.info("bBuilder: {}", b.getName()); pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(b - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -393,11 +391,10 @@ public class GameRoom extends Thread implements IGameRoom { } for (int i = 1; i <= 3; i++, this.entity_id++, di++) { - PegasusGame.PowerHistoryEntity b = di < this.decks.get(player.getUserId()).getDeck().size() ? this.decks.get(player.getUserId()).getDeck().get(di) : PegasusGame.PowerHistoryEntity.newBuilder().build(); - log.info("HAND: {}; {}; {}; {}", b, di < this.decks.get(player.getUserId()).getDeck().size(), di, this.decks.get(player.getUserId()).getDeck().size()); + PegasusGame.PowerHistoryEntity.Builder b = di < this.decks.get(player.getUserId()).getSize() ? this.decks.get(player.getUserId()).getCard(di) : PegasusGame.PowerHistoryEntity.newBuilder(); + log.info("HAND: {}; {}; {}; {}", b, di < this.decks.get(player.getUserId()).getSize(), di, this.decks.get(player.getUserId()).getSize()); pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(b - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -424,7 +421,6 @@ public class GameRoom extends Thread implements IGameRoom { pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(card2Entity("CS2_103e2").get() - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -472,7 +468,6 @@ public class GameRoom extends Thread implements IGameRoom { pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(card2Entity(deck.get().getHero().longValue()).get() - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -494,7 +489,6 @@ public class GameRoom extends Thread implements IGameRoom { pw.addList(PegasusGame.PowerHistoryData.newBuilder() .setFullEntity(getHeroPowerFromHeroId(deck.get().getHero().longValue()).get() - .toBuilder() .setEntity(this.entity_id) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) @@ -536,7 +530,7 @@ public class GameRoom extends Thread implements IGameRoom { .addAllEntities(decks.get(players.get(0).getUserId()) .getHandCards() .stream() - .map(PegasusGame.PowerHistoryEntity::getEntity) + .map(PegasusGame.PowerHistoryEntity.Builder::getEntity) .collect(Collectors.toList()) ) .setSource(1) @@ -586,7 +580,7 @@ public class GameRoom extends Thread implements IGameRoom { this.globalState = GameState.next(this.globalState); } - private Optional<PegasusGame.PowerHistoryEntity> card2Entity(String cardId) { + private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(String cardId) { return this.objectConfig.getFormattedCards() .getObjects() .stream() @@ -603,12 +597,11 @@ public class GameRoom extends Thread implements IGameRoom { .build() ) .collect(Collectors.toList())) - .build() ) .findFirst(); } - private Optional<PegasusGame.PowerHistoryEntity> card2Entity(Long cardId) { + private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(Long cardId) { return this.objectConfig.getFormattedCards() .getObjects() .stream() @@ -625,12 +618,11 @@ public class GameRoom extends Thread implements IGameRoom { .build() ) .collect(Collectors.toList())) - .build() ) .findFirst(); } - private Optional<PegasusGame.PowerHistoryEntity> getHeroPowerFromHeroId(Long cardId) { + private Optional<PegasusGame.PowerHistoryEntity.Builder> getHeroPowerFromHeroId(Long cardId) { return card2Entity(Long.parseLong(this.objectConfig.getFormattedCards() .getObjects() .stream() diff --git a/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java b/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java index 3905968..f654514 100644 --- a/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java +++ b/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java @@ -7,25 +7,42 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; -@Getter -@RequiredArgsConstructor -public class GameDeck { - private final List<PegasusGame.PowerHistoryEntity> deck; - public void updateCard(PegasusGame.PowerHistoryEntity b) { - deck.removeIf(c -> c.getName().equals(b.getName())); - deck.add(b); +public class GameDeck { + private final Map<String, PegasusGame.PowerHistoryEntity.Builder> deck; + + public GameDeck() { + this.deck = new HashMap<>(); } - public List<PegasusGame.PowerHistoryEntity> getHandCards() { + public PegasusGame.PowerHistoryEntity.Builder getCard(Integer i) { + return this.deck.get(getKeys().get(i)); + } + + public Integer getSize() { + return this.deck.values().size(); + } + + public void addCard(PegasusGame.PowerHistoryEntity.Builder b) { + this.deck.put(b.getName(), b); + } + + public void updateCard(PegasusGame.PowerHistoryEntity.Builder b) { + deck.put(b.getName(), b); + } + + public List<PegasusGame.PowerHistoryEntity.Builder> getHandCards() { return getCardsByTag(GameTag.ZONE, TagZone.HAND.ordinal()); } - public List<PegasusGame.PowerHistoryEntity> getCardsByTag(GameTag tag, Integer val) { + public List<PegasusGame.PowerHistoryEntity.Builder> getCardsByTag(GameTag tag, Integer val) { return deck + .values() .stream() .filter(c -> c.getTagsList() .stream() @@ -33,4 +50,11 @@ public class GameDeck { ) .collect(Collectors.toList()); } + + private List<String> getKeys() { + return this.deck.keySet() + .stream() + .sorted() + .collect(Collectors.toList()); + } }