Exploring ladder x2
This commit is contained in:
parent
18d7f8de24
commit
451a568074
@ -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;
|
||||
}
|
@ -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<PegasusGame.PowerHistoryEntity.Builder> ens = List.of(
|
||||
List<PegasusGame.PowerHistoryEntity> 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<DeckContent> 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> 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> 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<PegasusGame.PowerHistoryEntity.Builder> card2Entity(String cardId) {
|
||||
private Optional<PegasusGame.PowerHistoryEntity> 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<PegasusGame.PowerHistoryEntity.Builder> card2Entity(Long cardId) {
|
||||
private Optional<PegasusGame.PowerHistoryEntity> 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<PegasusGame.PowerHistoryEntity.Builder> getHeroPowerFromHeroId(Long cardId) {
|
||||
private Optional<PegasusGame.PowerHistoryEntity> getHeroPowerFromHeroId(Long cardId) {
|
||||
return card2Entity(Long.parseLong(this.objectConfig.getFormattedCards()
|
||||
.getObjects()
|
||||
.stream()
|
||||
|
36
src/main/java/com/alterdekim/hearthhack/util/GameDeck.java
Normal file
36
src/main/java/com/alterdekim/hearthhack/util/GameDeck.java
Normal 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());
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user