1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
package ch.asynk.rustanddust;
import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
import ch.asynk.rustanddust.engine.Pawn;
import ch.asynk.rustanddust.engine.HeadedPawn;
import ch.asynk.rustanddust.engine.Tile;
import ch.asynk.rustanddust.engine.Board;
import ch.asynk.rustanddust.engine.Orientation;
import ch.asynk.rustanddust.engine.SearchBoard;
import ch.asynk.rustanddust.engine.PathBuilder;
public class Helpers
{
public static class FakePawn extends HeadedPawn
{
@Override public int getMovementPoints() { return 3; }
@Override public int getRoadMarchBonus() { return 1; }
@Override public int getFlankSides() { return orientation.getBackSides(); }
@Override public int getAngleOfAttack() { return orientation.getFrontSides(); }
@Override public int getDefense(Tile tile) { return 8; }
@Override public int getEngagementRangeFrom(Tile tile) { return 3; }
@Override public boolean isA(PawnId id) { return true; }
@Override public boolean isA(PawnType type) { return true; }
@Override public boolean isHq() { return true; }
@Override public boolean isHqOf(Pawn other) { return true; }
@Override public boolean isUnit() { return true; }
@Override public boolean isHardTarget() { return true; }
@Override public boolean isEnemy(Pawn other) { return true; }
@Override public boolean canMove() { return true; }
@Override public boolean canRotate() { return true; }
@Override public boolean canEngage() { return true; }
@Override public boolean canEngage(Pawn other) { return true; }
@Override public boolean canAssistEngagementWithoutLos() { return true; }
@Override public void move() { }
@Override public void engage() { }
@Override public void reset() { }
@Override public void revertLastMove() { }
@Override public float getWidth() { return 24.0f; }
@Override public float getHeight() { return 24.0f; }
@Override public void setPosition(float x, float y, float z) { }
public void setOrientation(Orientation o) { this.orientation = o; }
}
public static class FakeTile extends Tile
{
public boolean offMap;
public boolean blockLineOfSight;
public FakeTile(int col, int row)
{
super(col, row);
offMap = false;
blockLineOfSight = false;
}
public FakeTile(int col, int row, boolean offMap)
{
super(col, row);
this.offMap = offMap;
}
@Override public boolean isOffMap()
{
return offMap;
}
@Override public int exitCost() { return 1; }
@Override public int costFrom(Pawn pawn, Orientation side) { return 1; }
@Override public int defense() { return 0; }
@Override public boolean isA(TileTerrain terrain) { return true; }
@Override public boolean road(Orientation side) { return false; }
@Override public boolean atLeastOneMove(Pawn pawn) { return true; }
@Override public boolean blockLineOfSightFrom(Tile from) { return blockLineOfSight; }
public void setBlockLineOfSight(boolean block) { blockLineOfSight = block; }
}
public static class FakeSearchBoard extends SearchBoard
{
public FakeSearchBoard(Board b, int cols, int rows)
{
super(b, cols, rows);
}
public int distance(int col0, int row0, int col1, int row1)
{
return distance(getNode(col0, row0), getNode(col1, row1));
}
public Node get(int col, int row) { return getNode(col, row); }
}
public static class FakeBoard extends Board
{
public FakePawn pawn;
public FakeTile fakeTiles[];
public PathBuilder pathBuilder;
public FakeBoard(int cols, int rows)
{
super(cols, rows);
fakeTiles = new FakeTile[(cols + 2) * (rows + 2)];
int idx = 0;
for (int i = -1; i < (rows + 1); i++) {
for ( int j = -1; j < (cols + 1); j ++) {
boolean offmap = ((j < 0) || (i < 0) || (j >= cols) || (i >= rows));
fakeTiles[idx] = new FakeTile((j + ((i + 1) / 2)), i, offmap);
idx += 1;
}
}
fakeTiles[ 36 - 2].offMap = true;
fakeTiles[ 60 - 2].offMap = true;
fakeTiles[ 84 - 2].offMap = true;
fakeTiles[108 - 2].offMap = true;
pawn = new FakePawn();
pathBuilder = new PathBuilder(this, 10, 20, 5, 10);
}
@Override public void animationsOver() {}
@Override
public Tile getTile(int col, int row)
{
int i = getTileOffset(col, row);
if (i < 0)
return null;
return fakeTiles[i];
}
public int buildPathBuilder(int x0, int y0, int x1, int y1)
{
pathBuilder.init(pawn, getTile(x0, y0));
return pathBuilder.build(getTile(x1, y1));
}
public int togglePoint(int x, int y)
{
return pathBuilder.toggleCtrlTile(getTile(x, y));
}
}
}
|