Exploring ladder x2

This commit is contained in:
Michael Wain 2024-08-02 04:13:32 +03:00
parent 18d7f8de24
commit 451a568074
3 changed files with 190 additions and 117 deletions

View File

@ -1,9 +0,0 @@
package com.alterdekim.hearthhack;
import com.alterdekim.PegasusGame;
import java.util.List;
public class GameDeck {
private List<PegasusGame.PowerHistoryEntity.Builder> deck;
}

View File

@ -2,13 +2,12 @@ package com.alterdekim.hearthhack.component;
import com.alterdekim.PegasusGame; import com.alterdekim.PegasusGame;
import com.alterdekim.PegasusShared; 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.GamePacketCallback;
import com.alterdekim.hearthhack.component.interfaces.IGameRoom; import com.alterdekim.hearthhack.component.interfaces.IGameRoom;
import com.alterdekim.hearthhack.config.ObjectConfig; import com.alterdekim.hearthhack.config.ObjectConfig;
import com.alterdekim.hearthhack.dto.RoomPlayerDTO; import com.alterdekim.hearthhack.dto.RoomPlayerDTO;
import com.alterdekim.hearthhack.entity.Deck; import com.alterdekim.hearthhack.entity.Deck;
import com.alterdekim.hearthhack.entity.DeckContent;
import com.alterdekim.hearthhack.game.*; import com.alterdekim.hearthhack.game.*;
import com.alterdekim.hearthhack.service.UserService; import com.alterdekim.hearthhack.service.UserService;
import com.alterdekim.hearthhack.util.PegasusPacket; import com.alterdekim.hearthhack.util.PegasusPacket;
@ -17,14 +16,11 @@ import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.ListIterator;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.alterdekim.PegasusGame.Option.Type.END_TURN;
@Slf4j @Slf4j
public class GameRoom extends Thread implements IGameRoom { 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 this.start(); // TODO: debug mode should stop that
} }
private int hero_p1 = 0;
private int hero_p2 = 0;
private void processIncomePackets() { private void processIncomePackets() {
if( this.incomeQueue.isEmpty() ) return; if( this.incomeQueue.isEmpty() ) return;
IncomeGamePacket packet = this.incomeQueue.peek(); 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++ ) { for( int i = 2, pi = 0; i < 4; i++, pi++ ) {
final PegasusGame.Entity.Builder entity = PegasusGame.Entity.newBuilder().setId(i == 2 ? 3 : 2); 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 ) { if( i == 2 ) {
entity.addTags(PegasusGame.Tag.newBuilder() entity.addTags(PegasusGame.Tag.newBuilder()
@ -265,7 +267,7 @@ public class GameRoom extends Thread implements IGameRoom {
entity.addTags(PegasusGame.Tag.newBuilder() entity.addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.MULLIGAN_STATE.getValue()) .setName(GameTag.MULLIGAN_STATE.getValue())
.setValue(TagMulligan.DONE.ordinal()) .setValue(TagMulligan.INPUT.ordinal())
); );
entity.addTags(PegasusGame.Tag.newBuilder() entity.addTags(PegasusGame.Tag.newBuilder()
@ -338,14 +340,15 @@ public class GameRoom extends Thread implements IGameRoom {
); );
} }
List<PegasusGame.PowerHistoryEntity.Builder> ens = List.of( List<PegasusGame.PowerHistoryEntity> ens = List.of(
card2Entity("TB_SPT_Boss").get(), card2Entity("TB_SPT_Boss").get(),
card2Entity("CS1h_001").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++) { for(int i = 0; i < 2; i++, this.entity_id++) {
pw.addList(PegasusGame.PowerHistoryData.newBuilder() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(ens.get(i) .setFullEntity(ens.get(i)
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
@ -364,21 +367,21 @@ public class GameRoom extends Thread implements IGameRoom {
} }
// other player // other player
for( RoomPlayerDTO player : this.players ) {
List<DeckContent> dc = userService.getDeckContentForDeckId(this.players.get(0).getUserId(), this.players.get(0).getDeckId()); int di = 0;
for (int i = 0; i < 26; i++, this.entity_id++, di++) {
for(int i = 0; i < 26; i++, this.entity_id++) { 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() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(PegasusGame.PowerHistoryEntity.newBuilder() .setFullEntity(b
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.setName("")
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
.setValue(this.entity_id) .setValue(this.entity_id)
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.CONTROLLER.getValue()) .setName(GameTag.CONTROLLER.getValue())
.setValue(2) .setValue(player.getController())
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ZONE.getValue()) .setName(GameTag.ZONE.getValue())
@ -386,15 +389,15 @@ public class GameRoom extends Thread implements IGameRoom {
) )
) )
); );
this.decks.get(player.getUserId()).updateCard(b);
} }
ens = dc.subList(0, 3).stream() for (int i = 1; i <= 3; i++, this.entity_id++, di++) {
.map(d -> card2Entity(d.getAssetId()).get()) PegasusGame.PowerHistoryEntity b = di < this.decks.get(player.getUserId()).getDeck().size() ? this.decks.get(player.getUserId()).getDeck().get(di) : PegasusGame.PowerHistoryEntity.newBuilder().build();
.collect(Collectors.toList()); log.info("HAND: {}; {}; {}; {}", b, di < this.decks.get(player.getUserId()).getDeck().size(), di, this.decks.get(player.getUserId()).getDeck().size());
for(int i = 1; i <= 3; i++, this.entity_id++) {
pw.addList(PegasusGame.PowerHistoryData.newBuilder() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(ens.get(i-1) .setFullEntity(b
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
@ -402,7 +405,7 @@ public class GameRoom extends Thread implements IGameRoom {
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.CONTROLLER.getValue()) .setName(GameTag.CONTROLLER.getValue())
.setValue(2) .setValue(player.getController())
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ZONE_POSITION.getValue()) .setName(GameTag.ZONE_POSITION.getValue())
@ -414,12 +417,14 @@ public class GameRoom extends Thread implements IGameRoom {
) )
) )
); );
this.decks.get(player.getUserId()).updateCard(b);
} }
// there was a place for hero & hero_power // there was a place for hero & hero_power
pw.addList(PegasusGame.PowerHistoryData.newBuilder() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(card2Entity("CS2_103e2").get() .setFullEntity(card2Entity("CS2_103e2").get()
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
@ -427,7 +432,7 @@ public class GameRoom extends Thread implements IGameRoom {
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.CONTROLLER.getValue()) .setName(GameTag.CONTROLLER.getValue())
.setValue(2) .setValue(player.getController())
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ZONE.getValue()) .setName(GameTag.ZONE.getValue())
@ -441,6 +446,7 @@ public class GameRoom extends Thread implements IGameRoom {
); );
this.entity_id++; this.entity_id++;
}
this.broadcast(new PegasusPacket(19, 0, pw.build().toByteArray())); this.broadcast(new PegasusPacket(19, 0, pw.build().toByteArray()));
@ -458,13 +464,15 @@ public class GameRoom extends Thread implements IGameRoom {
PegasusGame.PowerHistory.Builder pw = PegasusGame.PowerHistory.newBuilder(); PegasusGame.PowerHistory.Builder pw = PegasusGame.PowerHistory.newBuilder();
Optional<Deck> deck = userService.getDecksForUser(this.players.get(0).getUserId()) for(RoomPlayerDTO player : players) {
Optional<Deck> deck = userService.getDecksForUser(player.getUserId())
.stream() .stream()
.filter(d -> d.getId().longValue() == this.players.get(0).getDeckId().longValue()) .filter(d -> d.getId().longValue() == player.getDeckId().longValue())
.findFirst(); .findFirst();
pw.addList(PegasusGame.PowerHistoryData.newBuilder() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(card2Entity(deck.get().getHero().longValue()).get() .setFullEntity(card2Entity(deck.get().getHero().longValue()).get()
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
@ -472,7 +480,7 @@ public class GameRoom extends Thread implements IGameRoom {
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.CONTROLLER.getValue()) .setName(GameTag.CONTROLLER.getValue())
.setValue(2) .setValue(player.getController())
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ZONE.getValue()) .setName(GameTag.ZONE.getValue())
@ -480,11 +488,13 @@ public class GameRoom extends Thread implements IGameRoom {
) )
) )
); );
this.hero_p2 = this.entity_id; //this.hero_p2 = this.entity_id;
this.entity_id++; this.entity_id++;
pw.addList(PegasusGame.PowerHistoryData.newBuilder() pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setFullEntity(getHeroPowerFromHeroId(deck.get().getHero().longValue()).get() .setFullEntity(getHeroPowerFromHeroId(deck.get().getHero().longValue()).get()
.toBuilder()
.setEntity(this.entity_id) .setEntity(this.entity_id)
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ENTITY_ID.getValue()) .setName(GameTag.ENTITY_ID.getValue())
@ -492,7 +502,7 @@ public class GameRoom extends Thread implements IGameRoom {
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.CONTROLLER.getValue()) .setName(GameTag.CONTROLLER.getValue())
.setValue(2) .setValue(player.getController())
) )
.addTags(PegasusGame.Tag.newBuilder() .addTags(PegasusGame.Tag.newBuilder()
.setName(GameTag.ZONE.getValue()) .setName(GameTag.ZONE.getValue())
@ -500,12 +510,46 @@ public class GameRoom extends Thread implements IGameRoom {
) )
) )
); );
}
pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.setTagChange(PegasusGame.PowerHistoryTagChange.newBuilder()
.setEntity(2)
.setTag(GameTag.MULLIGAN_STATE.getValue())
.setValue(TagMulligan.INPUT.ordinal())
)
);
pw.addList(PegasusGame.PowerHistoryData.newBuilder()
.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.broadcast(new PegasusPacket(19, 0, pw.build().toByteArray()));
this.entity_id++; this.entity_id++;
PegasusGame.AllOptions allOptions = PegasusGame.AllOptions.newBuilder() /* PegasusGame.AllOptions allOptions = PegasusGame.AllOptions.newBuilder()
.setId(1) .setId(1)
.addOptions(PegasusGame.Option.newBuilder() .addOptions(PegasusGame.Option.newBuilder()
.setType(END_TURN) .setType(END_TURN)
@ -519,7 +563,7 @@ public class GameRoom extends Thread implements IGameRoom {
) )
.build(); .build();
this.broadcast(new PegasusPacket( 14, 0, allOptions.toByteArray())); this.broadcast(new PegasusPacket( 14, 0, allOptions.toByteArray()));*/
this.nextGlobalState(); this.nextGlobalState();
} }
@ -542,7 +586,7 @@ public class GameRoom extends Thread implements IGameRoom {
this.globalState = GameState.next(this.globalState); this.globalState = GameState.next(this.globalState);
} }
private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(String cardId) { private Optional<PegasusGame.PowerHistoryEntity> card2Entity(String cardId) {
return this.objectConfig.getFormattedCards() return this.objectConfig.getFormattedCards()
.getObjects() .getObjects()
.stream() .stream()
@ -559,11 +603,12 @@ public class GameRoom extends Thread implements IGameRoom {
.build() .build()
) )
.collect(Collectors.toList())) .collect(Collectors.toList()))
.build()
) )
.findFirst(); .findFirst();
} }
private Optional<PegasusGame.PowerHistoryEntity.Builder> card2Entity(Long cardId) { private Optional<PegasusGame.PowerHistoryEntity> card2Entity(Long cardId) {
return this.objectConfig.getFormattedCards() return this.objectConfig.getFormattedCards()
.getObjects() .getObjects()
.stream() .stream()
@ -580,11 +625,12 @@ public class GameRoom extends Thread implements IGameRoom {
.build() .build()
) )
.collect(Collectors.toList())) .collect(Collectors.toList()))
.build()
) )
.findFirst(); .findFirst();
} }
private Optional<PegasusGame.PowerHistoryEntity.Builder> getHeroPowerFromHeroId(Long cardId) { private Optional<PegasusGame.PowerHistoryEntity> getHeroPowerFromHeroId(Long cardId) {
return card2Entity(Long.parseLong(this.objectConfig.getFormattedCards() return card2Entity(Long.parseLong(this.objectConfig.getFormattedCards()
.getObjects() .getObjects()
.stream() .stream()

View File

@ -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<PegasusGame.PowerHistoryEntity> deck;
public void updateCard(PegasusGame.PowerHistoryEntity b) {
deck.removeIf(c -> c.getName().equals(b.getName()));
deck.add(b);
}
public List<PegasusGame.PowerHistoryEntity> getHandCards() {
return getCardsByTag(GameTag.ZONE, TagZone.HAND.ordinal());
}
public List<PegasusGame.PowerHistoryEntity> 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());
}
}