You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

655 lines
21 KiB

/* Screens, inheritance would be nice */
function LoadingScreen( stage, gameState ){
var that = this;
this.lastPercent = -1;
this.picture = new createjs.Bitmap( "res/screens/LoadingScreen/Loading-Title.png" );
this.pictureFront = new createjs.Bitmap( "res/screens/LoadingScreen/PanFront.png" );
this.cooking = new createjs.Bitmap( "res/screens/LoadingScreen/TextCooking.png" );
this.done = new createjs.Bitmap( "res/screens/LoadingScreen/TextDone.png" );
this.turkeyState = [ new createjs.Bitmap( "res/screens/LoadingScreen/Turkey0.png" ),
new createjs.Bitmap( "res/screens/LoadingScreen/Turkey25.png" ),
new createjs.Bitmap( "res/screens/LoadingScreen/Turkey50.png" ),
new createjs.Bitmap( "res/screens/LoadingScreen/Turkey75.png" ),
new createjs.Bitmap( "res/screens/LoadingScreen/TurkeyDone.png" ) ];
this.done.alpha= 0;
stage.addChild( this.picture );
stage.addChild( this.cooking );
stage.addChild( this.turkeyState[0] );
var textContent = new createjs.Text( "0 %", "25px Arial", "black" );
textContent.x = 500;
textContent.y = 20;
stage.addChild( textContent);
gameState.pubsub.subscribe( "Load", function(percent){
textContent.text = (percent * 25).toFixed(2) + " %";
var wholeNum = Math.floor(percent);
if( that.lastPercent != percent){
that.lastPercent = percent;
stage.addChild( that.turkeyState[wholeNum] );
stage.addChild( that.pictureFront );
}
//If we're still on image one, don't fade it out, it's the base image!
if( wholeNum != 0 )
that.turkeyState[wholeNum].alpha = percent.toFixed(2) - wholeNum;
// Done!
if( wholeNum == 4 ){
that.turkeyState[4].alpha = 1;
that.cooking.alpha=0;
that.done.alpha = 1;
that.done.addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; } );
that.done.addEventListener( "mouseout", function(){ document.body.style.cursor='default'; } );
that.done.addEventListener( "click", function(){ gameState.pubsub.publish("SwitchScreen", "MainScreen"); });
that.turkeyState[4].addEventListener( "mouseover", function(){ document.body.style.cursor='pointer'; } );
that.turkeyState[4].addEventListener( "mouseout", function(){ document.body.style.cursor='default'; } );
that.turkeyState[4].addEventListener( "click", function(){ gameState.pubsub.publish("SwitchScreen", "MainScreen"); });
}
});
stage.addChild( this.done );
stage.addChild( this.pictureFront );
return {
blit : function(){
}
}
}
function MainScreen( stage, gameState ){
var that = this;
this.background = new createjs.Bitmap( "res/screens/MainScreen/Main-Screen.png" );
stage.addChild( this.background );
var turkeyAnimations = { peck:[14,24,"peck"], ruffle:[0,13,"ruffle"], stare:[25,35,"stare"] };
var data = {
images: ["res/screens/MainScreen/TurkeySprite.png"],
frames: { width:400, height:350 },
animations: turkeyAnimations
};
var spriteSheet = new createjs.SpriteSheet(data);
var animation = new createjs.Sprite(spriteSheet, "stare");
animation.x = 140;
animation.y = 210;
animation.addEventListener("tick", handleTick);
function handleTick(event){
if ( turkeyAnimations[event.currentTarget.currentAnimation][1] == event.currentTarget.currentFrame ){
event.currentTarget.paused = true;
}
// Click happened.
}
stage.addChild(animation);
this.grassLayer = new createjs.Bitmap( "res/screens/MainScreen/Grass.png" );
this.grassLayer.x = -60;
stage.addChild( this.grassLayer );
// buttons info/credits/start
new ImgButton( stage, gameState, 571,527, "res/screens/MainScreen/ButtonStart.png", "res/screens/MainScreen/ButtonStart.png","SwitchScreen", "DifficultyScreen", "Click" );
new ImgButton( stage, gameState, 17,470, "res/screens/MainScreen/ButtonHelp.png", "res/screens/MainScreen/ButtonHelp.png",null, null, "Click", function(){ gameState.pubsub.publish("ShowHelp",""); } );
new ImgButton( stage, gameState, 17,527, "res/screens/MainScreen/ButtonCredits.png", "res/screens/MainScreen/ButtonCredits.png","SwitchScreen", "CreditsScreen", "Click" );
gameState.pubsub.publish( "BackgroundLoop", {name:"TitleMusic", pos:5650, volume:0.7} );
this.uiElems = [];
return {
blit : function(){
if( createjs.Ticker.getTicks() %50 == 0 ){
animation.gotoAndPlay(["peck", "ruffle", "stare"][UtilityFunctions.randRange(0,2)]);
}
// Draw all the uiElements
for( var index in that.uiElems ){
that.uiElems[ index ].tick();
}
}
}
//start button
}
function DifficultyScreen( stage, gameState ){
var that = this;
this.background = new createjs.Bitmap( "res/screens/DifficultyScreen/Difficulty-Selection.png" );
stage.addChild( this.background );
var turkeyAnimations = { peck:[14,24,"peck"], ruffle:[0,13,"ruffle"], stare:[25,35,"stare"] };
var data = {
images: ["res/screens/MainScreen/TurkeySprite.png"],
frames: { width:400, height:350 },
animations: turkeyAnimations
};
var spriteSheet = new createjs.SpriteSheet(data);
var animation = new createjs.Sprite(spriteSheet, "stare");
animation.x = 140;
animation.y = 210;
animation.addEventListener("tick", handleTick);
function handleTick(event) {
if ( turkeyAnimations[event.currentTarget.currentAnimation][1] == event.currentTarget.currentFrame ){
event.currentTarget.paused = true;
}
// Click happened.
}
stage.addChild(animation);
this.grassLayer = new createjs.Bitmap( "res/screens/MainScreen/Grass.png" );
this.grassLayer.x = -60;
stage.addChild( this.grassLayer );
// Difficulty selection UI
this.buttonsAndText = new createjs.Bitmap( "res/screens/DifficultyScreen/ButtonsandText.png" );
stage.addChild( this.buttonsAndText );
this.maleSelection = new createjs.Bitmap( "res/screens/DifficultyScreen/ButtonMale.png" );
stage.addChild( this.maleSelection );
this.femaleSelection = new createjs.Bitmap( "res/screens/DifficultyScreen/ButtonFemale.png" );
this.femaleSelection.alpha = 0;
stage.addChild( this.femaleSelection );
var nameInput = new createjs.Text( "", "48px Arial", "black" );
nameInput.x = 47;
nameInput.y = 85;
nameInput.lineWidth = 175;
stage.addChild( nameInput );
// handle keyboard typing
document.onkeyup = function(event){
// keycode
var keynum = 48;
if(window.event){ // IE
keynum = event.keyCode;
}
else{
if(event.which){ // Netscape/Firefox/Opera
keynum = event.which;
}
}
if( keynum != 8 && keynum < 91 && keynum > 47 && nameInput.text.length < 22 ){
nameInput.text += String.fromCharCode(keynum);
gameState.name = nameInput.text;
}
};
// Backspace gets special treatment
document.onkeydown = function(event){
var keynum = 0;
if(window.event){ // IE
keynum = event.keyCode;
}
else{
if(event.which){ // Netscape/Firefox/Opera
keynum = event.which;
}
}
if(keynum == 8 && nameInput.text.length > 0 ){
nameInput.text = nameInput.text.substr(0, nameInput.text.length-1);
gameState.name = nameInput.text;
}
event.preventDefault();
}
// Easy/Hard Button
stage.addChild( new Button( stage, gameState, 500, 235, 100, 55, "ChangeGender", "Male" ) );
stage.addChild( new Button( stage, gameState, 500, 300, 100, 55, "ChangeGender", "Female" ) );
stage.addChild( new Button( stage, gameState, 503, 370, 200, 55, null, null, function(){ document.onkeyup = function(){}; gameState.hard = false; gameState.gameStarted = true; gameState.hardcoreModifier=1; gameState.pubsub.publish("SwitchScreen", "KitchenScreen"); } ) );
stage.addChild( new Button( stage, gameState, 500, 495, 205, 55, null, null, function(){ document.onkeydown = function(){}; gameState.hard = true; gameState.gameStarted = true; gameState.hardcoreModifier=20; gameState.pubsub.publish("SwitchScreen", "KitchenScreen"); } ) );
stage.addChild( new Button( stage, gameState, 35, 495, 85, 55, "SwitchScreen", "MainScreen" ) );
gameState.pubsub.subscribe( "ChangeGender", function(gender){
gameState.gender=gender;
if( gender == "Male" ){
that.maleSelection.alpha = 1;
that.femaleSelection.alpha = 0;
gameState.pronoun = "he";
}else{
that.maleSelection.alpha = 0;
that.femaleSelection.alpha = 1;
gameState.pronoun = "she";
}
})
return {
blit : function(){
if( createjs.Ticker.getTicks() %50 == 0 ){
animation.gotoAndPlay(["peck", "ruffle", "stare"][UtilityFunctions.randRange(0,2)]);
}
// Draw all the uiElements
for( var index in that.uiElems ){
that.uiElems[ index ].tick();
}
}
}
}
function KitchenScreen( stage, gameState ){
var that = this;
// Fade out any other sounds
gameState.pubsub.publish( "FadeOut", "" );
//gameState.pubsub.publish( "BackgroundLoop", {name:"Sizzle", pos:0, volume:0.5} );
this.uiElems = [];
this.uiElems.push( new WindowUI( stage, gameState ) );
this.background = new createjs.Bitmap( "res/screens/KitchenScreen/KitchenScreen.png" );
stage.addChild( this.background );
if(DEBUG) console.log(gameState.purchasedItems);
if(DEBUG) console.log("KitchenScreen");
for(var i in gameState.purchasedItems ){
if(DEBUG) console.log(gameState.purchasedItems);
gameState.purchasedItems[i].draw( stage );
}
this.uiElems.push( gameState.ovenUI ? gameState.ovenUI.render() : ( gameState.ovenUI = new OvenUI( stage, gameState ) ).render() );
this.uiElems.push( new ClockUI( stage, gameState ) );
if( gameState.alarmBought )
this.uiElems.push( new AlarmUI(stage, gameState) );
stage.addChild( new Button( stage, gameState, 14, 17, 73, 45, null,null, function(){ gameState.pubsub.publish("ShowHelp","");} ) );
new ImgButton( stage, gameState, 0,0, "res/screens/KitchenScreen/StoreBrochure.png", "res/screens/KitchenScreen/StoreBrochureGlow.png", null,null, "Click", function(){
gameState.pubsub.publish("SwitchScreen", "MarketScreen");
gameState.storeVisits++;
} );
// If player did not buy a turkey, tell them
if( !gameState.turkeyBought ){
gameState.pubsub.publish( "ShowDialog", {seq:"KitchenInitial", autoAdvance:false} );
}
return {
blit : function(){
// Draw all the uiElements
for( var index in that.uiElems ){
that.uiElems[ index ].tick();
}
}
}
}
function MarketScreen( stage, gameState ){
var that = this;
this.background = new createjs.Bitmap( "res/screens/MarketScreen/MarketScreen.png" );
var price = new createjs.Text( "", "16px Arial", "black" );
price.x = 120;
price.y = 560;
var wallet = new createjs.Text( "$" + parseFloat(gameState.wallet).toFixed(2), "20px Arial", "black" );
wallet.x = 725;
wallet.y = 550;
var walletTag = new createjs.Bitmap("res/items/Wallet.png");
walletTag.x = 670;
walletTag.y = 535;
var clipboardImg = new createjs.Bitmap("res/items/Clipboard.png");
clipboardImg.x = 5;
clipboardImg.y = 315;
var clipboardTitle = new createjs.Text( "Shopping List", "18px Arial", "black" );
clipboardTitle.x = 25;
clipboardTitle.y = 385;
clipboardTitle.lineWidth = 175;
var clipboardText = new createjs.Text( "Turkey", "16px Arial", "black" );
clipboardText.x = 23;
clipboardText.y = 425;
clipboardText.lineWidth = 173;
var clipboardWeight = new createjs.Text( "", "16px Arial", "black" );
clipboardWeight.x = 120;
clipboardWeight.y = 540;
clipboardWeight.lineWidth = 175;
// Play soundz
gameState.pubsub.publish( "Play", {name:"Entrance", volume:0.3} );
gameState.pubsub.publish( "BackgroundLoop", {name:"MarketMusic", volume:1} );
gameState.pubsub.publish( "BackgroundLoop", {name:"MarketBackgroundSound", volume:0.4} );
stage.addChild(this.background);
stage.addChild(wallet);
stage.addChild(walletTag);
stage.addChild(clipboardImg);
stage.addChild(clipboardTitle);
stage.addChild(clipboardText);
stage.addChild(clipboardWeight);
stage.addChild(price);
this.uiElems = [];
this.uiElems.push( new ImgButton( stage, gameState, 690,0, "res/items/ExitSign.png", "res/items/ExitGlow.png","SwitchScreen", "KitchenScreen", "Click" ) );
var marketItemKeys = Object.keys(gameState.marketItems);
for (var index in marketItemKeys ) {
gameState.marketItems[marketItemKeys[index]].draw( stage );
}
this.topground = new createjs.Bitmap( "res/screens/MarketScreen/MarketTopShelf.png" );
stage.addChild( this.topground );
this.showPrice = function( cost ){
price.text = "$ " + ( cost == NaN ? "" : parseFloat(cost).toFixed(2) );
}
this.clearClipboard = function(){
price.text = "";
clipboardTitle.text = "";
clipboardText.text = "";
clipboardWeight.text = "";
}
this.showDesc = function( desc ){
clipboardTitle.text = desc.title;
clipboardText.text = desc.desc;
if( desc.weight ){
clipboardWeight.text = desc.weight.toFixed(2) + " lbs.";
}
}
this.setWalletAmount = function(newAmount){
wallet.text="$" + ( gameState.wallet=newAmount.toFixed(2) );
}
gameState.pubsub.subscribe("ShowDesc", this.showDesc);
gameState.pubsub.subscribe("ShowPrice", this.showPrice );
gameState.pubsub.subscribe("WalletAmount", this.setWalletAmount);
gameState.pubsub.subscribe("ClearClipboard", this.clearClipboard);
return {
blit : function(){
// Draw all the uiElements
for( var index in that.uiElems ){
that.uiElems[ index ].tick();
}
}
}
}
function ScoreScreen( stage, gameState ){
var that = this;
// All the text for the entries
var totalCookTime = gameState.turkeyCookCounter;
var realTimeElapsed = Date.now() - gameState.startTime;
console.log("total cook time:"+ realTimeElapsed);
var turkeyState = gameState.ovenModel.getTurkeyState();
var totalScore = 0;
var skinScoreChart = {
"raw": -1000,
"undercooked": -100,
"slightly cooked": 75,
"cooked": 500,
"overcooked": 200,
"dry": -300,
"burnt": -500
};
var coreScoreChart = {
"raw": 0,
"undercooked": 125,
"slightly cooked": 600,
"cooked": 1000,
"overcooked": 750,
"dry": 400,
"burnt": 0
};
var typeToMod = {
"Organic Turkey" : 1.03,
"Free Range Turkey" : 1.02,
"Sunny Farms Turkey" : 0.98,
"Pastured Turkey": 1.05,
"General Turkey": 1.00
};
// Optimal Temperature to be served at
this.scoreDistribution= function(inputTemp, layer) {
desiredAverage = 165;
if(layer=="skin") desiredAverage = 260;
variance = 1000; //Std Deviation 31.62
return(Math.exp(-(Math.pow((inputTemp-desiredAverage),2)/(2*variance))))
};
// Temperature Score
var outerTemp = UtilityFunctions.C2F(turkeyState.skin.highest).toFixed(2);
var coreTemp = UtilityFunctions.C2F(turkeyState.core.temp).toFixed(2);
var outerTempScore = that.scoreDistribution( outerTemp, "skin" ) * 200;
var coreTempScore = that.scoreDistribution( coreTemp ) * 200;
totalScore += parseInt(skinScoreChart[ turkeyState.skin.cond[2]]);
totalScore += parseInt(coreScoreChart[ turkeyState.core.cond[2]]);
totalScore += parseInt(outerTempScore.toFixed(0));
totalScore += parseInt(coreTempScore.toFixed(0));
resultsDialogue = [];
if (totalScore>=1800) {
randomDiag = perfect;
}
else if (totalScore>=1400) {
randomDiag = great;
}
else if (totalScore>=1000) {
randomDiag = average;
}
else if (totalScore>=400) {
randomDiag = subPar;
}
else {
randomDiag = terrible;
}
for (var i = 0; i<=5; i++) {
resultsDialogue.push(randomString(randomDiag));
}
messages["end"] = resultsDialogue;
function randomString(stringArray) {
var index = UtilityFunctions.randRange(0, stringArray.length-1);
var stringResult = stringArray[index];
stringArray.splice(index,1);
return (stringResult)
}
gameState.pubsub.publish( "FadeOut", "" );
this.background = new createjs.Bitmap( "res/screens/ScoreScreen/Score-Evaluation-1.png" );
this.background.alpha = 1;
stage.addChild( this.background );
background1 = new createjs.Bitmap( "res/screens/ScoreScreen/Score-Evaluation-2.png" );
background1.alpha = 0;
stage.addChild( background1 );
for (i in gameState.turkeyStates){
gameState.turkeyStates[i].scaleX = gameState.turkeyStates[i].scaleY = 1;
gameState.turkeyStates[i].x = 490;
gameState.turkeyStates[i].y = 110;
stage.addChild(gameState.turkeyStates[i]);
}
gameState.pubsub.publish( "BackgroundLoop", {name:"TitleMusic", pos:5650, volume:0.7} );
gameState.pubsub.publish( "ShowDialog", {seq:"end", autoAdvance:true, endFunc:function(){
background1.alpha=1;
stage.addChild( new Button( stage, gameState, 590, 540, 190, 50, null, null, function(){ document.location.reload(); } ) );
// Cooking stats
var hours = parseInt( totalCookTime / 3600 ) % 24;
var minutes = parseInt( totalCookTime / 60 ) % 60;
var seconds = totalCookTime % 60;
var timeText = ("00"+hours.toFixed(0)).slice(-2) + ":" + ("00"+minutes.toFixed(0)).slice(-2) + ":" + ("00"+seconds.toFixed(0)).slice(-2);
var totalCookTimeText = new createjs.Text( timeText, "20px Arial", "black" );
totalCookTimeText.x = 270;
totalCookTimeText.y = 107;
realTimeElapsed = realTimeElapsed / 1000;
hours = parseInt( realTimeElapsed / 3600 ) % 24;
minutes = parseInt( realTimeElapsed / 60 ) % 60;
seconds = realTimeElapsed % 60;
timeText = ("00"+hours.toFixed(0)).slice(-2) + ":" + ("00"+minutes.toFixed(0)).slice(-2) + ":" + ("00"+seconds.toFixed(0)).slice(-2);
var realtimeElapsedText = new createjs.Text( timeText, "20px Arial", "black" );
realtimeElapsedText.x = 270;
realtimeElapsedText.y = 127;
var ovenOpenedText = new createjs.Text( gameState.ovenOpened, "20px Arial", "black" );
ovenOpenedText.x = 270;
ovenOpenedText.y = 147;
var dialogueHeardText = new createjs.Text( gameState.dialogueHeard, "20px Arial", "black" );
dialogueHeardText.x = 270;
dialogueHeardText.y = 167;
stage.addChild( totalCookTimeText );
stage.addChild( realtimeElapsedText );
stage.addChild( ovenOpenedText );
stage.addChild( dialogueHeardText );
// Cookedness Score
var outerConditionDesc = new createjs.Text( turkeyState.skin.cond[2], "20px Arial", "black" );
outerConditionDesc.x = 150;
outerConditionDesc.y = 320;
var coreConditionDesc = new createjs.Text( turkeyState.core.cond[2], "20px Arial", "black" );
coreConditionDesc.x = 150;
coreConditionDesc.y = 340;
var outerConditionText = new createjs.Text( skinScoreChart[ turkeyState.skin.cond[2] ], "20px Arial", "black" );
outerConditionText.x = 310;
outerConditionText.y = 320;
var coreConditionText = new createjs.Text( coreScoreChart[ turkeyState.core.cond[2] ], "20px Arial", "black" );
coreConditionText.x = 310;
coreConditionText.y = 340;
stage.addChild( coreConditionText );
stage.addChild( outerConditionText );
stage.addChild( coreConditionDesc );
stage.addChild( outerConditionDesc );
// Temperature Score
var outerTemperatureText = new createjs.Text( outerTempScore.toFixed(0), "20px Arial", "black" );
outerTemperatureText.x = 680;
outerTemperatureText.y = 320;
var coreTemperatureText = new createjs.Text( coreTempScore.toFixed(0), "20px Arial", "black" );
coreTemperatureText.x = 680;
coreTemperatureText.y = 340;
var outerTemperatureDesc = new createjs.Text( outerTemp + " F", "20px Arial", "black" );
outerTemperatureDesc.x = 530;
outerTemperatureDesc.y = 320;
var coreTemperatureDesc = new createjs.Text( coreTemp + " F", "20px Arial", "black" );
coreTemperatureDesc.x = 530;
coreTemperatureDesc.y = 340;
stage.addChild( outerTemperatureText );
stage.addChild( coreTemperatureText );
stage.addChild( coreTemperatureDesc );
stage.addChild( outerTemperatureDesc );
// Modifiers
var turkeyMod = typeToMod[gameState.turkeyType];
var turkeyTypeModifierText = new createjs.Text( -1*((1-turkeyMod)*100).toFixed(0) + "%", "20px Arial", "black" );
turkeyTypeModifierText.x = 310;
turkeyTypeModifierText.y = 437;
totalScore *= turkeyMod;
var stuffingTypeModifierText = new createjs.Text( -1*((1-gameState.stuffingTypeModifier)*100).toFixed(0)+"%" , "20px Arial", "black" );
stuffingTypeModifierText.x = 310
stuffingTypeModifierText.y = 457;
totalScore *= gameState.stuffingTypeModifier;
var frillsModifierText = new createjs.Text( "x"+gameState.frillsModifier, "20px Arial", "black" );
frillsModifierText.x = 310
frillsModifierText.y = 477;
totalScore *= gameState.frillsModifier;
var hardcoreModifierText = new createjs.Text( "x"+gameState.hardcoreModifier, "20px Arial", "black" );
hardcoreModifierText.x = 310
hardcoreModifierText.y = 497;
totalScore *= gameState.hardcoreModifier;
var totalText = new createjs.Text( totalScore.toFixed(0), "32px Arial", "black" );
totalText.x = 250;
totalText.y = 550;
stage.addChild( totalText );
stage.addChild( stuffingTypeModifierText );
stage.addChild( turkeyTypeModifierText );
stage.addChild( frillsModifierText );
stage.addChild( hardcoreModifierText );
}} );
return {
blit : function(){}
}
}
function CreditsScreen( stage, gameState ){
var that = this;
this.background = new createjs.Bitmap( "res/screens/HelpCreditsScreen/Credits.png" );
stage.addChild( this.background );
stage.addChild( new Button( stage, gameState, 698, 533, 80, 50, "SwitchScreen", "MainScreen" ) );
this.uiElems = [];
return {
blit : function(){
// Draw all the uiElements
for( var index in that.uiElems ){
that.uiElems[ index ].tick();
}
}
}
//
}