1
0
forked from sent/waves
waves/public/assets/g/wbwwb/js/scenes/Act_I.js
2025-04-09 17:11:14 -05:00

220 lines
5.5 KiB
JavaScript

/*****************************
ACT I: THE SETUP
1. Hat guy
2. Lovers
// then let's start escalating...
******************************/
function Stage_Start(self){
// Create Peeps
self.world.clearPeeps();
self.world.addBalancedPeeps(20);
}
function Stage_Hat(self){
// A Hat Guy
var hat = new HatPeep(self);
self.world.addPeep(hat);
// Director
self.director.callbacks = {
takePhoto: function(d){
// DECLARATIVE
d.tryChyron(function(d){
var p = d.photoData;
var caught = d.caught({
hat: {_CLASS_:"HatPeep"}
});
if(caught.hat){
p.audience = 3;
p.caughtHat = caught.hat;
d.chyron = "OOH NICE HAT";
return true;
}
return false;
}).otherwise(_chyPeeps);
},
movePhoto: function(d){
d.audience_movePhoto();
},
cutToTV: function(d){
// If you did indeed catch a hat peep...
var p = d.photoData;
if(p.caughtHat){
self.world.addBalancedPeeps(1); // Add with moar!
d.audience_cutToTV(function(peep){
peep.wearHat();
}); // make all viewers wear HATS!
p.caughtHat.kill(); // Get rid of hat
Stage_Lovers(self); // Next stage
}else{
d.audience_cutToTV();
}
}
};
}
function Stage_Lovers(self){
// LOVERS
var lover1 = new LoverPeep(self);
lover1.setType("circle");
var lover2 = new LoverPeep(self);
lover2.setType("square");
lover2.follow(lover1);
self.world.addPeep(lover1);
self.world.addPeep(lover2);
// Director
self.director.callbacks = {
takePhoto: function(d){
// MODULAR & DECLARATIVE
d.tryChyron(_chyLovers)
.otherwise(_chyHats)
.otherwise(_chyPeeps);
},
movePhoto: function(d){
d.audience_movePhoto();
},
cutToTV: function(d){
// MODULAR & DECLARATIVE
d.tryCut2TV(_cutLovers)
.otherwise(_cutHats)
.otherwise(_cutPeeps);
// And whatever happens, just go to the next stage
// ACT II!!!
Stage_Screamer(self);
}
};
}
///////////////////////////////////////
///////////////////////////////////////
////// DECLARATIVE CHYRON MODULES /////
///////////////////////////////////////
///////////////////////////////////////
function _chyLovers(d){
var p = d.photoData;
var caught = d.caught({
lover: {_CLASS_:"LoverPeep"}
});
if(caught.lover){
if(caught.lover.isEmbarrassed){
d.chyron = "yeah git on outta here";
}else{
p.caughtLovers = true;
p.forceChyron = true;
d.chyron = "GROSS, GO GET A ROOM";
}
return true;
}
return false;
}
function _chyHats(d){
var p = d.photoData;
var caught = d.caught({
hat: {_CLASS_:"NormalPeep", wearingHat:true}
});
if(caught.hat){
p.audience = 1;
p.caughtHat = true;
d.chyron = "nvm hats aren't cool anymore";
return true;
}
return false;
}
function _chyPeeps(d){
var p = d.photoData;
if(d.scene.camera.isOverTV(true)){
d.chyron = "A TV... ON TV!";
}else{
var caught = d.caught({
peeps: {_CLASS_:"NormalPeep", returnAll:true},
crickets: {_CLASS_:"Cricket", returnAll:true}
});
if(caught.crickets.length>0){
p.CAUGHT_A_CRICKET = true;
if(caught.crickets.length==1){
d.chyron = "LIL' CRICKY <3";
}else{
d.chyron = "okay that's too many crickets";
}
}else if(caught.peeps.length>0){
if(caught.peeps.length==1){
d.chyron = "just a normal peep";
}else{
d.chyron = "just some normal peeps";
}
}else{
p.ITS_NOTHING = true;
d.chyron = "WOWWEE, IT'S NOTHING";
}
}
return true;
}
///////////////////////////////////////
///////////////////////////////////////
///// DECLARATIVE CUTTING MODULES /////
///////////////////////////////////////
///////////////////////////////////////
function _cutLovers(d){
var p = d.photoData;
if(p.caughtLovers){
// Crickets
d.audience_cutToTV();
// MAKE LOVERS EMBARRASSED
d.scene.world.peeps.filter(function(peep){
return peep._CLASS_=="LoverPeep";
}).forEach(function(lover){
lover.makeEmbarrassed();
});
return true;
}else{
return false;
}
}
function _cutHats(d){
var p = d.photoData;
if(p.caughtHat){
// Only get the hat-wearers, make 'em take off the hat.
d.audience_cutToTV(
function(peep){ peep.takeOffHat(); },
function(peep){ return peep.wearingHat; }
);
return true;
}else{
// And if not, have them decrease by 1 each time anyway.
var hatPeeps = d.scene.world.peeps.slice(0).filter(function(peep){
return peep.wearingHat;
});
if(hatPeeps.length>0){
var randomIndex = Math.floor(Math.random()*hatPeeps.length);
hatPeeps[randomIndex].takeOffHat(true);
}
return false;
}
}
function _cutPeeps(d){
d.audience_cutToTV();
return true;
}