summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2015-02-18 12:34:16 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2015-02-18 12:34:16 +0100
commitde7a33881b3f20cf29a36175831409411ff8fe56 (patch)
tree65b1c106f7ef977428d442949289bdd39ba9687a /core
parent30a2d67036412ecb5f3ba08ef6fcaeebc7b346af (diff)
downloadRustAndDust-de7a33881b3f20cf29a36175831409411ff8fe56.zip
RustAndDust-de7a33881b3f20cf29a36175831409411ff8fe56.tar.gz
Board: clear Move and Path Pool at dispose
Diffstat (limited to 'core')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Board.java2
-rw-r--r--core/src/ch/asynk/tankontank/engine/Move.java8
-rw-r--r--core/src/ch/asynk/tankontank/engine/Path.java33
-rw-r--r--core/src/ch/asynk/tankontank/game/Engagement.java99
-rw-r--r--core/src/ch/asynk/tankontank/game/Hud.java2
-rw-r--r--core/src/ch/asynk/tankontank/game/Map.java45
-rw-r--r--core/src/ch/asynk/tankontank/game/hud/EngagementPanel.java10
7 files changed, 137 insertions, 62 deletions
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<Vector3>
EXIT;
}
- private static final Pool<Move> movePool = new Pool<Move>() {
+ private static final Pool<Move> movePool = new Pool<Move>()
+ {
@Override
protected Move newObject() {
return new Move();
@@ -42,6 +43,11 @@ public class Move extends Path implements Iterable<Vector3>
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<Path> pathPool = new Pool<Path>() {
+ @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<Tile> tiles;
@@ -40,18 +59,4 @@ public class Path implements Disposable, Pool.Poolable
tiles.clear();
pathPool.free(this);
}
-
- private static final Pool<Path> pathPool = new Pool<Path>() {
- @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<Engagement> engagementPool = new Pool<Engagement>() {
+ @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<Unit> 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<Unit>();
+ 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();