forked from sent/waves
171 lines
3.9 KiB
JavaScript
171 lines
3.9 KiB
JavaScript
Game.addToManifest({
|
|
|
|
hangry: "sprites/peeps/hangry.json",
|
|
|
|
scream: "sounds/scream.mp3"
|
|
|
|
});
|
|
|
|
/****
|
|
|
|
FRAMES:
|
|
00-09: walk loop
|
|
10-20: shout (14-19 as 2ndary loop)
|
|
|
|
****/
|
|
|
|
function CrazyPeep(scene){
|
|
|
|
var self = this;
|
|
Peep.apply(self, [scene]);
|
|
self._CLASS_ = "CrazyPeep";
|
|
|
|
// MAD SPRITE
|
|
var g = self.graphics;
|
|
self.bodyMC = self.addMovieClip("hangry");
|
|
self.bodyMC.anchor.x = 0.33; // not quite
|
|
|
|
// STARTING POS & DIRECTION
|
|
self.x = 1200;
|
|
self.y = 330;
|
|
self.direction = Math.PI;
|
|
self.loop = false;
|
|
|
|
// GRACE PERIODS FOR YELLIN'
|
|
self.metaGracePeriod = _s(BEAT*3.5);
|
|
self.wanderGracePeriod = _s(2);
|
|
self.gracePeriod = _s(4.5);
|
|
|
|
// WANDERING
|
|
self.wander = 0;
|
|
self.changeWander = function(){
|
|
self.wander = Math.random()*0.1-0.05;
|
|
};
|
|
self.callbacks.update = function(){
|
|
|
|
// NOPE
|
|
if(self.metaGracePeriod>0){
|
|
self.metaGracePeriod--;
|
|
if(self.metaGracePeriod==0){
|
|
self.callbacks.startWalking();
|
|
}
|
|
return; // NO MORE.
|
|
}
|
|
|
|
// Grace Period
|
|
if(self.gracePeriod>0){
|
|
self.gracePeriod--;
|
|
}
|
|
if(self.wanderGracePeriod>0){
|
|
self.wanderGracePeriod--;
|
|
}
|
|
|
|
// Animate on doubles
|
|
doubles = (doubles+1)%2;
|
|
|
|
// Wander around
|
|
if(self.wanderGracePeriod<=0){
|
|
self.direction += self.wander;
|
|
if(Math.random()<0.05) self.changeWander();
|
|
}
|
|
|
|
// STAY WITHIN GAME FRAME
|
|
if(self.wanderGracePeriod<=0){
|
|
self.stayWithinRect({
|
|
l:100, r:860, t:100, b:480
|
|
},0.15);
|
|
}
|
|
|
|
// BUMP the walking peeps I'm close to.
|
|
if(self.gracePeriod<=0){
|
|
var closeTo = self.touchingPeeps(50, function(peep){
|
|
return peep.isWalking;
|
|
});
|
|
if(closeTo.length>0 && self.isWalking){
|
|
|
|
// STOP & SHOUT
|
|
self.isWalking = false;
|
|
self.bodyMC.gotoAndStop(10);
|
|
loopScreaming = 2;
|
|
self.direction += Math.PI;
|
|
|
|
// AHHHHH
|
|
Game.sounds.scream.play();
|
|
|
|
// Grace Period
|
|
self.gracePeriod = _s(1);
|
|
|
|
// SHOCK 'EM
|
|
closeTo.forEach(function(other){
|
|
if(!other.isWalking) return;
|
|
other.vel.x = self.flip*10;
|
|
other.flip = -1*self.flip;
|
|
other.beShocked();
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
};
|
|
self.callbacks.startWalking = function(){
|
|
self.speed = 2;
|
|
};
|
|
self.speed = 0;
|
|
|
|
// Animate on doubles
|
|
var doubles = 0;
|
|
var loopScreaming = -1;
|
|
|
|
// WEIRD WALK
|
|
self.walkAnim = function(){
|
|
|
|
// Hop & flip
|
|
self.hop += self.speed/50;
|
|
if(self.hop>1) self.hop--;
|
|
self.flip = (self.vel.x<0) ? -1 : 1;
|
|
|
|
// Hop up & down
|
|
var t = self.hop*Math.PI;
|
|
g.pivot.y = Math.abs(Math.sin(t))*20;
|
|
|
|
// FRAMES: MANUALLY
|
|
if(doubles==0){
|
|
var nextFrame = self.bodyMC.currentFrame+1;
|
|
if(nextFrame>9) nextFrame=0;
|
|
self.bodyMC.gotoAndStop(nextFrame);
|
|
}
|
|
|
|
};
|
|
|
|
// SHOUT STANDING
|
|
self.standAnim = function(){
|
|
|
|
g.rotation = 0;
|
|
g.pivot.y = 0;
|
|
|
|
// FRAMES: MANUALLY
|
|
if(doubles==0){
|
|
var nextFrame = self.bodyMC.currentFrame+1;
|
|
if(loopScreaming>0){
|
|
if(nextFrame>19){
|
|
nextFrame=16;
|
|
loopScreaming--;
|
|
}
|
|
}else{
|
|
if(nextFrame>20){
|
|
nextFrame=0;
|
|
self.isWalking = true;
|
|
loopScreaming--;
|
|
}
|
|
}
|
|
self.bodyMC.gotoAndStop(nextFrame);
|
|
}
|
|
|
|
};
|
|
|
|
// IS SCREAMING?
|
|
self.isScreaming = function(){
|
|
return(loopScreaming>=0);
|
|
};
|
|
|
|
} |