fix: make thanos also knock out characters he walks over, adapt for new UseInfinityStoneRequest
This commit is contained in:
parent
7334b234d4
commit
7b1ce8af8f
@ -139,22 +139,7 @@ public class GameLogic {
|
||||
}
|
||||
}
|
||||
case RealityStone -> {
|
||||
if(data.originEntity.equals(data.targetEntity)) { // => place stone
|
||||
if(state.entities.findByPosition(data.targetField).size() != 0) {
|
||||
throw new InvalidRequestException("Invalid reality stone target (rock already there)");
|
||||
}
|
||||
}else { // => destroy stone
|
||||
boolean hasRock = false;
|
||||
for(Entity entity: state.entities.findByPosition(data.targetField)) {
|
||||
if(entity.id.isSameType(EntityType.Rocks)) {
|
||||
hasRock = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!hasRock) {
|
||||
throw new InvalidRequestException("Invalid reality stone target (no rock found)");
|
||||
}
|
||||
}
|
||||
// no check done
|
||||
}
|
||||
case PowerStone -> {
|
||||
Character target = getCharacter(state, data.targetField, data.targetEntity);
|
||||
@ -420,15 +405,22 @@ public class GameLogic {
|
||||
}
|
||||
}
|
||||
case RealityStone -> {
|
||||
if(data.originEntity == data.targetEntity) { // => place stone
|
||||
EntityID target = null;
|
||||
for(Entity entity: state.entities.findByPosition(data.targetField)) {
|
||||
if(entity.id.type == EntityType.Rocks) {
|
||||
target = entity.id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(target == null) {
|
||||
result.add(new EventBuilder(EventType.SpawnEntityEvent)
|
||||
.withTargetField(data.targetField)
|
||||
.withEntity(new Rock(new EntityID(EntityType.Rocks, state.entities.findFreeRockSlot()), data.targetField, 100))
|
||||
.buildEntityEvent());
|
||||
}else { // => destroy stone
|
||||
}else {
|
||||
result.add(new EventBuilder(EventType.DestroyedEntityEvent)
|
||||
.withTargetField(data.targetField)
|
||||
.withTargetEntity(data.targetEntity)
|
||||
.withTargetEntity(target)
|
||||
.buildEntityEvent());
|
||||
}
|
||||
}
|
||||
@ -1149,28 +1141,26 @@ public class GameLogic {
|
||||
.withAmount(1)
|
||||
.buildEntityEvent());
|
||||
|
||||
if(pos.equals(picked)) {
|
||||
for(Entity entity: state.entities.findByPosition(pos)) {
|
||||
if(entity instanceof Character) {
|
||||
result.add(new EventBuilder(EventType.MoveEvent)
|
||||
.withOriginEntity(entity.id)
|
||||
.withOriginField(pos)
|
||||
.withTargetField(current)
|
||||
.buildCharacterEvent());
|
||||
result.add(new EventBuilder(EventType.TakenDamageEvent)
|
||||
.withTargetEntity(entity.id)
|
||||
.withTargetField(current)
|
||||
.withAmount(((Character)entity).hp.getValue())
|
||||
.buildEntityEvent());
|
||||
break;
|
||||
}
|
||||
if(entity instanceof InfinityStone) {
|
||||
result.add(new EventBuilder(EventType.DestroyedEntityEvent)
|
||||
.withTargetEntity(entity.id)
|
||||
.withTargetField(pos)
|
||||
.buildEntityEvent());
|
||||
break;
|
||||
}
|
||||
for(Entity entity: state.entities.findByPosition(pos)) {
|
||||
if(entity instanceof Character) {
|
||||
result.add(new EventBuilder(EventType.MoveEvent)
|
||||
.withOriginEntity(entity.id)
|
||||
.withOriginField(pos)
|
||||
.withTargetField(current)
|
||||
.buildCharacterEvent());
|
||||
result.add(new EventBuilder(EventType.TakenDamageEvent)
|
||||
.withTargetEntity(entity.id)
|
||||
.withTargetField(current)
|
||||
.withAmount(((Character)entity).hp.getValue())
|
||||
.buildEntityEvent());
|
||||
break;
|
||||
}
|
||||
if(entity instanceof InfinityStone) {
|
||||
result.add(new EventBuilder(EventType.DestroyedEntityEvent)
|
||||
.withTargetEntity(entity.id)
|
||||
.withTargetField(pos)
|
||||
.buildEntityEvent());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user