summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-08-03 19:06:15 +0200
committerMike Vink <mike1994vink@gmail.com>2021-08-03 19:06:15 +0200
commit4852e6c08a0dd759a60b34b0d03c1f1eedc23805 (patch)
tree918ac17d0d933adb649fe757c0ef8cb922e29e17
parent7c3249f9c13551840fc4c48abaa06fbbf377d481 (diff)
feat(battle): to-trip fightrequest
-rw-r--r--api/src/main/java/akkamon/api/MessagingEngine.java27
-rw-r--r--api/src/main/java/akkamon/api/models/BattleRequestBody.java5
-rw-r--r--api/src/main/java/akkamon/api/models/Event.java21
-rw-r--r--api/src/main/java/akkamon/api/models/EventType.java7
-rw-r--r--api/src/main/java/akkamon/api/models/battle/BattleInitEvent.java (renamed from api/src/main/java/akkamon/api/models/BattleInitEvent.java)4
-rw-r--r--api/src/main/java/akkamon/api/models/outgoing/HeartBeatEvent.java (renamed from api/src/main/java/akkamon/api/models/HeartBeatEvent.java)4
-rw-r--r--api/src/main/java/akkamon/api/models/outgoing/InteractionStartEvent.java (renamed from api/src/main/java/akkamon/api/models/InteractionStartEvent.java)4
-rw-r--r--api/src/main/java/akkamon/api/models/outgoing/OutgoingInteractionRequest.java (renamed from api/src/main/java/akkamon/api/models/OutgoingInteractionRequest.java)4
-rw-r--r--client/src/akkamon/client/Client.ts4
-rw-r--r--client/src/akkamon/client/EventType.ts2
-rw-r--r--client/src/akkamon/client/OutgoingEvents.ts4
-rw-r--r--client/src/akkamon/scenes/BattleScene.ts4
-rw-r--r--domain/src/main/java/akkamon/domain/AkkamonMessageEngine.java3
-rw-r--r--domain/src/main/java/akkamon/domain/InteractionTypes.java5
-rw-r--r--domain/src/main/java/akkamon/domain/actors/AkkamonBattle.java35
-rw-r--r--domain/src/main/java/akkamon/domain/actors/AkkamonNexus.java17
-rw-r--r--domain/src/main/java/akkamon/domain/actors/SceneTrainerGroup.java18
-rw-r--r--domain/src/main/java/akkamon/domain/actors/Trainer.java24
-rw-r--r--domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/Direction.java (renamed from domain/src/main/java/akkamon/domain/Direction.java)2
-rw-r--r--domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/HeartBeatQuery.java (renamed from domain/src/main/java/akkamon/domain/HeartBeatQuery.java)2
-rw-r--r--domain/src/main/java/akkamon/domain/actors/tasks/heartbeat/TilePos.java (renamed from domain/src/main/java/akkamon/domain/TilePos.java)2
-rw-r--r--domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionHandshaker.java (renamed from domain/src/main/java/akkamon/domain/InteractionHandshaker.java)2
-rw-r--r--domain/src/main/java/akkamon/domain/actors/tasks/interactions/InteractionTypes.java5
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/Factory.java (renamed from domain/src/main/java/akkamon/domain/model/Factory.java)2
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/Mon.java18
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/Stat.java8
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/abilities/AbilityFactory.java2
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/abilities/Immunity.java24
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/MovesFactory.java302
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Agility.java25
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Amnesia.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Blizzard.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/BodySlam.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Earthquake.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/IceBeam.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Psychic.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Reflect.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Rest.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SoftBoiled.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/SwordsDance.java26
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/ThunderWave.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/moves/implementations/Wrap.java30
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/status/NoStatus.java29
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/status/StatusFactory.java2
-rw-r--r--domain/src/main/java/akkamon/domain/model/akkamon/types/TypeFactory.java2
-rw-r--r--domain/src/main/java/akkamon/domain/model/battle/BattleEngine.java5
-rw-r--r--domain/src/main/java/akkamon/domain/model/battle/requests/BattleRequestBody.java17
-rw-r--r--domain/src/main/java/akkamon/domain/model/battle/requests/JsonToMove.java18
-rw-r--r--domain/src/main/java/akkamon/domain/model/battle/requests/RequestBattleAction.java8
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
+}