diff --git a/src/asteroids/Asteroid.java b/src/asteroids/Asteroid.java index c0298ab0605a772c3e0046aaeed9a7182a684c7d..f0f9b7f0a28aa11820eb4c5831a4841e45daa51a 100644 --- a/src/asteroids/Asteroid.java +++ b/src/asteroids/Asteroid.java @@ -71,6 +71,13 @@ public class Asteroid extends GameObject { g.setTransform(at); } + @Override + public GameObject copy() { + Asteroid asteroid = new Asteroid(game, s, v, index); + updateClone(asteroid); + return asteroid; + } + public void update() { s.add(v); rot += rotRate; diff --git a/src/asteroids/Column.java b/src/asteroids/Column.java index 1da9879ad136aa10dbd7e95f288a7b365bfc6923..4b5b2c3be19fe4a80c2bb6c016ab8a6c34a345a0 100644 --- a/src/asteroids/Column.java +++ b/src/asteroids/Column.java @@ -14,6 +14,7 @@ public class Column extends GameObject implements PolyContains { static Stroke stroke = new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); boolean dead; GameState game; + private int index; static double minGap = 0.2; static double maxGap = 0.4; @@ -24,6 +25,7 @@ public class Column extends GameObject implements PolyContains { public Column(GameState game, int index) { super(new Vector2d(width + index * width/4, 0), new Vector2d(-1, 0)); + this.index = index; this.game = game; setRandPaths(); } @@ -74,6 +76,13 @@ public class Column extends GameObject implements PolyContains { g.setTransform(at); } + @Override + public GameObject copy() { + Column column = new Column(game, index); + updateClone(column); + return column; + } + public void update() { s.add(v); if (s.x < 0) { diff --git a/src/asteroids/GameObject.java b/src/asteroids/GameObject.java index 54aa0610f7dffcd59a8f9dc37a0e92cc3772488b..9eba6beca54207d9b77ad665e12edff13989b60e 100644 --- a/src/asteroids/GameObject.java +++ b/src/asteroids/GameObject.java @@ -17,6 +17,17 @@ public abstract class GameObject { public abstract void update(); public abstract void draw(Graphics2D g); + public abstract GameObject copy(); + + protected GameObject updateClone(GameObject copyObject) { + copyObject.s = s.copy(); + copyObject.v = v.copy(); + copyObject.isTarget = isTarget; + copyObject.dead = dead; + copyObject.r = r; + + return copyObject; + } public abstract boolean dead(); diff --git a/src/asteroids/Missile.java b/src/asteroids/Missile.java index a8e71a3edb71444e85fce3ae97fea21d027fb911..8bf2674d91352914c5c64022280bc9dcab01cb3a 100644 --- a/src/asteroids/Missile.java +++ b/src/asteroids/Missile.java @@ -30,6 +30,14 @@ public class Missile extends GameObject { g.fillOval((int) (s.x-r), (int) (s.y-r), (int) r * 2, (int) r * 2); } + @Override + public GameObject copy() { + Missile object = new Missile(s, v); + object.ttl = ttl; + + return object; + } + public boolean dead() { return ttl <= 0; } diff --git a/src/battle/BattleMissile.java b/src/battle/BattleMissile.java index e546149cde3caa228aa6645a82d098a5cf4592b8..ab3106d6b33b55d02f2fcd2910605eb2b8881a98 100644 --- a/src/battle/BattleMissile.java +++ b/src/battle/BattleMissile.java @@ -29,6 +29,15 @@ public class BattleMissile extends GameObject { } } + @Override + public BattleMissile copy() { + BattleMissile copy = new BattleMissile(s, v, id); + updateClone(copy); + copy.ttl = ttl; + copy.color = color; + return copy; + } + @Override public void draw(Graphics2D g) { g.setColor(color); diff --git a/src/battle/SimpleBattle.java b/src/battle/SimpleBattle.java index 82e0868136797e6363998eebacfccbef6cd26f6e..9827629a675f0484975ea728a668bc309fdab1a8 100644 --- a/src/battle/SimpleBattle.java +++ b/src/battle/SimpleBattle.java @@ -91,7 +91,6 @@ public class SimpleBattle { public void update(Action a1, Action a2) { // now apply them to the ships - s1.update(a1); s2.update(a2); @@ -119,6 +118,7 @@ public class SimpleBattle { } } + public SimpleBattle clone() { SimpleBattle state = new SimpleBattle(); state.objects = copyObjects(); @@ -132,7 +132,7 @@ public class SimpleBattle { protected ArrayList<GameObject> copyObjects() { ArrayList<GameObject> objectClone = new ArrayList<GameObject>(); for (GameObject object : objects) { - objectClone.add(object); + objectClone.add(object.copy()); } return objectClone;