feat: Winnable and some minor changes
This commit is contained in:
@ -81,4 +81,13 @@ public class GameController {
|
||||
|
||||
return ResponseEntity.ok(UnifiedResponse.success(TestGameKeyResponse.WORKING));
|
||||
}
|
||||
|
||||
@GetMapping("/winnable")
|
||||
@CheckUser
|
||||
public ResponseEntity<UnifiedResponse<Boolean, Error>> winnable(@RequestParam String playerKey) {
|
||||
var player = playerRepository.findByPlayerKey(playerKey).get();
|
||||
var game = player.getGame();
|
||||
|
||||
return ResponseEntity.ok(UnifiedResponse.success(game.winnable()));
|
||||
}
|
||||
}
|
||||
|
@ -44,4 +44,33 @@ public class Game {
|
||||
public void addPlayer(Player player) {
|
||||
this.players.add(player);
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public boolean winnable() {
|
||||
var ownedFragments = 0;
|
||||
for (Player player : players) {
|
||||
for (Item item : player.getInventory()) {
|
||||
if (item.getItemType() == ItemType.KEY_FRAGMENT) {
|
||||
ownedFragments++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var roomItems = 0;
|
||||
var characters = new ArrayList<Character>();
|
||||
|
||||
for (Room room : rooms) {
|
||||
characters.addAll(room.getCharacters());
|
||||
for (Item item : room.getItems()) {
|
||||
if (item.getItemType() == ItemType.KEY_FRAGMENT) {
|
||||
roomItems++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var unplayedCharacters = characters.stream().filter(character -> !character.isInteractedWith()).toList().size();
|
||||
|
||||
return roomItems + unplayedCharacters + ownedFragments >= 5;
|
||||
}
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ public class Hangman implements InteractionPlayer {
|
||||
var incorrectGuessesSet = interactionMemory.getIncorrectGuessesSet();
|
||||
StringBuilder currentProgress = new StringBuilder(interactionMemory.getCurrentProgress());
|
||||
|
||||
if (data == null || data.isEmpty()) {
|
||||
if (data.isEmpty()) {
|
||||
return new InteractionResponse(false, "invalid_input", new ArrayList<>());
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import cz.jzitnik.chronos.entities.Player;
|
||||
import cz.jzitnik.chronos.interactions.InteractionPlayer;
|
||||
import cz.jzitnik.chronos.payload.responses.InteractionResponse;
|
||||
import cz.jzitnik.chronos.repository.CharacterRepository;
|
||||
import cz.jzitnik.chronos.repository.ItemRepository;
|
||||
import cz.jzitnik.chronos.services.ItemService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -19,6 +20,8 @@ public class Mayor implements InteractionPlayer {
|
||||
private ItemService itemService;
|
||||
@Autowired
|
||||
private CharacterRepository characterRepository;
|
||||
@Autowired
|
||||
private ItemRepository itemRepository;
|
||||
|
||||
@Override
|
||||
public InteractionResponse play(Player player, Character character, String data) {
|
||||
@ -30,10 +33,12 @@ public class Mayor implements InteractionPlayer {
|
||||
}
|
||||
|
||||
var golderWatch = golderWatches.getFirst();
|
||||
golderWatch.setOwner(null);
|
||||
itemRepository.save(golderWatch);
|
||||
playerItems.remove(golderWatch);
|
||||
|
||||
var item = new Item(ItemType.KEY_FRAGMENT, player);
|
||||
itemService.addItem(player, item); // itemRepository.save is ran by this function so we don't need to save the player when we removed the item from his inv
|
||||
itemService.addItem(player, item);
|
||||
|
||||
character.setInteractedWith(true);
|
||||
characterRepository.save(character);
|
||||
|
Reference in New Issue
Block a user