|
|
- // Utility functions
-
-
- // Force Enyo to process ondragover event
- document.ondragover = enyo.dispatch;
-
-
- // Namespace
- FoodChain = {};
-
- // Game context handling
- FoodChain.context = {
- score: 0,
- game: "",
- level: 0,
- language: "en",
- object: null
- };
- FoodChain.saveContext = function() {
- var datastoreObject = FoodChain.activity.getDatastoreObject();
- var jsonData = JSON.stringify({
- score: FoodChain.context.score,
- game: FoodChain.context.game,
- level: FoodChain.context.level,
- language: l10n.language.code
- });
- datastoreObject.setDataAsText(jsonData);
- datastoreObject.save(function() {
- });
- };
- FoodChain.loadContext = function(callback) {
- var datastoreObject = FoodChain.activity.getDatastoreObject();
- datastoreObject.loadAsText(function (error, metadata, data) {
- var context = JSON.parse(data);
- if (context == null) return;
- if (context.score) FoodChain.context.score = parseInt(context.score);
- if (context.game) FoodChain.context.game = context.game;
- if (context.level) FoodChain.context.level = parseInt(context.level);
- if (context.language) FoodChain.context.language = l10n.language.code = context.language;
- callback();
- });
- };
-
- // Home handling
- FoodChain.goHome = function() {
- if (FoodChain.context.home != null) {
- FoodChain.context.game = "";
- FoodChain.context.home.setLocale()
- FoodChain.context.home.renderInto(document.getElementById("body"));
- }
- };
-
- // Sugar interface
- FoodChain.setLocale = function() {
- document.getElementById("en-button").classList.remove('active');
- document.getElementById("fr-button").classList.remove('active');
- document.getElementById("pt_BR-button").classList.remove('active');
- if (l10n.language.code.indexOf("en") == 0) { document.getElementById("en-button").classList.add('active'); }
- else if (l10n.language.code.indexOf("fr") == 0) { document.getElementById("fr-button").classList.add('active'); }
- else if (l10n.language.code.indexOf("pt_BR") == 0) { document.getElementById("pt_BR-button").classList.add('active'); }
- if (FoodChain.context.object != null)
- FoodChain.context.object.setLocale();
- }
- FoodChain.log = function(msg) {
- console.log(msg);
- };
-
- // Add and remove a class to an element
- FoodChain.addRemoveClass = function(element, toAdd, toRemove) {
- element.removeClass(toRemove);
- element.addClass(toAdd);
- };
-
- // "Old style" sleep function
- FoodChain.sleep = function(delay) {
- var start = new Date().getTime();
- while (new Date().getTime() < start + delay);
- };
-
- // Create a object respecting a condition on a set of object
- FoodChain.createWithCondition = function(create, condition, set) {
- var conditionValue;
- var newObject;
- var time = 0;
- do {
- conditionValue = true;
- newObject = create();
- for (var i = 0; conditionValue && i < set.length ; i++) {
- conditionValue = condition(newObject, set[i]);
- }
- time++;
- } while (!conditionValue && time < 12); // time to avoid infinite or too long loop in very complex situation
- if (!conditionValue)
- FoodChain.log("WARNING: out of pre-requisite creating "+newObject.id);
- return newObject;
- };
-
- // Test if two sound strings matchs ignoring audio directory
- FoodChain.soundMatch = function(s1, s2) {
- var l1 = s1.length-1;
- while (l1 > 0 && s1[l1] != '/') l1--;
- var l2 = s2.length-1;
- while (l2 > 0 && s2[l2] != '/') l2--;
- return s1.substring(l1) == s2.substring(l2);
- };
-
- // Get zoom level
- FoodChain.getZoomLevel = function() {
- var wsize = window.innerWidth;
- var zoom;
- if (wsize <= 480) {
- zoom = 0.4;
- } else if (wsize <= 640) {
- zoom = 0.5;
- } else if (wsize <= 854) {
- zoom = 0.62;
- } else if (wsize <= 960) {
- zoom = 0.72;
- } else if (wsize <= 1024) {
- zoom = 0.88;
- } else {
- zoom = 1;
- }
- return zoom;
- };
|