Compare commits

..

No commits in common. "adb0a497112f842434b2fe1adf62a5ae5874a929" and "3070b9864c04447d8216925c7467c52ed2305339" have entirely different histories.

2 changed files with 36 additions and 75 deletions

View File

@ -18,9 +18,9 @@ test {
} }
dependencies { dependencies {
implementation 'com.fasterxml.jackson.core:jackson-core:2.12.4' implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.4' implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.4' implementation "com.fasterxml.jackson.core:jackson-databind:2.12.3"
implementation "org.hibernate.validator:hibernate-validator:7.0.1.Final" implementation "org.hibernate.validator:hibernate-validator:7.0.1.Final"
implementation "org.glassfish:jakarta.el:4.0.1" implementation "org.glassfish:jakarta.el:4.0.1"
@ -28,10 +28,10 @@ dependencies {
implementation "org.tinylog:tinylog-api:2.4.0-M1" implementation "org.tinylog:tinylog-api:2.4.0-M1"
implementation "org.tinylog:tinylog-impl:2.4.0-M1" implementation "org.tinylog:tinylog-impl:2.4.0-M1"
testImplementation 'net.jqwik:jqwik:1.5.3' testImplementation "net.jqwik:jqwik:1.5.1"
testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.0-M1" testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.0-M1"
testImplementation 'org.mockito:mockito-core:3.11.2' testImplementation "org.mockito:mockito-core:3.+"
testImplementation 'org.assertj:assertj-core:3.20.2' testImplementation "org.assertj:assertj-core:3.19.0"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.8.0-M1" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.8.0-M1"
} }

View File

@ -27,7 +27,7 @@ public class GameLogic {
* Checks a {@link Request} for validity for a {@link GameState}. * Checks a {@link Request} for validity for a {@link GameState}.
* @param state The game state to check on * @param state The game state to check on
* @param request The request to validate * @param request The request to validate
* @return Whether the request is valid * @return Whether or not the request is valid
*/ */
protected static boolean checkRequest(GameState state, Request request) { protected static boolean checkRequest(GameState state, Request request) {
try { try {
@ -36,20 +36,15 @@ public class GameLogic {
CharacterRequest data = (CharacterRequest)request; CharacterRequest data = (CharacterRequest)request;
Character origin = getCharacter(state, data.originField, data.originEntity); Character origin = getCharacter(state, data.originField, data.originEntity);
Entity target = getAttackable(state, data.targetField, data.targetEntity); Character target = getCharacter(state, data.targetField, data.targetEntity);
requireTurn(state, origin); requireTurn(state, origin);
requireOppositeTeam(origin, target);
requireAlive(origin); requireAlive(origin);
requireAlive(target);
requireAP(origin, 1); requireAP(origin, 1);
if(target instanceof Character) {
Character targetCharacter = (Character)target;
requireOppositeTeam(origin, targetCharacter);
requireAlive(targetCharacter);
}
if(request.type == RequestType.MeleeAttackRequest) { if(request.type == RequestType.MeleeAttackRequest) {
if(origin.meleeDamage != data.value) { if(origin.meleeDamage != data.value) {
throw new InvalidRequestException("Invalid melee damage"); throw new InvalidRequestException("Invalid melee damage");
@ -188,22 +183,6 @@ public class GameLogic {
return false; return false;
} }
/**
* Retrieves an attack-able Entity ({@link Character} or {@link Rock}) for a {@link Request}.
* @param state The game state to use
* @param position The requested position
* @param entityID The requested {@link EntityID}
* @return The found entity
* @throws InvalidRequestException if the entity is invalid or not found
*/
private static Entity getAttackable(GameState state, IntVector2 position, EntityID entityID) throws InvalidRequestException {
Entity entity = state.entities.findEntity(entityID);
if(entity == null || !entity.getPosition().equals(position) || (!(entity instanceof Character) && !(entity instanceof Rock)) || entity.id.type == EntityType.NPC) {
throw new InvalidRequestException("Invalid target character or rock");
}
return entity;
}
/** /**
* Retrieves a {@link Character} for a {@link Request}. * Retrieves a {@link Character} for a {@link Request}.
* @param state The game state to use * @param state The game state to use
@ -336,9 +315,7 @@ public class GameLogic {
.withAmount(data.value) .withAmount(data.value)
.buildEntityEvent()); .buildEntityEvent());
Entity targetEntity = state.entities.findEntity(data.targetEntity); Character target = (Character)state.entities.findEntity(data.targetEntity);
if(targetEntity instanceof Character) {
Character target = (Character)targetEntity;
if(target.hp.getValue() <= data.value) { if(target.hp.getValue() <= data.value) {
List<StoneType> stones = Arrays.asList(target.inventory.getStonesAsArray()); List<StoneType> stones = Arrays.asList(target.inventory.getStonesAsArray());
@ -358,15 +335,6 @@ public class GameLogic {
.buildEntityEvent()); .buildEntityEvent());
} }
} }
}else if(targetEntity instanceof Rock) {
Rock target = (Rock)targetEntity;
if(target.getHp() <= data.value) {
result.add(new EventBuilder(EventType.DestroyedEntityEvent)
.withTargetField(data.targetField)
.withTargetEntity(target.id)
.buildEntityEvent());
}
}
} }
case MoveRequest -> { case MoveRequest -> {
CharacterRequest data = (CharacterRequest)request; CharacterRequest data = (CharacterRequest)request;
@ -558,10 +526,7 @@ public class GameLogic {
case TakenDamageEvent -> { case TakenDamageEvent -> {
EntityEvent data = (EntityEvent)event; EntityEvent data = (EntityEvent)event;
Entity targetEntity = state.entities.findEntity(data.targetEntity); Character target = (Character)state.entities.findEntity(data.targetEntity);
if(targetEntity instanceof Character) {
Character target = (Character)targetEntity;
target.hp.decreaseValue(data.amount); target.hp.decreaseValue(data.amount);
EntityType opposing = target.id.type == EntityType.P1 ? EntityType.P2 : EntityType.P1; EntityType opposing = target.id.type == EntityType.P1 ? EntityType.P2 : EntityType.P1;
@ -575,10 +540,6 @@ public class GameLogic {
NPC thanos = (NPC)state.entities.findEntity(state.activeCharacter); NPC thanos = (NPC)state.entities.findEntity(state.activeCharacter);
target.inventory.transfer(thanos.inventory); target.inventory.transfer(thanos.inventory);
} }
}else if(targetEntity instanceof Rock) {
Rock target = (Rock)targetEntity;
target.decreaseHp(data.amount);
}
} }
case ConsumedAPEvent -> { case ConsumedAPEvent -> {
EntityEvent data = (EntityEvent)event; EntityEvent data = (EntityEvent)event;