diff options
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/rustanddust/engine/Move.java | 64 | ||||
| -rw-r--r-- | core/src/ch/asynk/rustanddust/engine/PathIterator.java | 80 | 
2 files changed, 62 insertions, 82 deletions
| diff --git a/core/src/ch/asynk/rustanddust/engine/Move.java b/core/src/ch/asynk/rustanddust/engine/Move.java index 077823f..09e7330 100644 --- a/core/src/ch/asynk/rustanddust/engine/Move.java +++ b/core/src/ch/asynk/rustanddust/engine/Move.java @@ -3,9 +3,10 @@ package ch.asynk.rustanddust.engine;  import java.util.Iterator;  import com.badlogic.gdx.utils.Pool; +import com.badlogic.gdx.math.Vector2;  import com.badlogic.gdx.math.Vector3; -public class Move extends Path implements Iterable<Vector3> +public class Move extends Path implements Iterable<Vector3>, Iterator  {      public enum MoveType      { @@ -69,6 +70,14 @@ public class Move extends Path implements Iterable<Vector3>      public Tile to;      public Orientation orientation;      public MoveType type; +    // iterator +    private int i; +    private int s; +    private Tile t; +    private boolean r; +    private Orientation o; +    private Vector3 v = new Vector3(); +    private Vector2 pos = new Vector2();      public Move()      { @@ -151,8 +160,59 @@ public class Move extends Path implements Iterable<Vector3>      }      @Override +    @SuppressWarnings("unchecked")      public Iterator<Vector3> iterator()      { -        return new PathIterator(pawn, from, to, orientation, tiles); +        this.i = 0; +        this.s = tiles.size(); +        this.t = from; +        this.r = (from == to); +        this.o = pawn.getOrientation(); +        this.v.set(pawn.getPosition().x, pawn.getPosition().y, o.r()); +        return (Iterator<Vector3>) this; +    } + +    @Override +    public boolean hasNext() +    { +        if ((r || (i > s)) && (o == orientation)) +            return false; +        return true; +    } + +    @Override +    public Vector3 next() +    { +        if (!hasNext()) +            throw new java.util.NoSuchElementException(); + +        if (r || (i > s)) { +            v.z = orientation.r(); +            o = orientation; +            return v; +        } +        Tile nextTile; +        if (i < s) +            nextTile = tiles.get(i); +        else +            nextTile = to; +        Orientation nextO = Orientation.fromMove(t.col, t.row, nextTile.col, nextTile.row); +        if (nextO != o) { +            v.z = nextO.r(); +            o = nextO; +            return v; +        } +        pawn.getPosAt(nextTile, pos); +        v.x = pos.x; +        v.y = pos.y; +        t = nextTile; +        i += 1; +        return v; +    } + +    @Override +    public void remove() +    { +        throw new UnsupportedOperationException();      }  } diff --git a/core/src/ch/asynk/rustanddust/engine/PathIterator.java b/core/src/ch/asynk/rustanddust/engine/PathIterator.java deleted file mode 100644 index 099c65e..0000000 --- a/core/src/ch/asynk/rustanddust/engine/PathIterator.java +++ /dev/null @@ -1,80 +0,0 @@ -package ch.asynk.rustanddust.engine; - -import java.util.List; -import java.util.Iterator; - -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.math.Vector3; - -public class PathIterator implements Iterator<Vector3> -{ -    private Pawn pawn; -    private boolean rotation; -    private Tile to; -    private Orientation o; -    private Orientation orientation; -    private Tile tile; -    private Vector2 pos = new Vector2(); -    private Vector3 v = new Vector3(); -    private int i; -    private int s; -    private List<Tile> path; - -    public PathIterator(Pawn pawn, Tile from, Tile to, Orientation orientation, List<Tile> path) -    { -        this.pawn = pawn; -        this.to = to; -        this.tile = from; -        this.rotation = (from == to); -        this.orientation = orientation; -        this.path = path; -        this.o = pawn.getOrientation(); -        this.v.set(pawn.getPosition().x, pawn.getPosition().y, o.r()); -        this.i = 0; -        this.s = path.size(); -    } - -    @Override -    public boolean hasNext() -    { -        if ((rotation || (i > s)) && (o == orientation)) -            return false; -        return true; -    } - -    @Override -    public Vector3 next() -    { -        if (!hasNext()) -            throw new java.util.NoSuchElementException(); - -        if (rotation || (i > s)) { -            v.z = orientation.r(); -            o = orientation; -            return v; -        } -        Tile nextTile; -        if (i < s) -            nextTile = path.get(i); -        else -            nextTile = to; -        Orientation nextO = Orientation.fromMove(tile.col, tile.row, nextTile.col, nextTile.row); -        if (nextO != o) { -            v.z = nextO.r(); -            o = nextO; -            return v; -        } -        pawn.getPosAt(nextTile, pos); -        v.x = pos.x; -        v.y = pos.y; -        tile = nextTile; -        i += 1; -        return v; -    } - -    @Override -    public void remove() -    { -        throw new UnsupportedOperationException(); -    } -} | 
