diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2021-08-03 19:06:15 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2021-08-03 19:06:15 +0200 |
| commit | 4852e6c08a0dd759a60b34b0d03c1f1eedc23805 (patch) | |
| tree | 918ac17d0d933adb649fe757c0ef8cb922e29e17 | |
| parent | 7c3249f9c13551840fc4c48abaa06fbbf377d481 (diff) | |
feat(battle): to-trip fightrequest
49 files changed, 396 insertions, 627 deletions
diff --git a/api/src/main/java/akkamon/api/MessagingEngine.java b/api/src/main/java/akkamon/api/MessagingEngine.java index aa559d0..0ac07fd 100644 --- a/api/src/main/java/akkamon/api/MessagingEngine.java +++ b/api/src/main/java/akkamon/api/MessagingEngine.java @@ -3,12 +3,19 @@ package akkamon.api; import akka.actor.typed.ActorRef; import akka.actor.typed.ActorSystem; import akkamon.api.models.*; +import akkamon.api.models.battle.BattleInitEvent; +import akkamon.api.models.outgoing.HeartBeatEvent; +import akkamon.api.models.outgoing.InteractionStartEvent; +import akkamon.api.models.outgoing.OutgoingInteractionRequest; import akkamon.domain.AkkamonMessageEngine; import akkamon.domain.actors.AkkamonBattle; import akkamon.domain.actors.AkkamonNexus; import akkamon.domain.AkkamonSession; -import akkamon.domain.InteractionHandshaker; +import akkamon.domain.actors.tasks.interactions.InteractionHandshaker; +import akkamon.domain.model.akkamon.Mon; +import akkamon.domain.model.battle.requests.JsonToMove; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import java.util.*; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -23,7 +30,9 @@ public class MessagingEngine implements AkkamonMessageEngine { private Map<AkkamonNexus.TrainerID, AkkamonSession> trainerIDToAkkamonSessions = new HashMap<>(); private Map<String, ActorRef<InteractionHandshaker.Command>> pendingInteractioRequestToHandshaker = new HashMap<>(); - private Gson gson = new Gson(); + private final Gson gson = new GsonBuilder() + .registerTypeAdapter(Mon.Move.class, new JsonToMove()) + .create(); public MessagingEngine() { this.nexus = ActorSystem.create(AkkamonNexus.create(this), "akkamon-system"); @@ -198,7 +207,13 @@ public class MessagingEngine implements AkkamonMessageEngine { } } + @Override + public void removeTrainerSessionFromHeartBeat(AkkamonNexus.TrainerID trainerID, AkkamonSession session) { + trainerIDToAkkamonSessions.remove(trainerID); + } + void incoming(AkkamonSession session, String message) { + // System.out.println(message); Event event = gson.fromJson(message, Event.class); if (event == null) { System.out.println("Received non-supported message DTO."); @@ -263,6 +278,14 @@ public class MessagingEngine implements AkkamonMessageEngine { nexus )); break; + case BATTLE_ACTION_REQUEST: + nexus.tell( + new AkkamonBattle.RequestAction( + event.trainerID, + event.body + ) + ); + break; case HEART_BEAT: //System.out.println("My <3 beats!"); break; diff --git a/api/src/main/java/akkamon/api/models/BattleRequestBody.java b/api/src/main/java/akkamon/api/models/BattleRequestBody.java deleted file mode 100644 index 2a1a423..0000000 --- a/api/src/main/java/akkamon/api/models/BattleRequestBody.java +++ /dev/null @@ -1,5 +0,0 @@ -package akkamon.api.models; - -public class BattleRequestBody { - public -} diff --git a/api/src/main/java/akkamon/api/models/Event.java b/api/src/main/java/akkamon/api/models/Event.java index 7ee3ee1..1c9dcc4 100644 --- a/api/src/main/java/akkamon/api/models/Event.java +++ b/api/src/main/java/akkamon/api/models/Event.java @@ -1,8 +1,9 @@ package akkamon.api.models; +import akkamon.domain.model.battle.requests.BattleRequestBody; import akkamon.domain.actors.AkkamonNexus; -import akkamon.domain.Direction; -import akkamon.domain.TilePos; +import akkamon.domain.actors.tasks.heartbeat.Direction; +import akkamon.domain.actors.tasks.heartbeat.TilePos; public class Event { public EventType type; @@ -12,5 +13,19 @@ public class Event { public Interaction interaction; public String requestName; public boolean value; - public BattleRequestBody battleRequestBody; + public BattleRequestBody body; + + @Override + public String toString() { + return "Event{" + + "type=" + type + + ", trainerID=" + trainerID + + ", direction=" + direction + + ", tilePos=" + tilePos + + ", interaction=" + interaction + + ", requestName='" + requestName + '\'' + + ", value=" + value + + ", body=" + body + + '}'; + } } diff --git a/api/src/main/java/akkamon/api/models/EventType.java b/api/src/main/java/akkamon/api/models/EventType.java index 497da49..295eb4c 100644 --- a/api/src/main/java/akkamon/api/models/EventType.java +++ b/api/src/main/java/akkamon/api/models/EventType.java @@ -30,10 +30,13 @@ public enum EventType { @SerializedName("InteractionReplyEvent") INTERACTION_REPLY, + @SerializedName("InteractionStarting") + INTERACTION_START, + @SerializedName("BattleInitEvent") BATTLE_INIT, - @SerializedName("InteractionStarting") - INTERACTION_START + @SerializedName("BattleActionRequest") + BATTLE_ACTION_REQUEST, } diff --git a/api/src/main/java/akkamon/api/models/BattleInitEvent.java b/api/src/main/java/akkamon/api/models/battle/BattleInitEvent.java index c0f2fbe..2755155 100644 --- a/api/src/main/java/akkamon/api/models/BattleInitEvent.java +++ b/api/src/main/java/akkamon/api/models/battle/BattleInitEvent.java @@ -1,5 +1,7 @@ -package akkamon.api.models; +package akkamon.api.models.battle; +import akkamon.api.models.Event; +import akkamon.api.models.EventType; import akkamon.domain.actors.AkkamonNexus; import akkamon.domain.model.battle.BattleMessage; import akkamon.domain.model.battle.state.BattleState; diff --git a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java b/api/src/main/java/akkamon/api/models/outgoing/HeartBeatEvent.java index 2ec98ad..24cf357 100644 --- a/api/src/main/java/akkamon/api/models/HeartBeatEvent.java +++ b/api/src/main/java/akkamon/api/models/outgoing/HeartBeatEvent.java @@ -1,5 +1,7 @@ -package akkamon.api.models; +package akkamon.api.models.outgoing; +import akkamon.api.models.Event; +import akkamon.api.models.EventType; import akkamon.domain.actors.AkkamonNexus; import java.util.Map; diff --git a/api/src/main/java/akkamon/api/models/InteractionStartEvent.java b/api/src/main/java/akkamon/api/models/outgoing/InteractionStartEvent.java index ce00437..acb6365 100644 --- a/api/src/main/java/akkamon/api/models/InteractionStartEvent.java +++ b/api/src/main/java/akkamon/api/models/outgoing/InteractionStartEvent.java @@ -1,5 +1,7 @@ -package akkamon.api.models; +package akkamon.api.models.outgoing; +import akkamon.api.models.Event; +import akkamon.api.models.EventType; import com.google.gson.JsonElement; public class InteractionStartEvent extends Event { diff --git a/api/src/main/java/akkamon/api/models/OutgoingInteractionRequest.java b/api/src/main/java/akkamon/api/models/outgoing/OutgoingInteractionRequest.java index 9360384..4a9d021 100644 --- a/api/src/main/java/akkamon/api/models/OutgoingInteractionRequest.java +++ b/api/src/main/java/akkamon/api/models/outgoing/OutgoingInteractionRequest.java @@ -1,5 +1,7 @@ -package akkamon.api.models; +package akkamon.api.models.outgoing; +import akkamon.api.models.Event; +import akkamon.api.models.EventType; import akkamon.domain.actors.AkkamonNexus; public class OutgoingInteractionRequest extends Event { diff --git a/client/src/akkamon/client/Client.ts b/client/src/akkamon/client/Client.ts index 1ee02b8..9c7f25b 100644 --- a/client/src/akkamon/client/Client.ts +++ b/client/src/akkamon/client/Client.ts @@ -49,7 +49,7 @@ import { StopMovingEvent, BattleRequestBody, RequestBattleAction, - OutgoingBattleRequest + BattleActionRequest } from './OutgoingEvents'; import type BattleScene from '../scenes/BattleScene'; @@ -318,7 +318,7 @@ export class Client implements AkkamonClient makeBattleRequest(body: BattleRequestBody) { this.send( - new OutgoingBattleRequest( + new BattleActionRequest( this.getTrainerID()!, body ) diff --git a/client/src/akkamon/client/EventType.ts b/client/src/akkamon/client/EventType.ts index 66752e5..fee80d2 100644 --- a/client/src/akkamon/client/EventType.ts +++ b/client/src/akkamon/client/EventType.ts @@ -14,6 +14,6 @@ export enum EventType { INTERACTION_ABORTED = "InteractionAbortedEvent", INTERACTION_START = "InteractionStarting", BATTLE_INIT = "BattleInitEvent", - BATTLE_REQUEST = "BattleRequest" + BATTLE_ACTION_REQUEST = "BattleActionRequest" } diff --git a/client/src/akkamon/client/OutgoingEvents.ts b/client/src/akkamon/client/OutgoingEvents.ts index 48ddd92..7f3c294 100644 --- a/client/src/akkamon/client/OutgoingEvents.ts +++ b/client/src/akkamon/client/OutgoingEvents.ts @@ -35,8 +35,8 @@ export type BattleRequestBody = { } -export class OutgoingBattleRequest implements OutgoingEvent { - public type: EventType = EventType.BATTLE_REQUEST; +export class BattleActionRequest implements OutgoingEvent { + public type: EventType = EventType.BATTLE_ACTION_REQUEST; constructor( public trainerID: TrainerID, diff --git a/client/src/akkamon/scenes/BattleScene.ts b/client/src/akkamon/scenes/BattleScene.ts index 5fed40a..51bb793 100644 --- a/client/src/akkamon/scenes/BattleScene.ts +++ b/client/src/akkamon/scenes/BattleScene.ts @@ -1,6 +1,6 @@ import { client } from '../../app'; import type { Mon, Move } from '../client/IncomingEvents'; -import { OutgoingBattleRequest, RequestBattleAction } from '../client/OutgoingEvents'; +import { BattleActionRequest, RequestBattleAction } from '../client/OutgoingEvents'; import { baseStack, Queue, queueFromArray } from '../DataWrappers'; import type { BasePhaserScene, GConstructor } from '../PhaserTypes'; import type { BattleUIEvent, DialogueUIEvent, InstantUIEvent } from '../render/BattleEngine'; @@ -173,7 +173,7 @@ export default class BattleScene extends Phaser.Scene { this.setWaitingUntilBattleEvent(); client.makeBattleRequest( { - requestAction: RequestBattleAction, + requestAction: RequestBattleAction.FIGHT, move: move } ); diff --git a/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java b/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java index 142d063..fbdaea8 100644 --- a/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java +++ b/domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java @@ -3,6 +3,7 @@ package akkamon.domain; import akka.actor.typed.ActorRef; import akkamon.domain.actors.AkkamonBattle; import akkamon.domain.actors.AkkamonNexus; +import akkamon.domain.actors.tasks.interactions.InteractionHandshaker; import java.util.List; import java.util.Map; @@ -27,4 +28,6 @@ public interface AkkamonMessageEngine { void broadCastHandshakeFail(String requestName, Set<AkkamonNexus.TrainerID> waitingToStartInteraction); void broadCastBattleStart(AkkamonBattle.BattleCreatedResponse response); + + void removeTrainerSessionFromHeartBeat(AkkamonNexus.TrainerID trainerID, AkkamonSession session); } diff --git a/domain/src/main/java/akkamon/domain/InteractionTypes.java b/domain/src/main/java/akkamon/domain/InteractionTypes.java deleted file mode 100644 index b915893..0000000 --- a/domain/src/main/java/akkamon/domain/InteractionTypes.java +++ /dev/null @@ -1,5 +0,0 @@ -package akkamon.domain; - -public enum InteractionTypes { - BATTLE -} diff --git a/domain/src/main/java/akkamon/domain/actors/AkkamonBattle.java b/domain/src/main/java/akkamon/domain/actors/AkkamonBattle.java index c6cd508..ef7dc2e 100644 --- a/domain/src/main/java/akkamon/domain/actors/AkkamonBattle.java +++ b/domain/src/main/java/akkamon/domain/actors/AkkamonBattle.java @@ -8,6 +8,7 @@ import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; import akkamon.domain.model.battle.BattleEngine; import akkamon.domain.model.battle.BattleMessage; +import akkamon.domain.model.battle.requests.BattleRequestBody; import java.util.HashSet; import java.util.Map; @@ -19,6 +20,26 @@ public class AkkamonBattle extends AbstractBehavior<AkkamonBattle.Command> { public interface Command { } + public static class RequestAction + implements AkkamonNexus.Command, SceneTrainerGroup.Command, Trainer.Command, Command { + + public AkkamonNexus.TrainerID trainerID; + public BattleRequestBody body; + + public RequestAction(AkkamonNexus.TrainerID trainerID, BattleRequestBody battleRequestBody) { + this.trainerID = trainerID; + this.body = battleRequestBody; + } + + @Override + public String toString() { + return "RequestAction{" + + "trainerID=" + trainerID + + ", body=" + body + + '}'; + } + } + public static class BattleCreatedResponse implements AkkamonNexus.Command { public Set<AkkamonNexus.TrainerID> participants; public Map<AkkamonNexus.TrainerID, BattleMessage> initState; @@ -46,6 +67,8 @@ public class AkkamonBattle extends AbstractBehavior<AkkamonBattle.Command> { private ActorRef<AkkamonNexus.Command> replyTo; + private Set<RequestAction> nextTurnActions = new HashSet<>(); + public AkkamonBattle( ActorContext<Command> context, Set<AkkamonNexus.TrainerID> participants, @@ -72,6 +95,17 @@ public class AkkamonBattle extends AbstractBehavior<AkkamonBattle.Command> { .build(); } + private Behavior<Command> onRequestBattleAction(RequestAction requestAction) { + nextTurnActions.add(requestAction); + if (nextTurnActions.size() == participants.size()) { + engine.play(nextTurnActions); + nextTurnActions.clear(); + } else { + getContext().getLog().info("Received battle action request of {} but not playing until all received, {}", requestAction.trainerID, requestAction.body); + } + return inProgress(); + } + private Behavior<Command> onBattleStart(AkkamonNexus.BattleStart start) { AkkamonNexus.TrainerID linkingTrainer = start.trainerID; getContext().getLog().info(String.valueOf(needLink)); @@ -95,6 +129,7 @@ public class AkkamonBattle extends AbstractBehavior<AkkamonBattle.Command> { private Behavior<Command> inProgress() { return Behaviors.receive(Command.class) + .onMessage(RequestAction.class, this::onRequestBattleAction) .build(); } diff --git a/domain/src/main/java/akkamon/domain/actors/AkkamonNexus.java b/domain/src/main/java/akkamon/domain/actors/AkkamonNexus.java index 32acbf1..f592148 100644 --- a/domain/src/main/java/akkamon/domain/actors/AkkamonNexus.java +++ b/domain/src/main/java/akkamon/domain/actors/AkkamonNexus.java @@ -7,6 +7,9 @@ import akka.actor.typed.javadsl.ActorContext; import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; import akkamon.domain.*; +import akkamon.domain.actors.tasks.heartbeat.Direction; +import akkamon.domain.actors.tasks.interactions.InteractionHandshaker; +import akkamon.domain.actors.tasks.heartbeat.TilePos; import java.time.Duration; import java.util.*; @@ -298,9 +301,22 @@ public class AkkamonNexus extends AbstractBehavior<AkkamonNexus.Command> { .onMessage(RespondInteractionHandshaker.class, this::onInteractionHandshakerResponse) .onMessage(AkkamonBattle.BattleCreatedResponse.class, this::onBattleCreatedResponse) + .onMessage(AkkamonBattle.RequestAction.class, this::onRequestBattleAction) .build(); } + private AkkamonNexus onRequestBattleAction(AkkamonBattle.RequestAction requestAction) { + // just pass on the message for now + // TODO do some checks here? + ActorRef<SceneTrainerGroup.Command> sceneContaining = sceneIdToActor.get(requestAction.trainerID.scene); + if (sceneContaining != null) { + sceneContaining.tell(requestAction); + } else { + getContext().getLog().info("Ignoring battle request"); + } + return this; + } + private AkkamonNexus onBattleCreatedResponse(AkkamonBattle.BattleCreatedResponse r) { getContext().getLog().info("Created battle between {} and {}, they should now only be listening to battle commands!"); messageEngine.broadCastBattleStart(r); @@ -372,6 +388,7 @@ public class AkkamonNexus extends AbstractBehavior<AkkamonNexus.Command> { private AkkamonNexus onTrainerOffline(RespondTrainerOffline trainerOfflineMsg) { getContext().getLog().info("Removing {} from akkamon sessions!", trainerOfflineMsg.session.gettrainerID()); messageEngine.removeTrainerSessionFromScene(trainerOfflineMsg.trainerID, trainerOfflineMsg.session); + messageEngine.removeTrainerSessionFromHeartBeat(trainerOfflineMsg.trainerID, trainerOfflineMsg.session); return this; } diff --git a/domain/src/main/java/akkamon/domain/actors/SceneTrainerGroup.java b/domain/src/main/java/akkamon/domain/actors/SceneTrainerGroup.java index 933e2b1..1265fe1 100644 --- a/domain/src/main/java/akkamon/domain/actors/SceneTrainerGroup.java +++ b/domain/src/main/java/akkamon/domain/actors/SceneTrainerGroup.java @@ -6,7 +6,7 @@ import akka.actor.typed.javadsl.AbstractBehavior; import akka.actor.typed.javadsl.ActorContext; import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; -import akkamon.domain.HeartBeatQuery; +import akkamon.domain.actors.tasks.heartbeat.HeartBeatQuery; import java.time.Duration; import java.util.HashMap; @@ -78,10 +78,24 @@ public class SceneTrainerGroup extends AbstractBehavior<SceneTrainerGroup.Comman this::onHeartBeat ) .onMessage(AkkamonNexus.BattleStart.class, - this::onBattleStarting) + this::onBattleStarting + ) + .onMessage( + AkkamonBattle.RequestAction.class, this::onRequestBattleAction + ) .build(); } + private SceneTrainerGroup onRequestBattleAction(AkkamonBattle.RequestAction requestAction) { + ActorRef<Trainer.Command> trainer = trainerIDToActor.get(requestAction.trainerID); + if (trainer != null) { + trainer.tell(requestAction); + } else { + getContext().getLog().info("Ignoring battle action request"); + } + return this; + } + private SceneTrainerGroup onBattleStarting(AkkamonNexus.BattleStart battle) { ActorRef<Trainer.Command> trainer = this.trainerIDToActor.get(battle.trainerID); if (trainer != null) { diff --git a/domain/src/main/java/akkamon/domain/actors/Trainer.java b/domain/src/main/java/akkamon/domain/actors/Trainer.java index 2ebe2ed..4cb9356 100644 --- a/domain/src/main/java/akkamon/domain/actors/Trainer.java +++ b/domain/src/main/java/akkamon/domain/actors/Trainer.java @@ -6,8 +6,8 @@ import akka.actor.typed.javadsl.AbstractBehavior; import akka.actor.typed.javadsl.ActorContext; import akka.actor.typed.javadsl.Behaviors; import akka.actor.typed.javadsl.Receive; -import akkamon.domain.Direction; -import akkamon.domain.TilePos; +import akkamon.domain.actors.tasks.heartbeat.Direction; +import akkamon.domain.actors.tasks.heartbeat.TilePos; import java.util.LinkedList; import java.util.Optional; @@ -90,16 +90,34 @@ public class Trainer extends AbstractBehavior<Trainer.Command> { RequestNewTilePos.class, this::onNewTilePos ) - .onMessage(AkkamonNexus.BattleStart.class, this::onBattleStart) + .onMessage( + AkkamonNexus.BattleStart.class, this::onBattleStart + ) + .onMessage( + AkkamonBattle.RequestAction.class, this::onRequestBattleAction + ) .build(); } private Behavior<Command> battling() { return Behaviors.receive(Command.class) .onMessage(ReadMovementQueue.class, this::onReadMovementQueue) + .onMessage( + AkkamonBattle.RequestAction.class, this::onRequestBattleAction + ) .build(); } + private Trainer onRequestBattleAction(AkkamonBattle.RequestAction requestAction) { + if (battleRef != null) { + battleRef.tell(requestAction); + } else { + getContext().getLog().info("trainer is not in a battle!"); + } + return this; + } + + private Behavior<Command> onBattleStart(AkkamonNexus.BattleStart battle) { getContext().getLog().info("Trainer {} now has a battle ref and has battle behavior", trainerID); this.battleRef = battle.ref; diff --git a/domain/src/main/java/akkamon/domain/Direction.java b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/Direction.java index 71343c6..43c557c 100644 --- a/domain/src/main/java/akkamon/domain/Direction.java +++ b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/Direction.java @@ -1,4 +1,4 @@ -package akkamon.domain; +package akkamon.domain.actors.tasks.heartbeat; public enum Direction { UP, diff --git a/domain/src/main/java/akkamon/domain/HeartBeatQuery.java b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/HeartBeatQuery.java index 45d6e38..e89cdc2 100644 --- a/domain/src/main/java/akkamon/domain/HeartBeatQuery.java +++ b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/HeartBeatQuery.java @@ -1,4 +1,4 @@ -package akkamon.domain; +package akkamon.domain.actors.tasks.heartbeat; import akka.actor.typed.ActorRef; import akka.actor.typed.Behavior; diff --git a/domain/src/main/java/akkamon/domain/TilePos.java b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/TilePos.java index 95e3f71..60d3b88 100644 --- a/domain/src/main/java/akkamon/domain/TilePos.java +++ b/domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/TilePos.java @@ -1,4 +1,4 @@ -package akkamon.domain; +package akkamon.domain.actors.tasks.heartbeat; public class TilePos { public int x; diff --git a/domain/src/main/java/akkamon/domain/InteractionHandshaker.java b/domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionHandshaker.java index 186c310..85daee2 100644 --- a/domain/src/main/java/akkamon/domain/InteractionHandshaker.java +++ b/domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionHandshaker.java @@ -1,4 +1,4 @@ -package akkamon.domain; +package akkamon.domain.actors.tasks.interactions; import akka.actor.typed.ActorRef; import akka.actor.typed.Behavior; diff --git a/domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionTypes.java b/domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionTypes.java new file mode 100644 index 0000000..bd67bbc --- /dev/null +++ b/domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionTypes.java @@ -0,0 +1,5 @@ +package akkamon.domain.actors.tasks.interactions; + +public enum InteractionTypes { + BATTLE +} diff --git a/domain/src/main/java/akkamon/domain/model/Factory.java b/domain/src/main/java/akkamon/domain/model/akkamon/Factory.java index a00ff11..f43db03 100644 --- a/domain/src/main/java/akkamon/domain/model/Factory.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/Factory.java @@ -1,4 +1,4 @@ -package akkamon.domain.model; +package akkamon.domain.model.akkamon; public interface Factory<T, E> { T fromName(E name); diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/Mon.java b/domain/src/main/java/akkamon/domain/model/akkamon/Mon.java index a1d781d..39d1419 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/Mon.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/Mon.java @@ -31,15 +31,15 @@ public class Mon { } - public static abstract class Ability extends TypeEquality implements Phases { + public static abstract class Ability extends TypeEquality { } - public static abstract class Status extends TypeEquality implements Phases { + public static abstract class Status extends TypeEquality { } - public static abstract class Move implements Phases { + public static abstract class Move { public String name; public Mon.Type type; public MoveCategory category; @@ -59,6 +59,18 @@ public class Mon { this.power = power; this.accuracy = accuracy; } + + @Override + public String toString() { + return "Move{" + + "name='" + name + '\'' + + ", type=" + type + + ", category=" + category + + ", PP=" + PP + + ", power=" + power + + ", accuracy=" + accuracy + + '}'; + } } private String name; diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/Stat.java b/domain/src/main/java/akkamon/domain/model/akkamon/Stat.java index 92bc76e..de989ab 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/Stat.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/Stat.java @@ -8,4 +8,12 @@ public class Stat { this.base = base; this.effective = base; } + + @Override + public String toString() { + return "Stat{" + + "base=" + base + + ", effective=" + effective + + '}'; + } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/abilities/AbilityFactory.java b/domain/src/main/java/akkamon/domain/model/akkamon/abilities/AbilityFactory.java index 73cfe1d..d22fccf 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/abilities/AbilityFactory.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/abilities/AbilityFactory.java @@ -1,6 +1,6 @@ package akkamon.domain.model.akkamon.abilities; -import akkamon.domain.model.Factory; +import akkamon.domain.model.akkamon.Factory; import akkamon.domain.model.akkamon.Mon; public class AbilityFactory implements Factory<Mon.Ability, AkkamonAbilities> { diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/abilities/Immunity.java b/domain/src/main/java/akkamon/domain/model/akkamon/abilities/Immunity.java index cdc014b..056ec73 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/abilities/Immunity.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/abilities/Immunity.java @@ -4,28 +4,4 @@ import akkamon.domain.model.akkamon.Mon; public class Immunity extends Mon.Ability { - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void switchIn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/MovesFactory.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/MovesFactory.java index 41ff7a3..e84a6a5 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/MovesFactory.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/MovesFactory.java @@ -4,6 +4,7 @@ import akkamon.domain.model.akkamon.Mon; import akkamon.domain.model.akkamon.Stat; import akkamon.domain.model.akkamon.moves.implementations.*; import akkamon.domain.model.akkamon.types.implementations.*; +import com.google.gson.JsonObject; import java.util.HashMap; import java.util.Map; @@ -14,158 +15,151 @@ public class MovesFactory { for (var i = 0 ; i < names.length; i++) { String name = names[i]; MoveSlot slot = indexToMoveSlot(i); - switch (name) { - case "Body Slam": - Mon.Move bodySlam = new BodySlam( - name, - new NormalType(), - MoveCategory.PHYSICAL, - new Stat(15), - 85, - 1 - ); - moves.put(slot, bodySlam); - break; - case "Reflect": - Mon.Move reflect = new Reflect( - name, - new PsychicType(), - MoveCategory.STATUS, - new Stat(20), - -1, - -1 - ); - moves.put(slot, reflect); - break; - case "Rest": - Mon.Move rest = new Rest( - name, - new PsychicType(), - MoveCategory.STATUS, - new Stat(10), - -1, - -1 - ); - moves.put(slot, rest); - break; - case "Ice Beam": - Mon.Move iceBeam = new IceBeam( - name, - new IceType(), - MoveCategory.SPECIAL, - new Stat(10), - 90, - 1 - ); - moves.put(slot, iceBeam); - break; - case "Swords Dance": - Mon.Move swordsDance = new SwordsDance( - name, - new NormalType(), - MoveCategory.STATUS, - new Stat(20), - 90, - 1 - ); - moves.put(slot, swordsDance); - break; - case "Earthquake": - Mon.Move earthquake = new Earthquake( - name, - new GroundType(), - MoveCategory.PHYSICAL, - new Stat(10), - 100, - 1 - ); - moves.put(slot, earthquake); - break; - case "Soft-Boiled": - Mon.Move softBoiled = new SoftBoiled( - name, - new NormalType(), - MoveCategory.STATUS, - new Stat(10), - -1, - -1 - ); - moves.put(slot, softBoiled); - break; - case "Amnesia": - Mon.Move amnesia = new Amnesia( - name, - new PsychicType(), - MoveCategory.STATUS, - new Stat(20), - -1, - -1 - ); - moves.put(slot, amnesia); - break; - case "Psychic": - Mon.Move psychic = new Psychic( - name, - new PsychicType(), - MoveCategory.SPECIAL, - new Stat(10), - 90, - 1 - ); - moves.put(slot, psychic); - break; - case "Agility": - Mon.Move agility = new Agility( - name, - new PsychicType(), - MoveCategory.STATUS, - new Stat(30), - -1, - -1 - ); - moves.put(slot, agility); - break; - case "Blizzard": - Mon.Move blizzard = new Blizzard( - name, - new IceType(), - MoveCategory.SPECIAL, - new Stat(5), - 110, - 0.7 - ); - moves.put(slot, blizzard); - break; - case "Thunder Wave": - Mon.Move thunderWave = new ThunderWave( - name, - new ElectricType(), - MoveCategory.STATUS, - new Stat(20), - -1, - 0.9 - ); - moves.put(slot, thunderWave); - break; - case "Wrap": - Mon.Move wrap = new Wrap( - name, - new NormalType(), - MoveCategory.PHYSICAL, - new Stat(20), - 15, - 0.9 - ); - moves.put(slot, wrap); - break; - default: - System.out.println("move not found: " + name); - return null; - } + moves.put(slot, fromName(name)); } return moves; } + private Mon.Move fromName(String name) { + Mon.Move move; + switch (name) { + case "Body Slam": + move = new BodySlam( + name, + new NormalType(), + MoveCategory.PHYSICAL, + new Stat(15), + 85, + 1 + ); + break; + case "Reflect": + move = new Reflect( + name, + new PsychicType(), + MoveCategory.STATUS, + new Stat(20), + -1, + -1 + ); + break; + case "Rest": + move = new Rest( + name, + new PsychicType(), + MoveCategory.STATUS, + new Stat(10), + -1, + -1 + ); + break; + case "Ice Beam": + move = new IceBeam( + name, + new IceType(), + MoveCategory.SPECIAL, + new Stat(10), + 90, + 1 + ); + break; + case "Swords Dance": + move = new SwordsDance( + name, + new NormalType(), + MoveCategory.STATUS, + new Stat(20), + 90, + 1 + ); + break; + case "Earthquake": + move = new Earthquake( + name, + new GroundType(), + MoveCategory.PHYSICAL, + new Stat(10), + 100, + 1 + ); + break; + case "Soft-Boiled": + move = new SoftBoiled( + name, + new NormalType(), + MoveCategory.STATUS, + new Stat(10), + -1, + -1 + ); + break; + case "Amnesia": + move = new Amnesia( + name, + new PsychicType(), + MoveCategory.STATUS, + new Stat(20), + -1, + -1 + ); + break; + case "Psychic": + move = new Psychic( + name, + new PsychicType(), + MoveCategory.SPECIAL, + new Stat(10), + 90, + 1 + ); + break; + case "Agility": + move = new Agility( + name, + new PsychicType(), + MoveCategory.STATUS, + new Stat(30), + -1, + -1 + ); + break; + case "Blizzard": + move = new Blizzard( + name, + new IceType(), + MoveCategory.SPECIAL, + new Stat(5), + 110, + 0.7 + ); + break; + case "Thunder Wave": + move = new ThunderWave( + name, + new ElectricType(), + MoveCategory.STATUS, + new Stat(20), + -1, + 0.9 + ); + break; + case "Wrap": + move = new Wrap( + name, + new NormalType(), + MoveCategory.PHYSICAL, + new Stat(20), + 15, + 0.9 + ); + break; + default: + System.out.println("move not found: " + name); + return null; + } + return move; + } + private MoveSlot indexToMoveSlot(int i) { switch (i) { case 0: @@ -180,4 +174,16 @@ public class MovesFactory { return null; } } + + public Mon.Move fromJSON(JsonObject json) { + String name = String.valueOf(json.get("name")); + name = name.replaceAll("\"", ""); + System.out.println("Setting this move from json!"); + System.out.println(name); + Mon.Move move = this.fromName(name); + JsonObject pp = json.get("PP").getAsJsonObject(); + move.PP.effective = Integer.parseInt(String.valueOf(pp.get("effective"))); + System.out.println(move); + return move; + } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Agility.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Agility.java index 193bbdd..9b286d7 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Agility.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Agility.java @@ -9,29 +9,4 @@ public class Agility extends Mon.Move { public Agility(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void switchIn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Amnesia.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Amnesia.java index fa19cb6..273128a 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Amnesia.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Amnesia.java @@ -10,34 +10,4 @@ public class Amnesia extends Mon.Move { public Amnesia(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Blizzard.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Blizzard.java index 0ea367b..a11c553 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Blizzard.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Blizzard.java @@ -9,34 +9,4 @@ public class Blizzard extends Mon.Move { public Blizzard(String name, Mon.Type type, MoveCategory category, Stat PP, int power, double accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/BodySlam.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/BodySlam.java index f0135d9..e50378f 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/BodySlam.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/BodySlam.java @@ -10,34 +10,4 @@ public class BodySlam extends Mon.Move { public BodySlam(String name, Mon.Type type, MoveCategory category, Stat PP, int power, double accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Earthquake.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Earthquake.java index e993a65..2189a58 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Earthquake.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Earthquake.java @@ -9,34 +9,4 @@ public class Earthquake extends Mon.Move { public Earthquake(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/IceBeam.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/IceBeam.java index 88d20d0..e9074f6 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/IceBeam.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/IceBeam.java @@ -9,34 +9,4 @@ public class IceBeam extends Mon.Move { public IceBeam(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Psychic.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Psychic.java index 36b071d..b581744 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Psychic.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Psychic.java @@ -9,34 +9,4 @@ public class Psychic extends Mon.Move { public Psychic(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Reflect.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Reflect.java index 06661ab..feea560 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Reflect.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Reflect.java @@ -9,34 +9,4 @@ public class Reflect extends Mon.Move { public Reflect(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Rest.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Rest.java index ef3881a..a372311 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Rest.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Rest.java @@ -9,34 +9,4 @@ public class Rest extends Mon.Move { public Rest(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SoftBoiled.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SoftBoiled.java index b74fb6e..718818c 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SoftBoiled.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SoftBoiled.java @@ -9,34 +9,4 @@ public class SoftBoiled extends Mon.Move { public SoftBoiled(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SwordsDance.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SwordsDance.java index 0adc54d..742de17 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SwordsDance.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SwordsDance.java @@ -9,30 +9,4 @@ public class SwordsDance extends Mon.Move { public SwordsDance(String name, Mon.Type type, MoveCategory category, Stat PP, int power, int accuracy) { super(name, type, category, PP, power, accuracy); } - - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void switchIn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/ThunderWave.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/ThunderWave.java index 4254f5b..a2aacbf 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/ThunderWave.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/ThunderWave.java @@ -9,34 +9,4 @@ public class ThunderWave extends Mon.Move { public ThunderWave(String name, Mon.Type type, MoveCategory category, Stat PP, int power, double accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Wrap.java b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Wrap.java index bf3bad5..70c33ce 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Wrap.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Wrap.java @@ -9,34 +9,4 @@ public class Wrap extends Mon.Move { public Wrap(String name, Mon.Type type, MoveCategory category, Stat PP, int power, double accuracy) { super(name, type, category, PP, power, accuracy); } - - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/status/NoStatus.java b/domain/src/main/java/akkamon/domain/model/akkamon/status/NoStatus.java index fe3c649..351f0d0 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/status/NoStatus.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/status/NoStatus.java @@ -4,33 +4,4 @@ import akkamon.domain.model.akkamon.Mon; public class NoStatus extends Mon.Status { - @Override - public void startTurn() { - - } - - @Override - public void fight() { - - } - - @Override - public void getAttacked() { - - } - - @Override - public void useItem() { - - } - - @Override - public void switchOut() { - - } - - @Override - public void endTurn() { - - } } diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/status/StatusFactory.java b/domain/src/main/java/akkamon/domain/model/akkamon/status/StatusFactory.java index 85e733a..c3ad427 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/status/StatusFactory.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/status/StatusFactory.java @@ -1,8 +1,6 @@ package akkamon.domain.model.akkamon.status; -import akkamon.domain.model.Factory; import akkamon.domain.model.akkamon.Mon; -import akkamon.domain.model.akkamon.moves.MoveSlot; import java.util.ArrayList; import java.util.HashMap; diff --git a/domain/src/main/java/akkamon/domain/model/akkamon/types/TypeFactory.java b/domain/src/main/java/akkamon/domain/model/akkamon/types/TypeFactory.java index a2badbf..4f61239 100644 --- a/domain/src/main/java/akkamon/domain/model/akkamon/types/TypeFactory.java +++ b/domain/src/main/java/akkamon/domain/model/akkamon/types/TypeFactory.java @@ -1,6 +1,6 @@ package akkamon.domain.model.akkamon.types; -import akkamon.domain.model.Factory; +import akkamon.domain.model.akkamon.Factory; import akkamon.domain.model.akkamon.Mon; import akkamon.domain.model.akkamon.types.implementations.*; diff --git a/domain/src/main/java/akkamon/domain/model/battle/BattleEngine.java b/domain/src/main/java/akkamon/domain/model/battle/BattleEngine.java index 4d02d9a..7b438c4 100644 --- a/domain/src/main/java/akkamon/domain/model/battle/BattleEngine.java +++ b/domain/src/main/java/akkamon/domain/model/battle/BattleEngine.java @@ -1,5 +1,6 @@ package akkamon.domain.model.battle; +import akkamon.domain.actors.AkkamonBattle; import akkamon.domain.actors.AkkamonNexus; import akkamon.domain.model.akkamon.Mon; import akkamon.domain.model.akkamon.MonStats; @@ -72,6 +73,10 @@ public class BattleEngine { return messageMap; } + public void play(Set<AkkamonBattle.RequestAction> nextTurnActions) { + System.out.println("Playing actions:" + nextTurnActions); + } + public static List<MonTeam> createDemoTeams() { AkkamonStatus[] noStatusArray = new AkkamonStatus[] { diff --git a/domain/src/main/java/akkamon/domain/model/battle/requests/BattleRequestBody.java b/domain/src/main/java/akkamon/domain/model/battle/requests/BattleRequestBody.java new file mode 100644 index 0000000..ce314af --- /dev/null +++ b/domain/src/main/java/akkamon/domain/model/battle/requests/BattleRequestBody.java @@ -0,0 +1,17 @@ +package akkamon.domain.model.battle.requests; + +import akkamon.domain.model.akkamon.Mon; + +public class BattleRequestBody { + public RequestBattleAction requestAction; + + public Mon.Move move; + + @Override + public String toString() { + return "BattleRequestBody{" + + "requestAction=" + requestAction + + ", move=" + move + + '}'; + } +} diff --git a/domain/src/main/java/akkamon/domain/model/battle/requests/JsonToMove.java b/domain/src/main/java/akkamon/domain/model/battle/requests/JsonToMove.java new file mode 100644 index 0000000..9abc126 --- /dev/null +++ b/domain/src/main/java/akkamon/domain/model/battle/requests/JsonToMove.java @@ -0,0 +1,18 @@ +package akkamon.domain.model.battle.requests; + +import akkamon.domain.model.akkamon.Mon; +import akkamon.domain.model.akkamon.Stat; +import akkamon.domain.model.akkamon.moves.MoveCategory; +import akkamon.domain.model.akkamon.moves.MovesFactory; +import com.google.gson.*; + +import java.lang.reflect.Type; + +public class JsonToMove implements JsonDeserializer<Mon.Move> { + + @Override + public Mon.Move deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + + return new MovesFactory().fromJSON(json.getAsJsonObject()); + } +} diff --git a/domain/src/main/java/akkamon/domain/model/battle/requests/RequestBattleAction.java b/domain/src/main/java/akkamon/domain/model/battle/requests/RequestBattleAction.java new file mode 100644 index 0000000..1cab082 --- /dev/null +++ b/domain/src/main/java/akkamon/domain/model/battle/requests/RequestBattleAction.java @@ -0,0 +1,8 @@ +package akkamon.domain.model.battle.requests; + +import com.google.gson.annotations.SerializedName; + +public enum RequestBattleAction { + @SerializedName("FIGHT") + FIGHT +} |
