Skip to content
Open

save #139

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.softdesign.plagueinc.managers;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
Expand All @@ -14,6 +15,7 @@
import com.softdesign.plagueinc.models.gamestate.GameState;
import com.softdesign.plagueinc.models.plague.DiseaseType;
import com.softdesign.plagueinc.models.plague.PlagueColor;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;

@Component
public class GameStateManager {
Expand Down Expand Up @@ -150,6 +152,19 @@ public void playEventCard(String gameStateId, UUID plagueId, int eventCardIndex)
games.get(gameStateId).playEventCard(eventCardIndex, plagueId);
}

public void doAction(String gameStateId, UUID plagueId, List<SelectionObject> inputs){
if(plagueId == null){
throw new IllegalArgumentException("must provide plague ID");
}
if(gameStateId == null){
throw new IllegalArgumentException("Must provide gameStateId");
}
if(inputs == null){
throw new IllegalArgumentException("Must provide inputs");
}
games.get(gameStateId).doAction(plagueId, inputs);
}

public GameState getGameState(String gameStateId){
if(gameStateId == null){
throw new IllegalArgumentException("Must provide gameStateId");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ public class EventCard extends ConditionalAction {
private String name;

public EventCard(String name, GameStateAction condition, GameStateAction effect, List<InputSelection> requiredInputs){
super(effect, effect, requiredInputs);
super(effect, effect, requiredInputs, (dummy, dum, dumo) -> {});
this.name = name;
}

public EventCard(String name, GameStateAction condition, GameStateAction effect, List<InputSelection> requiredInputs, GameStateAction handleFail){
super(effect, effect, requiredInputs, handleFail);
this.name = name;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.softdesign.plagueinc.models.gamestate.selection_objects.CitySelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.ContinentSelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.CountrySelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.SelectionObject;
import com.softdesign.plagueinc.models.gamestate.selection_objects.TraitCardSelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.TraitSlotSelection;
import com.softdesign.plagueinc.models.plague.Plague;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.CitySelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.ContinentSelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.CountrySelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.TraitCardSelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.TraitSlotSelection;

import lombok.Getter;
import lombok.NonNull;
Expand All @@ -30,15 +30,24 @@ public class ConditionalAction {
private GameStateAction action;
@NonNull
private List<InputSelection> requiredInputs;
@NonNull
private GameStateAction handleFail;


public void condition(Plague plague, GameState gameState){
getCondition().op(plague, gameState, List.of());
}

public void resolveEffect(Plague plague, GameState gameState, List<SelectionObject> inputs){
validateInput(inputs);
action.op(plague, gameState, inputs);
try{
validateInput(inputs);
action.op(plague, gameState, inputs);
}
catch(Exception e){
handleFail.op(plague, gameState, List.of());
throw e;
}

}

protected void validateInput(List<SelectionObject> inputSelection){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
import com.softdesign.plagueinc.models.traits.TraitType;
import com.softdesign.plagueinc.models.traits.travel.AirborneTrait;
import com.softdesign.plagueinc.models.traits.travel.WaterborneTrait;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.CountrySelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;
import com.softdesign.plagueinc.util.CountryReference;
import com.softdesign.plagueinc.util.EventReference;
import com.softdesign.plagueinc.util.TraitReference;
Expand Down Expand Up @@ -359,11 +361,35 @@ private void respawnPlague(Plague plague){
else{
placeCountry(respawnCountry);
}
//TODO: Respawn ConditionalAction
plague.spendDnaPoints(RESPAWN_PENALTY);
respawnConditionalAction(plague);

}

private void respawnConditionalAction(Plague plague){
GameStateAction condition = (val, gameState, list) -> {};
GameStateAction action = (val, gameState, list) -> {
CountrySelection countrySelection = ((CountrySelection)list.get(0));
Country country = getCountry(countrySelection.getCountryName());

if(country.isFull()){
logger.warn("[DNA] Plague ({}) attempted to respawn in a full country", plague.getColor());
throw new IllegalStateException();
}

country.infectCountry(plague);
};

GameStateAction handleFail = (val, gameState, list) -> {
logger.info("[DNA] Plague ({}) failed to respawn", plague.getColor());
respawnConditionalAction(plague);

};

this.action = Optional.of(new ConditionalAction(condition, action, List.of(InputSelection.COUNTRY), handleFail));
this.eventPlayer = Optional.of(this.currTurn);
}

//DNA PHASE

public void scoreDNAPoints(){
Expand Down Expand Up @@ -737,6 +763,25 @@ private Plague shiftTurnOrder(){
return this.turnOrder.peek();
}

//Event & Actions

public void doAction(UUID playerId, List<SelectionObject> inputs){

if(this.eventPlayer.isEmpty()){
logger.warn("Player ({}) attempted to do an action when there was no event player", playerId);
throw new IllegalStateException();
}
Plague plague = getPlague(playerId);
if(!plague.equals(this.eventPlayer.get())){
logger.warn("Player ({}) attempted to do an action when they are not the event player", plague.getColor());
throw new IllegalStateException();
}

action.get().resolveEffect(plague, this, inputs);
this.eventPlayer = Optional.empty();
this.action = Optional.empty();
}

//End of game

private void endGame(){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.softdesign.plagueinc.models.gamestate.selection_objects.SelectionObject;
import com.softdesign.plagueinc.models.plague.Plague;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;

@JsonSerialize(using = LambdaJsonSerializer.class)
@JsonDeserialize(using = LambdaJsonDeserializer.class)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
import com.softdesign.plagueinc.models.countries.Country;
import com.softdesign.plagueinc.models.events.EventCard;
import com.softdesign.plagueinc.models.gamestate.GameState;
import com.softdesign.plagueinc.models.gamestate.selection_objects.SelectionObject;
import com.softdesign.plagueinc.models.plague.trait_slot.TraitSlot;
import com.softdesign.plagueinc.models.traits.Trait;
import com.softdesign.plagueinc.models.traits.TraitCard;
import com.softdesign.plagueinc.models.traits.TraitType;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;
import com.softdesign.plagueinc.util.PlagueReference;

import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import com.softdesign.plagueinc.models.gamestate.GameState;
import com.softdesign.plagueinc.models.gamestate.GameStateAction;
import com.softdesign.plagueinc.models.gamestate.InputSelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.SelectionObject;
import com.softdesign.plagueinc.models.plague.Plague;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;

import lombok.Getter;

Expand All @@ -27,7 +27,7 @@ public abstract class Ability extends ConditionalAction {
protected String name;

protected Ability(String name, GameStateAction condition, GameStateAction action, List<InputSelection> requiredInputs){
super(condition, action, requiredInputs);
super(condition, action, requiredInputs, (plague, gameState, inputs) -> {});
this.activated = false;
this.name = name;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import com.softdesign.plagueinc.models.gamestate.GameStateAction;
import com.softdesign.plagueinc.models.gamestate.InputSelection;
import com.softdesign.plagueinc.models.gamestate.PlayState;
import com.softdesign.plagueinc.models.gamestate.selection_objects.TraitCardSelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.TraitSlotSelection;
import com.softdesign.plagueinc.models.plague.trait_slot.TraitSlot;
import com.softdesign.plagueinc.models.traits.TraitCard;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.TraitCardSelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.TraitSlotSelection;
public class GeneticSwitch extends Ability {

private GeneticSwitch(GameStateAction condition, GameStateAction action) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.softdesign.plagueinc.models.gamestate.GameStateAction;
import com.softdesign.plagueinc.models.gamestate.InputSelection;
import com.softdesign.plagueinc.models.gamestate.PlayState;
import com.softdesign.plagueinc.models.gamestate.selection_objects.CountrySelection;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.CountrySelection;

public class Outbreak extends Ability {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

import com.softdesign.plagueinc.models.gamestate.GameStateAction;
import com.softdesign.plagueinc.models.gamestate.InputSelection;
import com.softdesign.plagueinc.models.gamestate.selection_objects.TraitSlotSelection;
import com.softdesign.plagueinc.models.plague.trait_slot.TraitSlot;
import com.softdesign.plagueinc.models.traits.TraitCard;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.TraitSlotSelection;


public class RandomMutation extends Ability {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.softdesign.plagueinc.exceptions.TraitSlotFullException;
import com.softdesign.plagueinc.models.gamestate.GameState;
import com.softdesign.plagueinc.models.gamestate.selection_objects.SelectionObject;
import com.softdesign.plagueinc.models.plague.Plague;
import com.softdesign.plagueinc.models.plague.abilities.Ability;
import com.softdesign.plagueinc.models.traits.TraitCard;
import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class TraitSlot {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.softdesign.plagueinc.rest_controllers.DTOs;

import java.util.List;
import java.util.UUID;

import com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects.SelectionObject;

public record DoActionDTO(UUID playerId, List<SelectionObject> inputs) {

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softdesign.plagueinc.models.gamestate.selection_objects;
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softdesign.plagueinc.models.gamestate.selection_objects;
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

import com.softdesign.plagueinc.models.countries.Continent;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softdesign.plagueinc.models.gamestate.selection_objects;
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

public abstract class SelectionObject {

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softdesign.plagueinc.models.gamestate.selection_objects;
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.softdesign.plagueinc.models.gamestate.selection_objects;
package com.softdesign.plagueinc.rest_controllers.DTOs.selection_objects;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.softdesign.plagueinc.rest_controllers.DTOs.ChangePlagueDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.ChooseCountryDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.CountryChoiceDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.DoActionDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.EvolveDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.JoinGameDTO;
import com.softdesign.plagueinc.rest_controllers.DTOs.PlayEventCardDTO;
Expand Down Expand Up @@ -302,6 +303,18 @@ public ResponseEntity<Void> playEventCard(@RequestParam("gameStateId") String ga
return new ResponseEntity<>(HttpStatus.OK);
}

@PatchMapping("/doAction")
public ResponseEntity<Void> doAction(@RequestParam("gameStateId") String gameStateId, @RequestBody DoActionDTO doActionDTO){
try{
gameStateManager.doAction(gameStateId, doActionDTO.playerId(), doActionDTO.inputs());
broadcastGameState(gameStateId);
}
catch(Exception e){
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e);
}
return new ResponseEntity<>(HttpStatus.OK);
}



/**
Expand Down