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