waves/public/assets/g/wbwwb/js/peeps/CrazyPeep.js
2025-04-09 17:11:14 -05:00

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);
};
}