diff --git a/src/main/java/com/alterdekim/hearthhack/GameDeck.java b/src/main/java/com/alterdekim/hearthhack/GameDeck.java deleted file mode 100644 index 214129c..0000000 --- a/src/main/java/com/alterdekim/hearthhack/GameDeck.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.alterdekim.hearthhack; - -import com.alterdekim.PegasusGame; - -import java.util.List; - -public class GameDeck { - private List deck; -} diff --git a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java index ac28d8b..5d3e289 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java +++ b/src/main/java/com/alterdekim/hearthhack/component/GameRoom.java @@ -2,13 +2,12 @@ package com.alterdekim.hearthhack.component; import com.alterdekim.PegasusGame; import com.alterdekim.PegasusShared; -import com.alterdekim.hearthhack.GameDeck; +import com.alterdekim.hearthhack.util.GameDeck; import com.alterdekim.hearthhack.component.interfaces.GamePacketCallback; import com.alterdekim.hearthhack.component.interfaces.IGameRoom; import com.alterdekim.hearthhack.config.ObjectConfig; import com.alterdekim.hearthhack.dto.RoomPlayerDTO; import com.alterdekim.hearthhack.entity.Deck; -import com.alterdekim.hearthhack.entity.DeckContent; import com.alterdekim.hearthhack.game.*; import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.util.PegasusPacket; @@ -17,14 +16,11 @@ import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; -import java.util.ListIterator; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.stream.Collectors; -import static com.alterdekim.PegasusGame.Option.Type.END_TURN; - @Slf4j public class GameRoom extends Thread implements IGameRoom { @@ -72,9 +68,6 @@ public class GameRoom extends Thread implements IGameRoom { this.start(); // TODO: debug mode should stop that } - private int hero_p1 = 0; - private int hero_p2 = 0; - private void processIncomePackets() { if( this.incomeQueue.isEmpty() ) return; IncomeGamePacket packet = this.incomeQueue.peek(); @@ -181,7 +174,16 @@ public class GameRoom extends Thread implements IGameRoom { for( int i = 2, pi = 0; i < 4; i++, pi++ ) { final PegasusGame.Entity.Builder entity = PegasusGame.Entity.newBuilder().setId(i == 2 ? 3 : 2); - if( pi < this.players.size() ) players.get(pi).setController(i == 2 ? 2 : 1); + 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()) + .stream() + .map(d -> card2Entity(d.getAssetId()).get()) + .collect(Collectors.toList()) + ) + ); + } if( i == 2 ) { entity.addTags(PegasusGame.Tag.newBuilder() @@ -265,7 +267,7 @@ public class GameRoom extends Thread implements IGameRoom { entity.addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.MULLIGAN_STATE.getValue()) - .setValue(TagMulligan.DONE.ordinal()) + .setValue(TagMulligan.INPUT.ordinal()) ); entity.addTags(PegasusGame.Tag.newBuilder() @@ -338,14 +340,15 @@ public class GameRoom extends Thread implements IGameRoom { ); } - List ens = List.of( + List ens = List.of( card2Entity("TB_SPT_Boss").get(), card2Entity("CS1h_001").get() ); - this.hero_p1 = this.entity_id; + //this.hero_p1 = this.entity_id; 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()) @@ -364,84 +367,87 @@ public class GameRoom extends Thread implements IGameRoom { } // other player + 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(); + pw.addList(PegasusGame.PowerHistoryData.newBuilder() + .setFullEntity(b + .toBuilder() + .setEntity(this.entity_id) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ENTITY_ID.getValue()) + .setValue(this.entity_id) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.CONTROLLER.getValue()) + .setValue(player.getController()) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ZONE.getValue()) + .setValue(TagZone.DECK.ordinal()) + ) + ) + ); + this.decks.get(player.getUserId()).updateCard(b); + } - List dc = userService.getDeckContentForDeckId(this.players.get(0).getUserId(), this.players.get(0).getDeckId()); + 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()); + pw.addList(PegasusGame.PowerHistoryData.newBuilder() + .setFullEntity(b + .toBuilder() + .setEntity(this.entity_id) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ENTITY_ID.getValue()) + .setValue(this.entity_id) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.CONTROLLER.getValue()) + .setValue(player.getController()) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ZONE_POSITION.getValue()) + .setValue(i) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ZONE.getValue()) + .setValue(TagZone.HAND.ordinal()) + ) + ) + ); + this.decks.get(player.getUserId()).updateCard(b); + } + + // there was a place for hero & hero_power - for(int i = 0; i < 26; i++, this.entity_id++) { pw.addList(PegasusGame.PowerHistoryData.newBuilder() - .setFullEntity(PegasusGame.PowerHistoryEntity.newBuilder() + .setFullEntity(card2Entity("CS2_103e2").get() + .toBuilder() .setEntity(this.entity_id) - .setName("") .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ENTITY_ID.getValue()) .setValue(this.entity_id) ) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.CONTROLLER.getValue()) - .setValue(2) + .setValue(player.getController()) ) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ZONE.getValue()) - .setValue(TagZone.DECK.ordinal()) - ) - ) - ); - } - - ens = dc.subList(0, 3).stream() - .map(d -> card2Entity(d.getAssetId()).get()) - .collect(Collectors.toList()); - - for(int i = 1; i <= 3; i++, this.entity_id++) { - pw.addList(PegasusGame.PowerHistoryData.newBuilder() - .setFullEntity(ens.get(i-1) - .setEntity(this.entity_id) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ENTITY_ID.getValue()) - .setValue(this.entity_id) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.CONTROLLER.getValue()) - .setValue(2) + .setValue(TagZone.SETASIDE.ordinal()) ) .addTags(PegasusGame.Tag.newBuilder() .setName(GameTag.ZONE_POSITION.getValue()) - .setValue(i) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ZONE.getValue()) - .setValue(TagZone.HAND.ordinal()) + .setValue(0) ) ) ); + + this.entity_id++; } - // there was a place for hero & hero_power - - pw.addList(PegasusGame.PowerHistoryData.newBuilder() - .setFullEntity(card2Entity("CS2_103e2").get() - .setEntity(this.entity_id) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ENTITY_ID.getValue()) - .setValue(this.entity_id) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.CONTROLLER.getValue()) - .setValue(2) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ZONE.getValue()) - .setValue(TagZone.SETASIDE.ordinal()) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ZONE_POSITION.getValue()) - .setValue(0) - ) - ) - ); - - this.entity_id++; - this.broadcast(new PegasusPacket(19, 0, pw.build().toByteArray())); this.nextGlobalState(); @@ -458,54 +464,92 @@ public class GameRoom extends Thread implements IGameRoom { PegasusGame.PowerHistory.Builder pw = PegasusGame.PowerHistory.newBuilder(); - Optional deck = userService.getDecksForUser(this.players.get(0).getUserId()) - .stream() - .filter(d -> d.getId().longValue() == this.players.get(0).getDeckId().longValue()) - .findFirst(); + for(RoomPlayerDTO player : players) { + Optional deck = userService.getDecksForUser(player.getUserId()) + .stream() + .filter(d -> d.getId().longValue() == player.getDeckId().longValue()) + .findFirst(); + + 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()) + .setValue(this.entity_id) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.CONTROLLER.getValue()) + .setValue(player.getController()) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ZONE.getValue()) + .setValue(TagZone.PLAY.ordinal()) + ) + ) + ); + //this.hero_p2 = this.entity_id; + this.entity_id++; + + + 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()) + .setValue(this.entity_id) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.CONTROLLER.getValue()) + .setValue(player.getController()) + ) + .addTags(PegasusGame.Tag.newBuilder() + .setName(GameTag.ZONE.getValue()) + .setValue(TagZone.PLAY.ordinal()) + ) + ) + ); + } pw.addList(PegasusGame.PowerHistoryData.newBuilder() - .setFullEntity(card2Entity(deck.get().getHero().longValue()).get() - .setEntity(this.entity_id) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ENTITY_ID.getValue()) - .setValue(this.entity_id) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.CONTROLLER.getValue()) - .setValue(2) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ZONE.getValue()) - .setValue(TagZone.PLAY.ordinal()) - ) + .setTagChange(PegasusGame.PowerHistoryTagChange.newBuilder() + .setEntity(2) + .setTag(GameTag.MULLIGAN_STATE.getValue()) + .setValue(TagMulligan.INPUT.ordinal()) ) ); - this.hero_p2 = this.entity_id; - this.entity_id++; pw.addList(PegasusGame.PowerHistoryData.newBuilder() - .setFullEntity(getHeroPowerFromHeroId(deck.get().getHero().longValue()).get() - .setEntity(this.entity_id) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ENTITY_ID.getValue()) - .setValue(this.entity_id) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.CONTROLLER.getValue()) - .setValue(2) - ) - .addTags(PegasusGame.Tag.newBuilder() - .setName(GameTag.ZONE.getValue()) - .setValue(TagZone.PLAY.ordinal()) - ) + .setTagChange(PegasusGame.PowerHistoryTagChange.newBuilder() + .setEntity(3) + .setTag(GameTag.MULLIGAN_STATE.getValue()) + .setValue(TagMulligan.INPUT.ordinal()) ) ); + PegasusGame.EntityChoices entityChoices = PegasusGame.EntityChoices.newBuilder() + .setId(1) + .setChoiceType(1) + .setCountMin(0) + .setCountMax(3) + .addAllEntities(decks.get(players.get(0).getUserId()) + .getHandCards() + .stream() + .map(PegasusGame.PowerHistoryEntity::getEntity) + .collect(Collectors.toList()) + ) + .setSource(1) + .setPlayerId(2) + .build(); + + this.broadcast(new PegasusPacket( 17, 0, entityChoices.toByteArray())); + this.broadcast(new PegasusPacket(19, 0, pw.build().toByteArray())); this.entity_id++; - PegasusGame.AllOptions allOptions = PegasusGame.AllOptions.newBuilder() + /* PegasusGame.AllOptions allOptions = PegasusGame.AllOptions.newBuilder() .setId(1) .addOptions(PegasusGame.Option.newBuilder() .setType(END_TURN) @@ -519,7 +563,7 @@ public class GameRoom extends Thread implements IGameRoom { ) .build(); - this.broadcast(new PegasusPacket( 14, 0, allOptions.toByteArray())); + this.broadcast(new PegasusPacket( 14, 0, allOptions.toByteArray()));*/ this.nextGlobalState(); } @@ -542,7 +586,7 @@ public class GameRoom extends Thread implements IGameRoom { this.globalState = GameState.next(this.globalState); } - private Optional card2Entity(String cardId) { + private Optional card2Entity(String cardId) { return this.objectConfig.getFormattedCards() .getObjects() .stream() @@ -559,11 +603,12 @@ public class GameRoom extends Thread implements IGameRoom { .build() ) .collect(Collectors.toList())) + .build() ) .findFirst(); } - private Optional card2Entity(Long cardId) { + private Optional card2Entity(Long cardId) { return this.objectConfig.getFormattedCards() .getObjects() .stream() @@ -580,11 +625,12 @@ public class GameRoom extends Thread implements IGameRoom { .build() ) .collect(Collectors.toList())) + .build() ) .findFirst(); } - private Optional getHeroPowerFromHeroId(Long cardId) { + private Optional 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 new file mode 100644 index 0000000..3905968 --- /dev/null +++ b/src/main/java/com/alterdekim/hearthhack/util/GameDeck.java @@ -0,0 +1,36 @@ +package com.alterdekim.hearthhack.util; + +import com.alterdekim.PegasusGame; +import com.alterdekim.hearthhack.game.GameTag; +import com.alterdekim.hearthhack.game.TagZone; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@RequiredArgsConstructor +public class GameDeck { + private final List deck; + + public void updateCard(PegasusGame.PowerHistoryEntity b) { + deck.removeIf(c -> c.getName().equals(b.getName())); + deck.add(b); + } + + public List getHandCards() { + return getCardsByTag(GameTag.ZONE, TagZone.HAND.ordinal()); + } + + public List getCardsByTag(GameTag tag, Integer val) { + return deck + .stream() + .filter(c -> c.getTagsList() + .stream() + .anyMatch(f -> f.getName() == tag.getValue() && f.getValue() == val) + ) + .collect(Collectors.toList()); + } +}