generated from Game-as-a-Service/Gaas-repo-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c2b6479
commit 265cb32
Showing
23 changed files
with
573 additions
and
61 deletions.
There are no files selected for viewing
42 changes: 42 additions & 0 deletions
42
...heThreeKingdoms/app/src/main/java/com/gaas/threeKingdoms/usecase/UseEquipmentUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package com.gaas.threeKingdoms.usecase; | ||
|
||
import com.gaas.threeKingdoms.Game; | ||
import com.gaas.threeKingdoms.events.DomainEvent; | ||
import com.gaas.threeKingdoms.handcard.EquipmentPlayType; | ||
import com.gaas.threeKingdoms.outport.GameRepository; | ||
import jakarta.inject.Named; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Data; | ||
import lombok.NoArgsConstructor; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
import java.util.List; | ||
|
||
@RequiredArgsConstructor | ||
@Named | ||
public class UseEquipmentUseCase { | ||
private final GameRepository gameRepository; | ||
|
||
public void execute(String gameId, UseEquipmentRequest request, UseEquipmentPresenter presenter) { | ||
Game game = gameRepository.findById(gameId); | ||
List<DomainEvent> events = game.playerUseEquipment(request.playerId, request.cardId, request.targetPlayerId, request.playType); | ||
gameRepository.save(game); | ||
presenter.renderEvents(events); | ||
} | ||
|
||
@Data | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public static class UseEquipmentRequest { | ||
private String playerId; | ||
private String targetPlayerId; | ||
private String cardId; | ||
private EquipmentPlayType playType; | ||
} | ||
|
||
public interface UseEquipmentPresenter<T> { | ||
void renderEvents(List<DomainEvent> events); | ||
|
||
T present(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 13 additions & 10 deletions
23
...fect/EightDiagramTacticEffectHandler.java → ...tDiagramTacticEquipmentEffectHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,52 +1,55 @@ | ||
package com.gaas.threeKingdoms.effect; | ||
|
||
import com.gaas.threeKingdoms.Game; | ||
import com.gaas.threeKingdoms.Round; | ||
import com.gaas.threeKingdoms.events.DomainEvent; | ||
import com.gaas.threeKingdoms.events.EffectEvent; | ||
import com.gaas.threeKingdoms.events.RoundEvent; | ||
import com.gaas.threeKingdoms.handcard.EquipmentPlayType; | ||
import com.gaas.threeKingdoms.handcard.HandCard; | ||
import com.gaas.threeKingdoms.handcard.PlayType; | ||
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.ArmorCard; | ||
import com.gaas.threeKingdoms.handcard.equipmentcard.armorcard.EightDiagramTactic; | ||
import com.gaas.threeKingdoms.player.Player; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public class EightDiagramTacticEffectHandler extends EffectHandler { | ||
public class EightDiagramTacticEquipmentEffectHandler extends EquipmentEffectHandler { | ||
|
||
public EightDiagramTacticEffectHandler(EffectHandler next, Game game) { | ||
public EightDiagramTacticEquipmentEffectHandler(EquipmentEffectHandler next, Game game) { | ||
super(next, game); | ||
} | ||
|
||
@Override | ||
protected boolean match(String playerId, String cardId, String targetPlayerId, PlayType playType) { | ||
protected boolean match(String playerId, String cardId, String targetPlayerId, EquipmentPlayType playType) { | ||
Player player = getPlayer(playerId); | ||
Optional<HandCard> card = Optional.ofNullable(player.getEquipmentArmorCard()); | ||
boolean isEightDiagramTactic = card.filter(armorCard -> armorCard instanceof EightDiagramTactic && cardId.equals(armorCard.getId())).isPresent(); | ||
boolean isEquipmentPlayType = playType.equals(PlayType.EQUIPMENT_ACTIVE) || playType.equals(PlayType.EQUIPMENT_SKIP); | ||
return (isEightDiagramTactic && isEquipmentPlayType); | ||
return card.filter(armorCard -> armorCard instanceof EightDiagramTactic && cardId.equals(armorCard.getId())).isPresent(); | ||
} | ||
|
||
@Override | ||
protected List<DomainEvent> doHandle(String playerId, String cardId, String targetPlayerId, PlayType playType) { | ||
protected List<DomainEvent> doHandle(String playerId, String cardId, String targetPlayerId, EquipmentPlayType playType) { | ||
if (skipEquipmentEffect(playType)) { | ||
game.peekTopBehavior().setIsOneRound(false); | ||
return new ArrayList<>(); | ||
} | ||
Player player = getPlayer(playerId); | ||
ArmorCard armorCard = player.getEquipment().getArmor(); | ||
|
||
List<DomainEvent> domainEvents = armorCard.equipmentEffect(game); | ||
|
||
boolean isEightDiagramTacticEffectSuccess = domainEvents.stream() | ||
.map(EffectEvent.class::cast) | ||
.allMatch(EffectEvent::isSuccess); | ||
|
||
game.peekTopBehavior().setIsOneRound(isEightDiagramTacticEffectSuccess); | ||
return domainEvents; | ||
} | ||
|
||
private boolean skipEquipmentEffect(PlayType playType) { | ||
return PlayType.EQUIPMENT_SKIP == playType; | ||
private boolean skipEquipmentEffect(EquipmentPlayType equipmentPlayType) { | ||
return equipmentPlayType.equals(EquipmentPlayType.SKIP); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
...ThreeKingdoms/domain/src/main/java/com/gaas/threeKingdoms/handcard/EquipmentPlayType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package com.gaas.threeKingdoms.handcard; | ||
|
||
import java.util.Arrays; | ||
|
||
public enum EquipmentPlayType { | ||
|
||
ACTIVE("equipmentActive"), | ||
SKIP("equipmentSkip"); | ||
|
||
private final String playType; | ||
|
||
public String getPlayType() { | ||
return playType; | ||
} | ||
|
||
EquipmentPlayType(String playType) { | ||
this.playType = playType; | ||
} | ||
|
||
public static EquipmentPlayType getPlayType(String playType) { | ||
return Arrays.stream(EquipmentPlayType.values()).filter(equipmentPlayType -> equipmentPlayType.getPlayType().equals(playType)).findFirst() | ||
.orElseThrow(); | ||
} | ||
|
||
public static void checkPlayTypeIsValid(String value) { | ||
for (PlayType type : PlayType.values()) { | ||
if (type.getPlayType().equals(value)) { | ||
return; | ||
} | ||
} | ||
throw new IllegalArgumentException(String.format("Play type [%s] not valid.", value)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.