-
Notifications
You must be signed in to change notification settings - Fork 0
/
WormView.pde
114 lines (97 loc) · 2.93 KB
/
WormView.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
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
public class WormView extends Animatable {
private Direction _direction;
private int _burnStartTime;
private boolean _move, _flying, _burning;
private boolean _reachedTree;
private NutrientDropView _dropView;
private PImage _image;
WormView(int x, int y, Direction direction) { //<>//
super(x, y, 89, 25); //<>//
_direction = direction;
_move = false;
_reachedTree = false;
_burnStartTime = 0;
_dropView = new NutrientDropView(width/2+25, y+10);
String directionString = "";
if (direction == Direction.RIGHT) {
directionString = "right";
addLinearAnimation("fly_out", -89, -25, 0.7);
} else {
directionString = "left";
addLinearAnimation("fly_out", width, -25, 0.7);
}
_image = loadImage("images/worm_" + directionString +"_0.png");
String[] fileNames = {
"images/worm_" + directionString + "_0.png",
"images/worm_" + directionString + "_1.png"
};
int[] indices = { 0, 1 };
addFrameAnimation("move", fileNames, indices, 0.4);
fileNames = new String[]{
"images/worm_" + directionString + "_burn_0.png",
"images/worm_" + directionString + "_burn_1.png"
};
indices = new int[]{ 0, 1 };
addFrameAnimation("fire", fileNames, indices, 0.4);
}
@Override
void start(String id) {
if (!_burning) {
super.start(id);
_flying = id.equals("fly_out");
_burning = id.equals("fire");
if (_burning) {
_burnStartTime = millis();
}
_move = id.equals("move");
}
}
void reset() {
if (_direction == Direction.RIGHT) {
setPosition(-89, height/8*5 + (int)random(25));
} else {
setPosition(width, height/8*5 + (int)random(25));
}
_dropView.setPosition(width/2+_dropView.getDimensions().x/2, getPosition().y+25);
_reachedTree = false;
_move = _flying = _burning = false;
}
@Override
void stop() {
super.stop();
if (_flying || _burning) reset();
_move = false;
}
boolean reachedTree() { return _reachedTree; }
boolean isMoving() { return _move; }
boolean isOnFire() { return _burning; }
NutrientDropView getDropView() { return _dropView; }
void render() {
if (_flying) {
image(_image, getPosition().x, getPosition().y);
_image.resize(89, 25);
}
super.render();
if (_burning && (millis()-_burnStartTime) > 3000) {
stop();
}
if (!_reachedTree && _move) {
if (_direction == Direction.RIGHT) {
if (getPosition().x > width/2 - getDimensions().x) {
_reachedTree = true;
_dropView.start("drop");
} else {
setPosition(getPosition().x+1.25, getPosition().y);
}
} else {
if (getPosition().x < width/2) {
_reachedTree = true;
_dropView.start("drop");
} else {
setPosition(getPosition().x-1.25, getPosition().y);
}
}
}
}
}
public enum Direction { LEFT, RIGHT }