From de7a33881b3f20cf29a36175831409411ff8fe56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Wed, 18 Feb 2015 12:34:16 +0100 Subject: Board: clear Move and Path Pool at dispose --- core/src/ch/asynk/tankontank/engine/Board.java | 2 + core/src/ch/asynk/tankontank/engine/Move.java | 8 +- core/src/ch/asynk/tankontank/engine/Path.java | 33 +++++--- core/src/ch/asynk/tankontank/game/Engagement.java | 99 ++++++++++++++++++++++ core/src/ch/asynk/tankontank/game/Hud.java | 2 +- core/src/ch/asynk/tankontank/game/Map.java | 45 +--------- .../asynk/tankontank/game/hud/EngagementPanel.java | 10 +-- 7 files changed, 137 insertions(+), 62 deletions(-) create mode 100644 core/src/ch/asynk/tankontank/game/Engagement.java diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index a097454..764fccd 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -131,6 +131,8 @@ public abstract class Board implements Disposable, Animation animations.clear(); if (selectedTile != null) selectedTile.dispose(); + Move.clearPool(); + Path.clearPool(); } public float getWidth() diff --git a/core/src/ch/asynk/tankontank/engine/Move.java b/core/src/ch/asynk/tankontank/engine/Move.java index 16a0860..2f0c138 100644 --- a/core/src/ch/asynk/tankontank/engine/Move.java +++ b/core/src/ch/asynk/tankontank/engine/Move.java @@ -15,7 +15,8 @@ public class Move extends Path implements Iterable EXIT; } - private static final Pool movePool = new Pool() { + private static final Pool movePool = new Pool() + { @Override protected Move newObject() { return new Move(); @@ -42,6 +43,11 @@ public class Move extends Path implements Iterable return m; } + public static void clearPool() + { + movePool.clear(); + } + public static Move getEnter(Pawn pawn, Tile to, Orientation orientation) { Move m = get(pawn, null, to, orientation, null); diff --git a/core/src/ch/asynk/tankontank/engine/Path.java b/core/src/ch/asynk/tankontank/engine/Path.java index 393a0a5..8ed7f8d 100644 --- a/core/src/ch/asynk/tankontank/engine/Path.java +++ b/core/src/ch/asynk/tankontank/engine/Path.java @@ -7,6 +7,25 @@ import com.badlogic.gdx.utils.Disposable; public class Path implements Disposable, Pool.Poolable { + private static final Pool pathPool = new Pool() { + @Override + protected Path newObject() { + return new Path(); + } + }; + + public static Path get(int size) + { + Path p = pathPool.obtain(); + p.init(size); + return p; + } + + public static void clearPool() + { + pathPool.clear(); + } + public int cost; public boolean roadMarch; public ArrayList tiles; @@ -40,18 +59,4 @@ public class Path implements Disposable, Pool.Poolable tiles.clear(); pathPool.free(this); } - - private static final Pool pathPool = new Pool() { - @Override - protected Path newObject() { - return new Path(); - } - }; - - public static Path get(int size) - { - Path p = pathPool.obtain(); - p.init(size); - return p; - } } diff --git a/core/src/ch/asynk/tankontank/game/Engagement.java b/core/src/ch/asynk/tankontank/game/Engagement.java new file mode 100644 index 0000000..4b2edcd --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/Engagement.java @@ -0,0 +1,99 @@ +package ch.asynk.tankontank.game; + +import java.util.List; +import java.util.LinkedList; + +import com.badlogic.gdx.utils.Pool; +import com.badlogic.gdx.utils.Disposable; + +public class Engagement implements Disposable, Pool.Poolable +{ + private static final Pool engagementPool = new Pool() { + @Override + protected Engagement newObject() { + return new Engagement(); + } + }; + + public static Engagement get(Unit attacker, Unit defender) + { + Engagement e = engagementPool.obtain(); + e.attacker = attacker; + e.defender = defender; + + return e; + } + + + public Unit attacker; + public Unit defender; + public List assists; + public Army attackerArmy; + public Army defenderArmy; + public boolean success; + public int d1; + public int d2; + public int d3; + public int d4; + public int unitCount; + public int flankBonus; + public int unitDefense; + public int terrainDefense; + public int weatherDefense; + public int attackSum; + public int defenseSum; + + public Engagement() + { + assists = new LinkedList(); + reset(); + } + + @Override + public void reset() + { + attacker = null; + defender = null; + assists.clear(); + } + + @Override + public void dispose() + { + assists.clear(); + engagementPool.free(this); + } + + public void set(int d1, int d2, int d3, int d4, int cnt, int flk, int def, int tdf, int wdf) + { + this.d1 = d1; + this.d2 = d2; + this.d3 = d3; + this.d4 = d4; + this.unitCount = cnt; + this.flankBonus = flk; + this.unitDefense = def; + this.terrainDefense = tdf; + this.weatherDefense = wdf; + if (d3 == 0) + this.attackSum = (d1 + d2 + unitCount + flankBonus); + else + this.attackSum = (d3 + d4 + unitCount + flankBonus); + this.defenseSum = (unitDefense + terrainDefense + weatherDefense); + } + + + @Override + public String toString() + { + int a, b; + if (d3 == 0) { + a = d1; + b = d2; + } else { + a = d3; + b = d4; + } + return String.format("Engagement : (%d + %d + %d + %d) vs (%d + %d + %d) -> %b", a, b, unitCount, flankBonus, unitDefense, terrainDefense, weatherDefense, success); + } +} diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index 02472df..63996fe 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -280,7 +280,7 @@ public class Hud implements Disposable, Animation pushDialog(okCancel); } - public void engagementSummary(Map.Engagement e, float volume) + public void engagementSummary(Engagement e, float volume) { engagement.show(e, Position.BOTTOM_CENTER, volume); pushDialog(engagement); diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index b3b1ed3..a78a4cf 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -61,43 +61,6 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS protected abstract void setup(); - public class Engagement - { - public Army attacker; - public Army defender; - public boolean success; - public int d1; - public int d2; - public int d3; - public int d4; - public int unitCount; - public int flankBonus; - public int unitDefense; - public int terrainDefense; - public int weatherDefense; - public int attack; - public int defense; - - public void set(int d1, int d2, int d3, int d4, int cnt, int flk, int def, int tdf, int wdf) - { - this.d1 = d1; - this.d2 = d2; - this.d3 = d3; - this.d4 = d4; - this.unitCount = cnt; - this.flankBonus = flk; - this.unitDefense = def; - this.terrainDefense = tdf; - this.weatherDefense = wdf; - if (d3 == 0) - this.attack = (d1 + d2 + unitCount + flankBonus); - else - this.attack = (d3 + d4 + unitCount + flankBonus); - this.defense = (unitDefense + terrainDefense + weatherDefense); - } - } - private Engagement engagement; - public int d6() { return rand.nextInt(6) + 1; @@ -140,7 +103,6 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS objectives = new ObjectiveSet(this, 4); meteorology = new Meteorology(); - engagement = new Engagement(); } @Override @@ -535,8 +497,8 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS e.set(d1, d2, d3, d4, cnt, flk, def, tdf, wdf); e.success = success; - e.attacker = ctrl.player.army; - e.defender = ctrl.opponent.army; + e.attackerArmy = ctrl.player.army; + e.defenderArmy = ctrl.opponent.army; ctrl.hud.engagementSummary(e, ctrl.cfg.fxVolume); return success; @@ -545,8 +507,9 @@ public abstract class Map extends Board implements MoveToAnimationCb, ObjectiveS public boolean engageUnit(Unit unit, final Unit target) { attack(unit, target, true); + Engagement e = Engagement.get(unit, target); - boolean success = resolveFight(unit, target, engagement); + boolean success = resolveFight(unit, target, e); breakUnits.clear(); for (Unit u : activatedUnits) { diff --git a/core/src/ch/asynk/tankontank/game/hud/EngagementPanel.java b/core/src/ch/asynk/tankontank/game/hud/EngagementPanel.java index 6da7406..e524bf7 100644 --- a/core/src/ch/asynk/tankontank/game/hud/EngagementPanel.java +++ b/core/src/ch/asynk/tankontank/game/hud/EngagementPanel.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import ch.asynk.tankontank.game.Map.Engagement; +import ch.asynk.tankontank.game.Engagement; import ch.asynk.tankontank.game.Army; import ch.asynk.tankontank.engine.gfx.Animation; import ch.asynk.tankontank.engine.gfx.animations.DiceAnimation; @@ -91,12 +91,12 @@ public class EngagementPanel extends Patch implements Animation defense.write(String.format("%d + %d =", e.unitDefense, e.terrainDefense)); else defense.write(String.format("%d + %d + %d =", e.unitDefense, e.terrainDefense, e.weatherDefense)); - attackR.write(String.format(" %2d", e.attack)); - defenseR.write(String.format(" %2d", e.defense)); + attackR.write(String.format(" %2d", e.attackSum)); + defenseR.write(String.format(" %2d", e.defenseSum)); if (e.success) - winner = ((e.attacker == Army.US) ? usFlag : geFlag); + winner = ((e.attackerArmy == Army.US) ? usFlag : geFlag); else - winner = ((e.attacker == Army.US) ? geFlag : usFlag); + winner = ((e.attackerArmy == Army.US) ? geFlag : usFlag); this.position = position; placeElements(); -- cgit v1.1-2-g2b99