From 1517253bc7426ad53c649912d29b8dca93e161aa Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Thu, 18 Jan 2024 21:39:56 +0100 Subject: [PATCH] implemented battle handler ~ 1.5h work --- src/at/nanopenguin/mtcg/Pair.java | 16 +++++- .../nanopenguin/mtcg/application/Battle.java | 27 ++++++++++ .../mtcg/application/BattleHandler.java | 53 +++++++++++++++++++ .../mtcg/application/Combatant.java | 19 +++++++ 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 src/at/nanopenguin/mtcg/application/Battle.java create mode 100644 src/at/nanopenguin/mtcg/application/BattleHandler.java create mode 100644 src/at/nanopenguin/mtcg/application/Combatant.java diff --git a/src/at/nanopenguin/mtcg/Pair.java b/src/at/nanopenguin/mtcg/Pair.java index b5a0d97..da8a8a7 100644 --- a/src/at/nanopenguin/mtcg/Pair.java +++ b/src/at/nanopenguin/mtcg/Pair.java @@ -1,4 +1,18 @@ package at.nanopenguin.mtcg; -public record Pair(T left, U right) { +import lombok.Setter; + +public class Pair { + @Setter + private T left; + @Setter + private U right; + + public Pair (T left, U right) { + this.left = left; + this.right = right; + } + + public T left() { return this.left; }; + public U right() { return this.right; }; } diff --git a/src/at/nanopenguin/mtcg/application/Battle.java b/src/at/nanopenguin/mtcg/application/Battle.java new file mode 100644 index 0000000..2e3dd0b --- /dev/null +++ b/src/at/nanopenguin/mtcg/application/Battle.java @@ -0,0 +1,27 @@ +package at.nanopenguin.mtcg.application; + +import at.nanopenguin.mtcg.Pair; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class Battle { + private Pair combatants; + @Getter + private volatile List log = new ArrayList<>(); + @Getter + private boolean waiting = true; + + public Battle(Combatant combatant) { + this.combatants = new Pair<>(combatant, null); + } + + public void addCombatant(Combatant combatant) { + this.combatants.setRight(combatant); + } + + public void start() { + + } +} diff --git a/src/at/nanopenguin/mtcg/application/BattleHandler.java b/src/at/nanopenguin/mtcg/application/BattleHandler.java new file mode 100644 index 0000000..c9914c6 --- /dev/null +++ b/src/at/nanopenguin/mtcg/application/BattleHandler.java @@ -0,0 +1,53 @@ +package at.nanopenguin.mtcg.application; + +import java.sql.SQLException; +import java.util.UUID; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +public class BattleHandler { + private static BattleHandler INSTANCE; + private Lock lock = new ReentrantLock(); + private Battle waiting = null; + private BattleHandler() { + + } + + public static BattleHandler getInstance() { + if (INSTANCE == null) { + INSTANCE = new BattleHandler(); + } + + return INSTANCE; + } + + public String[] startBattle(UUID userUuid) throws SQLException { + Battle battle; + + this.lock.lock(); + if ((battle = this.waiting) == null) { + battle = (this.waiting = new Battle(new Combatant(userUuid))); + } + + synchronized (battle) { + this.lock.unlock(); + + if (battle.isWaiting()) { + try { + battle.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + + return battle.getLog().toArray(new String[0]); + } + + battle.addCombatant(new Combatant(userUuid)); + battle.start(); + } + + battle.notify(); + return battle.getLog().toArray(new String[0]); + } +} diff --git a/src/at/nanopenguin/mtcg/application/Combatant.java b/src/at/nanopenguin/mtcg/application/Combatant.java new file mode 100644 index 0000000..767e399 --- /dev/null +++ b/src/at/nanopenguin/mtcg/application/Combatant.java @@ -0,0 +1,19 @@ +package at.nanopenguin.mtcg.application; + +import at.nanopenguin.mtcg.application.service.schemas.Card; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class Combatant { + private UUID userUuid; + private List deck = new ArrayList(); + + public Combatant(UUID userUuid) throws SQLException { + this.userUuid = userUuid; + this.deck = Arrays.asList(UserCards.get(userUuid, true)); + } +}