fix: more code is apparently better

This commit is contained in:
2021-06-01 00:32:07 +02:00
parent 3238f45836
commit bccffad8f0
8 changed files with 91 additions and 27 deletions

View File

@ -104,7 +104,7 @@ public class EntityManager {
*/
public Entity findEntity(EntityID id) {
for(Entity entity: entities) {
if(entity.id == id) {
if(entity.id.equals(id)) {
return entity;
}
}
@ -119,7 +119,7 @@ public class EntityManager {
public ArrayList<Entity> findByPosition(IntVector2 pos) {
ArrayList<Entity> found = new ArrayList<>();
for(Entity entity: entities) {
if(entity.getPosition() == pos) {
if(entity.getPosition().equals(pos)) {
found.add(entity);
}
}
@ -133,7 +133,7 @@ public class EntityManager {
*/
public boolean blocksVision(IntVector2 pos) {
for(Entity entity: entities) {
if(entity.getPosition() == pos && entity.blocksVision()) {
if(entity.getPosition().equals(pos) && entity.blocksVision()) {
return true;
}
}
@ -147,7 +147,7 @@ public class EntityManager {
*/
public boolean blocksMovement(IntVector2 pos) {
for(Entity entity: entities) {
if(entity.getPosition() == pos && entity.blocksMovement()) {
if(entity.getPosition().equals(pos) && entity.blocksMovement()) {
return true;
}
}

View File

@ -582,7 +582,7 @@ class GameLogic {
int selected = characters.get(i);
EntityID id = new EntityID(i < p1 ? EntityType.P1 : EntityType.P2, selected);
EntityID id = new EntityID(i < p1 ? EntityType.P1 : EntityType.P2, i % p1);
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new Character(
id, position,
@ -693,7 +693,7 @@ class GameLogic {
Collections.shuffle(state.turnOrder);
for (EntityID id: state.turnOrder) {
if(revived.contains(id) || ((Character)state.entities.findEntity(id)).hp.getValue() > 0){
if(id.type == EntityType.NPC || revived.contains(id) || ((Character)state.entities.findEntity(id)).hp.getValue() > 0){
state.activeCharacter = id;
break;
}
@ -717,8 +717,10 @@ class GameLogic {
public static ArrayList<Event> handleGoose(GameState state) {
ArrayList<Event> result = new ArrayList<>();
StoneType[] available = state.unvomitedStones.toArray(new StoneType[0]);
StoneType stone = available[rand.nextInt(available.length)];
ArrayList<StoneType> inventory = new ArrayList<>(state.unvomitedStones);
int picked = rand.nextInt(inventory.size());
StoneType stone = inventory.get(picked);
inventory.remove(picked);
state.unvomitedStones.remove(stone);
ArrayList<IntVector2> free = new ArrayList<>();
@ -734,7 +736,7 @@ class GameLogic {
EntityID goose = new EntityID(EntityType.NPC, 0);
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new NPC(goose, position))
.withEntity(new NPC(goose, position, inventory))
.buildEntityEvent());
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new InfinityStone(new EntityID(EntityType.InfinityStones, stone.getID()), position, stone))
@ -829,7 +831,7 @@ class GameLogic {
EntityID thanos = new EntityID(EntityType.NPC, 2);
result.add(new EventBuilder(EventType.SpawnEntityEvent)
.withEntity(new Character(thanos, position, "Thanos", 1, maxMP, 0, 0, 0, 0))
.withEntity(new NPC(thanos, position, maxMP))
.buildEntityEvent());
state.turnOrder.add(thanos);
@ -842,10 +844,10 @@ class GameLogic {
* @param state The game state to work on
* @return The list of resulting {@link Event}s
*/
public static ArrayList<Event> handleThanos(GameState state, Character thanos) {
public static ArrayList<Event> handleThanos(GameState state, NPC thanos) {
ArrayList<Event> result = new ArrayList<>();
//TODO: implement thanos ai
return result;
}
@ -860,13 +862,31 @@ class GameLogic {
state.turnNumber++;
Character activeCharacter = (Character)state.entities.findEntity(state.activeCharacter);
boolean isThanos = state.activeCharacter.type == EntityType.NPC && state.activeCharacter.id == 2;
if(state.activeCharacter.type == EntityType.NPC && state.activeCharacter.id == 2) {
NPC thanos = (NPC)state.entities.findEntity(state.activeCharacter);
if(isThanos && state.roundNumber > state.partyConfig.maxRounds + 1) {
activeCharacter.mp.setMax(activeCharacter.mp.getMax() + 1);//TODO: use event for this...
if(state.roundNumber > state.partyConfig.maxRounds + 1) {
thanos.mp.setMax(thanos.mp.getMax() + 1);//TODO: use event for this...
}
if(thanos.mp.getValue() != thanos.mp.getMax()) {
result.add(new EventBuilder(EventType.ConsumedMPEvent)
.withTargetEntity(state.activeCharacter)
.withTargetField(thanos.getPosition())
.withAmount(thanos.mp.getValue() - thanos.mp.getMax())
.buildGameEvent());
}
result.add(new EventBuilder(EventType.TurnEvent)
.withTurnCount(state.turnOrder.size())
.withNextCharacter(state.activeCharacter)
.buildGameEvent());
result.addAll(handleThanos(state, thanos));
return result;
}
Character activeCharacter = (Character)state.entities.findEntity(state.activeCharacter);
if(activeCharacter.ap.getValue() != activeCharacter.ap.getMax()) {
result.add(new EventBuilder(EventType.ConsumedAPEvent)
.withTargetEntity(state.activeCharacter)
@ -886,10 +906,6 @@ class GameLogic {
.withNextCharacter(state.activeCharacter)
.buildGameEvent());
if(isThanos) {
result.addAll(handleThanos(state, activeCharacter));
}
return result;
}