fix: include NPCs in RoundSetupEvent and TurnEvent for standard compatibility

This commit is contained in:
punchready 2021-06-03 02:30:25 +02:00
parent dd3201dfd2
commit cc4c5ba8cb
1 changed files with 32 additions and 10 deletions

View File

@ -751,16 +751,25 @@ public class GameLogic {
state.roundNumber++;
state.turnNumber = 0;
result.add(new EventBuilder(EventType.RoundSetupEvent)
.withRoundCount(state.roundNumber)
.buildGameEvent());
ArrayList<EntityID> turns = new ArrayList<>();
if(state.roundNumber >= 1 && state.roundNumber <= 6) {
turns.add(new EntityID(EntityType.NPC, NPCType.Goose.getID()));
result.addAll(handleGoose(state));
}
HashSet<EntityID> revived = new HashSet<>();
if(state.roundNumber == 7) {
turns.add(new EntityID(EntityType.NPC, NPCType.Stan.getID()));
result.addAll(handleStan(state, revived));
}
if(state.roundNumber == state.partyConfig.maxRounds + 1) {
turns.add(new EntityID(EntityType.NPC, NPCType.Thanos.getID()));
result.addAll(spawnThanos(state));
}
@ -775,10 +784,10 @@ public class GameLogic {
state.stoneCooldown.update();
result.add(new EventBuilder(EventType.RoundSetupEvent)
.withRoundCount(state.roundNumber)
.withCharacterOrder(state.turnOrder.toArray(new EntityID[0]))
.buildGameEvent());
turns.addAll(state.turnOrder);
// RoundSetupEvent has to be sent first, but the contents of it are determined later...
((GameEvent)result.get(0)).characterOrder = turns.toArray(new EntityID[0]);
return result;
}
@ -791,6 +800,13 @@ public class GameLogic {
private static ArrayList<Event> handleGoose(GameState state) {
ArrayList<Event> result = new ArrayList<>();
EntityID goose = new EntityID(EntityType.NPC, NPCType.Goose.getID());
result.add(new EventBuilder(EventType.TurnEvent)
.withTurnCount(state.turnOrder.size())
.withNextCharacter(goose)
.buildGameEvent());
ArrayList<StoneType> inventory = new ArrayList<>(state.unvomitedStones);
int picked = rand.nextInt(inventory.size());
StoneType stone = inventory.get(picked);
@ -808,7 +824,6 @@ public class GameLogic {
}
IntVector2 position = free.get(rand.nextInt(free.size()));
EntityID goose = new EntityID(EntityType.NPC, NPCType.Goose.getID());
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new NPC(goose, position, inventory))
.buildEntityEvent());
@ -831,6 +846,13 @@ public class GameLogic {
private static ArrayList<Event> handleStan(GameState state, HashSet<EntityID> revived) {
ArrayList<Event> result = new ArrayList<>();
EntityID stan = new EntityID(EntityType.NPC, NPCType.Stan.getID());
result.add(new EventBuilder(EventType.TurnEvent)
.withTurnCount(state.turnOrder.size())
.withNextCharacter(stan)
.buildGameEvent());
ArrayList<Character> characters = new ArrayList<>();
ArrayList<IntVector2> targetOptions = new ArrayList<>();
@ -855,7 +877,6 @@ public class GameLogic {
}
IntVector2 spawnPosition = spawnOptions.get(rand.nextInt(spawnOptions.size()));
EntityID stan = new EntityID(EntityType.NPC, NPCType.Stan.getID());
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new NPC(stan, spawnPosition))
.buildEntityEvent());
@ -921,6 +942,11 @@ public class GameLogic {
private static ArrayList<Event> handleThanos(GameState state, NPC thanos) {
ArrayList<Event> result = new ArrayList<>();
result.add(new EventBuilder(EventType.TurnEvent)
.withTurnCount(state.turnOrder.size())
.withNextCharacter(thanos.id)
.buildGameEvent());
if(thanos.inventory.getFreeSlots() > 0) {
IntVector2 picked = null;
@ -1053,10 +1079,6 @@ public class GameLogic {
.buildGameEvent());
thanos.mp.setValue(thanos.mp.getMax());
}
result.add(new EventBuilder(EventType.TurnEvent)
.withTurnCount(state.turnOrder.size())
.withNextCharacter(state.activeCharacter)
.buildGameEvent());
result.addAll(handleThanos(state, thanos));
return result;