-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArena.pde
66 lines (56 loc) · 2.46 KB
/
Arena.pde
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
import java.awt.Dimension;
final class Arena {
private Rectangle dimensions = new Rectangle();
private Wall[] walls = new Wall[4];
private int wallThickness = 8;
private Arena() {}
void setPosition(int x, int y) {
dimensions.setLocation(x, y);
}
void setSize(int x, int y) {
dimensions.setSize(x, y);
}
Dimension getSize() {
return dimensions.getSize();
}
Wall[] getWalls() {
return walls;
}
void createWalls() {
// Top wall
walls[0] = new Wall(new RectangleCollisionShape(new Rectangle(dimensions.x - wallThickness/2, dimensions.y - wallThickness/2, dimensions.width + wallThickness, wallThickness)));
// Right wall
walls[1] = new Wall(new RectangleCollisionShape(new Rectangle(dimensions.x + dimensions.width - wallThickness/2, dimensions.y - wallThickness/2, wallThickness, dimensions.height + wallThickness)));
// Bottom wall
walls[2] = new Wall(new RectangleCollisionShape(new Rectangle(dimensions.x - wallThickness/2, dimensions.y + dimensions.height - wallThickness/2, dimensions.width + wallThickness, wallThickness)));
// Left wall
walls[3] = new Wall(new RectangleCollisionShape(new Rectangle(dimensions.x - wallThickness/2, dimensions.y - wallThickness/2, wallThickness, dimensions.height + wallThickness)));
}
void draw(PGraphics src) {
// Arena walls
src.stroke(255);
src.strokeWeight(wallThickness);
src.strokeCap(PROJECT);
src.beginDraw();
src.line(dimensions.x, dimensions.y, dimensions.x + dimensions.width, dimensions.y);
src.line(dimensions.x + dimensions.width, dimensions.y, dimensions.x + dimensions.width, dimensions.y + dimensions.height);
src.line(dimensions.x + dimensions.width, dimensions.y + dimensions.height, dimensions.x, dimensions.y + dimensions.height);
src.line(dimensions.x, dimensions.y + dimensions.height, dimensions.x, dimensions.y);
src.strokeWeight(1);
src.endDraw();
// Collision overlay
for (int i=0; i<arena.getWalls().length; i++) {
Wall wall = arena.getWalls()[i];
Point2D.Double drawTranslation = new Point2D.Double(wall.getPosition().x, wall.getPosition().y);
((RectangleCollisionShape)wall.getCollisionShape()).drawOverlay(drawTranslation);
}
}
}
class Wall extends PhysicsObject {
Wall(RectangleCollisionShape collisionShape) {
this.collisionShape = collisionShape;
}
PVector getPosition() {
return new PVector(collisionShape.getBounds().x, collisionShape.getBounds().y);
}
}