// Main app class enyo.kind({ name: "FoodChain.App", kind: enyo.Control, classes: "board", components: [ // Card box { name: "glass", classes: "glass" }, { name: "cardbox", classes: "cardbox", components: [] }, // Logo { kind: "Image", src: "images/FoodChain.png", classes: "logo" }, // Game button { name: "LearnGame", kind: "ShadowButton", img: "one", classes: "game-LearnGame", ontap: "playGame", onenter: "showGameDescription", onleave: "hideGameDescription" }, { name: "BuildGame", kind: "ShadowButton", img: "two", classes: "game-BuildGame", ontap: "playGame", onenter: "showGameDescription", onleave: "hideGameDescription" }, { name: "PlayGame", kind: "ShadowButton", img: "three", classes: "game-PlayGame", ontap: "playGame", onenter: "showGameDescription", onleave: "hideGameDescription" }, { kind: "ShadowButton", img: "information", classes: "information", ontap: "showCredits" }, { name: "networkCheck", kind: "FoodChain.NetworkCheck"}, // Popup for game title and description { name: "popup", classes: "game-popup", components: [ { name: "title", classes: "game-title" }, { name: "description", classes: "game-description" } ]}, // End of sound event {kind: "Signals", onEndOfSound: "endOfSound"} ], // Constructor, save home create: function() { this.inherited(arguments); FoodChain.context.home = this; // Start display card timer this.initCardStack(); // Create game description this.$.popup.hide(); this.games = []; this.setLocale(); // Update context, no game playing FoodChain.context.game = ""; FoodChain.context.object = this; // Init soundtrack this.soundtrack = "audio/popcorn"; }, // Localization, changed update cards and description setLocale: function() { // Change card localization if any enyo.forEach(this.$.cardbox.getControls(), function(card) { card.setLocale(); }); }, // Init card stack for the animation initCardStack: function() { // Pick randomly N cards this.cardcount = 0; this.cards = []; var i = 0; while (i < 12) { var index = Math.floor(Math.random()*FoodChain.cards.length); var found = false; for (var j = 0 ; !found && j < this.cards.length-1 ; j++) { if (this.cards[j] == FoodChain.cards[index]) found = true; } if (!found) { this.cards.push(FoodChain.cards[index]); i++; } } }, // Play soundtrack when rendered and restart at end rendered: function() { // Play soundtrack FoodChain.sound.play(this.soundtrack); // Check network this.$.networkCheck.check(); // Create timer for card animation this.createComponent({ name: "timer", kind: "Timer", baseInterval: 1200, onTriggered: "displayCard" }, {owner: this}); }, endOfSound: function(e, s) { if (s.sound == this.soundtrack) FoodChain.sound.play(this.soundtrack); }, // Display card animation displayCard: function() { // All cards displayed if (this.cardcount == this.cards.length) { this.$.cardbox.destroyComponents(); this.$.cardbox.render(); this.initCardStack(); return; } // Display a new card var x = Math.floor(Math.random()*window.innerWidth*0.7); var y = Math.floor(Math.random()*window.innerHeight*0.7); this.$.cardbox.createComponent({ kind: "FoodChain.Card", cardname: this.cards[this.cardcount], x: x, y: y, z: 0}).render(); this.cardcount = this.cardcount + 1; }, // Show/hide game description showGameDescription: function(s) { // Update description this.games["LearnGame"] = { title: __$FC("learn"), description: __$FC("learndesc") }; this.games["BuildGame"] = { title: __$FC("build"), description: __$FC("builddesc") }; this.games["PlayGame"] = { title: __$FC("play"), description: __$FC("playdesc") }; // Show description this.$.title.setContent(this.games[s.name].title+":"); this.$.title.addClass("game-color-"+s.name); this.$.description.setContent(this.games[s.name].description); this.$.description.addClass("game-color-"+s.name); this.$.popup.show(); }, hideGameDescription: function(s) { this.$.title.removeClass("game-color-"+s.name); this.$.description.removeClass("game-color-"+s.name); this.$.popup.hide(); }, // Show credit page showCredits: function() { this.$.timer.stop(); this.removeComponent(this.$.timer); FoodChain.context.object = new FoodChain.Credits().renderInto(document.getElementById("body")); }, // Launch a game playGame: function(s) { // Stop sound this.$.popup.hide(); FoodChain.sound.pause(); this.$.timer.stop(); this.removeComponent(this.$.timer); var level = (s.level === undefined) ? 1 : s.level; // Launch Learn game if (s.name == "LearnGame") { FoodChain.context.object = new FoodChain.LearnGame({level: level}).renderInto(document.getElementById("body")); } // Launch Build game else if (s.name == "BuildGame") { FoodChain.context.object = new FoodChain.BuildGame({level: level}).renderInto(document.getElementById("body")); } // Launch Play game else if (s.name == "PlayGame") { FoodChain.context.object = new FoodChain.PlayGame({level: level}).renderInto(document.getElementById("body")); } }, // Test if database is installed checkDatabase: function(then) { this.$.networkCheck.check(then); }, hasDatabase: function() { return this.$.networkCheck.getConnected(); }, getDatabase: function() { return (this.hasDatabase() ? "" : "http://server.sugarizer.org/activities/FoodChain.activity/"); } });