-
Notifications
You must be signed in to change notification settings - Fork 0
/
powerUp.js
129 lines (102 loc) · 2.33 KB
/
powerUp.js
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
//powers enum
powerUpType = {
SLOW : 0,
HALF : 1,
CRUISE : 2
}
var cruiseControl=false;
var t = null;
var PowerUp = (function () {
function PowerUp(data) {
this.position = data.position;
this.score = 100;
this.type = pickPower();
this.rotation = 0;
this.hide = hide;
this.show = show;
this.endCruise = endCruise;
}
PowerUp.prototype.draw = function() {
mvPushMatrix();
mat4.translate(mvMatrix, this.position);
mat4.rotate(mvMatrix, this.rotation, [1,1,0.5]);
drawCube(crateTex);
mvPopMatrix();
}
PowerUp.prototype.animate = function (elapsed) {
//spin the crate
this.rotation += elapsed;
//if snake gets powerup
if (hasCollided(head.position,this.position, 2)){
score += this.score;
updateScore();
this.hide();
addToConsole("powerUp:");
//handle the powerup
switch(this.type){
case powerUpType.SLOW:
speed = speed*0.75;
addToConsole("SNAKE SLOWED");
break;
case powerUpType.HALF:
var i = snake.length/2;
while(i>=1){
snake.pop();
i--;
}
addToConsole("SNAKE HALVED");
break;
case powerUpType.CRUISE:
cruise();
addToConsole("CRUISE CONTROL");
break;
default:
console.log(this.type);
}
}
}
//takes crate off screen for 10s
function hide(){
this.position = vec3.create([40,40,40]);
if(t==null){
t = setTimeout("powerUp.show()", 10000);
}
}
//moves to new place, with a new power
function show(){
//move to a new random position
this.position = vec3.create([28 - Math.random()*56,28 - Math.random()*56,28 - Math.random()*56]);
this.type = pickPower();
t = setTimeout("powerUp.hide()", 10000);
t = null;
}
//sets cruise to true (effects head.animate)
function cruise(){
cruiseControl = true;
setTimeout("powerUp.endCruise()", 5000);
}
//ends cruise
function endCruise(){
cruiseControl = false;
addToConsole("CRUISE CONTROL OVER");
}
//return a random power
function pickPower(){
var i = Math.floor(Math.random()*Object.keys(powerUpType).length);
switch (i){
case 0:
return powerUpType.SLOW;
break;
case 1:
return powerUpType.HALF;
break;
case 2:
return powerUpType.CRUISE;
break;
default:
console.log(i);
break;
}
}
return PowerUp;
}());