|
@@ -0,0 +1,798 @@
|
|
|
|
+
|
|
|
|
+// Objects
|
|
|
|
+var clicker;
|
|
|
|
+var text;
|
|
|
|
+var loserOverlay;
|
|
|
|
+var menuOverlay;
|
|
|
|
+var heartRespawn;
|
|
|
|
+var livesCounter;
|
|
|
|
+var settingsOverlay;
|
|
|
|
+var storeOverlay;
|
|
|
|
+var admobid = {};
|
|
|
|
+var lang = 'en';
|
|
|
|
+var blueInRow = 1;
|
|
|
|
+// Sounds
|
|
|
|
+var tapSound;
|
|
|
|
+var tapSound2;
|
|
|
|
+var achievementSound;
|
|
|
|
+var errorSound;
|
|
|
|
+var purchaseSound;
|
|
|
|
+
|
|
|
|
+// State
|
|
|
|
+var playing = false;
|
|
|
|
+var lastClickTime;
|
|
|
|
+var lostTime;
|
|
|
|
+var canRespawn = true;
|
|
|
|
+var score = 0;
|
|
|
|
+var colour = 0; //0 - blue, 1 - red, 2 - green
|
|
|
|
+var heartClippingY = 0;
|
|
|
|
+var numberOfGames = 0;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Translations
|
|
|
|
+var langStrs = {
|
|
|
|
+ "en":{
|
|
|
|
+ "playButton": "Play",
|
|
|
|
+ "shareButton":"Share",
|
|
|
|
+ "storeButton":"Store",
|
|
|
|
+ "settingsButton":"Settings",
|
|
|
|
+ "freeLife":"1 free life!",
|
|
|
|
+ "watchVideo":"Watch video",
|
|
|
|
+ "loading":"Loading...",
|
|
|
|
+ "textlabel":"Click?",
|
|
|
|
+ "loseReason":"You lost!",
|
|
|
|
+ "loserScore":"You scored <a>0</a> points",
|
|
|
|
+ "heartExplanation":"(Tap heart to continue this game)",
|
|
|
|
+ "shareHighscore":"Share highscore!",
|
|
|
|
+ "shareScore":"Share score",
|
|
|
|
+ "goToMenu":"Menu",
|
|
|
|
+ "goBack":"Back",
|
|
|
|
+ "soundButton":"  Sound  ",
|
|
|
|
+ "buy":"Buy ",
|
|
|
|
+ "highscore":"New highscore!",
|
|
|
|
+ "points":" points!",
|
|
|
|
+ "notRed":"Not red!",
|
|
|
|
+ "tooSlow":"Too slow!",
|
|
|
|
+ "removeAds":"Remove ads in the store!",
|
|
|
|
+ "description":"Just press the button",
|
|
|
|
+ "shareTitle":"New Clicky score!",
|
|
|
|
+ "shareDescription1":"I got ",
|
|
|
|
+ "shareDescription2":" points in Clicky! How many can you get?",
|
|
|
|
+ "highscoreText":"Highscore: <span>0</span> points",
|
|
|
|
+ "credits":"Credits"
|
|
|
|
+ },
|
|
|
|
+ "fr":{
|
|
|
|
+ "playButton": "Jouer",
|
|
|
|
+ "shareButton":"Partager",
|
|
|
|
+ "storeButton":"Magasin",
|
|
|
|
+ "settingsButton":"Options",
|
|
|
|
+ "freeLife":"1 vie gratuite!",
|
|
|
|
+ "watchVideo":"Regarder la vidéo",
|
|
|
|
+ "loading":"Chargement...",
|
|
|
|
+ "textlabel":"Cliquez",
|
|
|
|
+ "loseReason":"Vous avez perdu!",
|
|
|
|
+ "loserScore":"Vous avez obtenu <a>0</a> points",
|
|
|
|
+ "heartExplanation":"(Appuyez sur le coeur pour continuer)",
|
|
|
|
+ "shareHighscore":"Partagez highscore!",
|
|
|
|
+ "shareScore":"Partagez score",
|
|
|
|
+ "goToMenu":"Menu",
|
|
|
|
+ "goBack":"Retour",
|
|
|
|
+ "soundButton":"  Son  ",
|
|
|
|
+ "buy":"Acheter ",
|
|
|
|
+ "highscore":"Nouveau highscore!",
|
|
|
|
+ "points":" points!",
|
|
|
|
+ "notRed":"Pas rouge!",
|
|
|
|
+ "tooSlow":"Trop lent!",
|
|
|
|
+ "removeAds":"Enlevez les pubs au magasin!",
|
|
|
|
+ "description":"Appuyez sur le bouton",
|
|
|
|
+ "shareTitle":"Nouveau score Clicky!",
|
|
|
|
+ "shareDescription1":"J'ai eu ",
|
|
|
|
+ "shareDescription2":" points sur Clicky! Peux-tu faire mieux?",
|
|
|
|
+ "highscoreText":"Highscore: <span>0</span> points",
|
|
|
|
+ "credits":"Infos"
|
|
|
|
+ },
|
|
|
|
+ "es":{
|
|
|
|
+ "playButton": "Jugar",
|
|
|
|
+ "shareButton":"Compartir",
|
|
|
|
+ "storeButton":"Tienda",
|
|
|
|
+ "settingsButton":"Ajustes",
|
|
|
|
+ "freeLife":"¡1 vida gratis!",
|
|
|
|
+ "watchVideo":"Ve el vídeo",
|
|
|
|
+ "loading":"Cargando...",
|
|
|
|
+ "textlabel":"Click?",
|
|
|
|
+ "loseReason":"Perdiste",
|
|
|
|
+ "loserScore":"Has obtenido <a>0</a> puntos",
|
|
|
|
+ "heartExplanation":"(Pulsa el corazón para continuar)",
|
|
|
|
+ "shareHighscore":"¡Compartir récord!",
|
|
|
|
+ "shareScore":"Compartir puntuación",
|
|
|
|
+ "goToMenu":"Menú",
|
|
|
|
+ "goBack":"Atrás",
|
|
|
|
+ "soundButton":"  Sonido  ",
|
|
|
|
+ "buy":"Comprar ",
|
|
|
|
+ "highscore":"¡Nuevo récord!",
|
|
|
|
+ "points":" puntos",
|
|
|
|
+ "notRed":"¡Rojo no!",
|
|
|
|
+ "tooSlow":"¡Muy lento!",
|
|
|
|
+ "removeAds":"¡Quita los anuncios en la tienda!",
|
|
|
|
+ "description":"Pulsa el botón",
|
|
|
|
+ "shareTitle":"¡Nuevo resultado en Clicky!",
|
|
|
|
+ "shareDescription1":"¡He sacado ",
|
|
|
|
+ "shareDescription2":" puntos en Clicky! ¿Puedes superarlo?",
|
|
|
|
+ "highscoreText":"Récord: <span>0</span> puntos",
|
|
|
|
+ "credits":"Créditos"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//Ads
|
|
|
|
+/*var isPendingInterstitial = false;
|
|
|
|
+var isAutoshowInterstitial = false;
|
|
|
|
+
|
|
|
|
+function prepareInterstitialAd() {
|
|
|
|
+ if (!isPendingInterstitial) { // We won't ask for another interstitial ad if we already have an available one
|
|
|
|
+ admob.requestInterstitialAd({
|
|
|
|
+ autoShowInterstitial: isAutoshowInterstitial
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function onAdLoadedEvent(e) {
|
|
|
|
+ if (e.adType === admob.AD_TYPE.INTERSTITIAL && !isAutoshowInterstitial) {
|
|
|
|
+ isPendingInterstitial = true;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function showInterstitialAd() {
|
|
|
|
+ if (isPendingInterstitial) {
|
|
|
|
+ admob.showInterstitialAd(function () {
|
|
|
|
+ isPendingInterstitial = false;
|
|
|
|
+ isAutoshowInterstitial = false;
|
|
|
|
+ prepareInterstitialAd();
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // The interstitial is not prepared, so in this case, we want to show the interstitial as soon as possible
|
|
|
|
+ isAutoshowInterstitial = true;
|
|
|
|
+ admob.requestInterstitialAd({
|
|
|
|
+ autoShowInterstitial: isAutoshowInterstitial
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+}*/
|
|
|
|
+
|
|
|
|
+document.addEventListener("deviceready", onReady, false);
|
|
|
|
+
|
|
|
|
+// Load
|
|
|
|
+
|
|
|
|
+function load(){
|
|
|
|
+ // Internationalization
|
|
|
|
+ document.getElementById('playButton').innerHTML = langStrs[lang]["playButton"]
|
|
|
|
+ document.getElementById('shareButton').innerHTML = langStrs[lang]["shareButton"]
|
|
|
|
+ document.getElementById('storeButton').innerHTML = langStrs[lang]["storeButton"]
|
|
|
|
+ document.getElementById('settingsButton').innerHTML = langStrs[lang]["settingsButton"]
|
|
|
|
+ var loadingTitles = document.querySelectorAll('#storeOverlay .title')
|
|
|
|
+ for(var i = 0; i < loadingTitles.length; i++){
|
|
|
|
+ loadingTitles[i].innerHTML = langStrs[lang]["loading"]
|
|
|
|
+ }
|
|
|
|
+ document.querySelector('#freeLife .title').innerHTML = langStrs[lang]["freeLife"]
|
|
|
|
+ document.getElementById('watchVideo').innerHTML = langStrs[lang]["watchVideo"]
|
|
|
|
+ document.getElementById('textlabel').innerHTML = langStrs[lang]["textlabel"]
|
|
|
|
+ document.getElementById('loseReason').innerHTML = langStrs[lang]["loseReason"]
|
|
|
|
+ document.getElementById('loserScore').innerHTML = langStrs[lang]["loserScore"]
|
|
|
|
+ document.getElementById('heartExplanation').innerHTML = langStrs[lang]["heartExplanation"]
|
|
|
|
+ document.getElementById('newScore').innerHTML = langStrs[lang]["newScore"]
|
|
|
|
+ document.getElementById('loserGoToMenu').innerHTML = langStrs[lang]["goToMenu"]
|
|
|
|
+ document.getElementById('storeGoToMenu').innerHTML = langStrs[lang]["goToMenu"]
|
|
|
|
+ document.getElementById('settingsGoToMenu').innerHTML = langStrs[lang]["goToMenu"]
|
|
|
|
+ document.getElementById('storeGoToGame').innerHTML = langStrs[lang]["goBack"]
|
|
|
|
+ document.getElementById('storeGoToLoser').innerHTML = langStrs[lang]["goBack"]
|
|
|
|
+ document.getElementById('soundButton').innerHTML = langStrs[lang]["soundButton"]
|
|
|
|
+ document.getElementById('highscoreText').innerHTML = langStrs[lang]["highscoreText"]
|
|
|
|
+ document.getElementById('creditsButton').innerHTML = langStrs[lang]["credits"]
|
|
|
|
+ // Game
|
|
|
|
+ if(localStorage["lives"] == undefined){
|
|
|
|
+ localStorage["lives"] = 3 //3 lives to start with
|
|
|
|
+ }
|
|
|
|
+ if(localStorage["sound"] == undefined){
|
|
|
|
+ localStorage["sound"] = "true";
|
|
|
|
+ }
|
|
|
|
+ if(localStorage["showAds"] == undefined){
|
|
|
|
+ localStorage["showAds"] = "true";
|
|
|
|
+ }
|
|
|
|
+ if(localStorage["highscore"] == undefined){
|
|
|
|
+ localStorage["highscore"] = "0";
|
|
|
|
+ }
|
|
|
|
+ livesCounter = document.getElementById('lives')
|
|
|
|
+ livesCounter.querySelector('#livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ clicker = document.getElementById('clicker');
|
|
|
|
+ text = document.getElementById('textlabel');
|
|
|
|
+ loserOverlay = document.getElementById('loserOverlay')
|
|
|
|
+ menuOverlay = document.getElementById('menuOverlay')
|
|
|
|
+ heartRespawn = document.getElementById('heartRespawn')
|
|
|
|
+ settingsOverlay = document.getElementById('settingsOverlay')
|
|
|
|
+ storeOverlay = document.getElementById('storeOverlay')
|
|
|
|
+ try{
|
|
|
|
+ document.createEvent("TouchEvent")
|
|
|
|
+ clicker.addEventListener('touchstart',click,false)
|
|
|
|
+ loserOverlay.addEventListener('touchstart',restart,false)
|
|
|
|
+ loserOverlay.querySelector("#loserGoToMenu").addEventListener('touchstart',menu,true)
|
|
|
|
+ menuOverlay.querySelector('#playButton').addEventListener('touchstart',restart,false)
|
|
|
|
+ menuOverlay.querySelector('#storeButton').addEventListener('touchstart',goToStore,false)
|
|
|
|
+ 'buy' //menuOverlay.querySelector('#highscoreButton').addEventListener('touchstart',goToHighscores,false)
|
|
|
|
+ menuOverlay.querySelector('#settingsButton').addEventListener('touchstart',goToSettings,false)
|
|
|
|
+ document.getElementById('shareButton').addEventListener('touchstart',share,false)
|
|
|
|
+ heartRespawn.addEventListener('touchstart',respawn,false)
|
|
|
|
+ livesCounter.addEventListener('touchstart',goToStore,false)
|
|
|
|
+ settingsOverlay.querySelector('#soundButton').addEventListener('touchstart',toggleSound,false)
|
|
|
|
+ settingsOverlay.querySelector('#settingsGoToMenu').addEventListener('touchstart',menu,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToMenu').addEventListener('touchstart',menu,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToGame').addEventListener('touchstart',continueGame,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToLoser').addEventListener('touchstart',goToLoser,false)
|
|
|
|
+ document.getElementById('newScore').addEventListener('touchstart',shareScore,false)
|
|
|
|
+ document.getElementById('creditsButton').addEventListener('touchstart',openCredits,false)
|
|
|
|
+ document.getElementById('creditsOverlay').addEventListener('touchstart',closeCredits,false)
|
|
|
|
+ var freelife = document.getElementById('freelife').addEventListener('touchstart',function(){
|
|
|
|
+ if(videoTimeLeft <= 0){
|
|
|
|
+ AdMob.showRewardVideoAd();
|
|
|
|
+ videoTimeLeft = 90
|
|
|
|
+ videoRewardCountdown()
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ AdMob.prepareRewardVideoAd({adId:"ca-app-pub-5926997736584944/8707157712", autoShow:false, isTesting: false})
|
|
|
|
+ }, 1000)
|
|
|
|
+ }
|
|
|
|
+ },false)
|
|
|
|
+ document.addEventListener('onAdPresent',
|
|
|
|
+ function(data){
|
|
|
|
+ if(data.adType == 'rewardvideo') {
|
|
|
|
+ //alert( data.rewardType );
|
|
|
|
+ //alert( data.rewardAmount );
|
|
|
|
+ localStorage["lives"] = parseInt(localStorage["lives"]) + 1
|
|
|
|
+ livesCounter.querySelector('#livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ catch (e){
|
|
|
|
+ clicker.addEventListener('mousedown',click,false)
|
|
|
|
+ loserOverlay.addEventListener('mousedown',restart,false)
|
|
|
|
+ loserOverlay.querySelector("#loserGoToMenu").addEventListener('mousedown',menu,true)
|
|
|
|
+ menuOverlay.querySelector('#playButton').addEventListener('mousedown',restart,false)
|
|
|
|
+ //menuOverlay.querySelector('#highscoreButton').addEventListener('mousedown',goToHighscores,false)
|
|
|
|
+ menuOverlay.querySelector('#settingsButton').addEventListener('mousedown',goToSettings,false)
|
|
|
|
+ menuOverlay.querySelector('#storeButton').addEventListener('mousedown',goToStore,false)
|
|
|
|
+ document.getElementById('shareButton').addEventListener('mousedown',share,false)
|
|
|
|
+ heartRespawn.addEventListener('mousedown',respawn,false)
|
|
|
|
+ livesCounter.addEventListener('mousedown',goToStore,false)
|
|
|
|
+ settingsOverlay.querySelector('#soundButton').addEventListener('mousedown',toggleSound,false)
|
|
|
|
+ settingsOverlay.querySelector('#settingsGoToMenu').addEventListener('mousedown',menu,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToMenu').addEventListener('mousedown',menu,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToGame').addEventListener('mousedown',continueGame,false)
|
|
|
|
+ storeOverlay.querySelector('#storeGoToLoser').addEventListener('mousedown',goToLoser,false)
|
|
|
|
+ document.getElementById('newScore').addEventListener('mousedown',shareScore,false)
|
|
|
|
+ document.getElementById('creditsButton').addEventListener('mousedown',openCredits,false)
|
|
|
|
+ document.getElementById('creditsOverlay').addEventListener('mousedown',closeCredits,false)
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function onReady(){
|
|
|
|
+ // Let's try to contact the store
|
|
|
|
+ try{
|
|
|
|
+ store.register({
|
|
|
|
+ id: "20lives",
|
|
|
|
+ alias: "20 lives",
|
|
|
|
+ type: store.CONSUMABLE
|
|
|
|
+ });
|
|
|
|
+ store.register({
|
|
|
|
+ id: "50lives",
|
|
|
|
+ alias: "50 lives",
|
|
|
|
+ type: store.CONSUMABLE
|
|
|
|
+ });
|
|
|
|
+ store.register({
|
|
|
|
+ id: "200lives",
|
|
|
|
+ alias: "200 lives",
|
|
|
|
+ type: store.CONSUMABLE
|
|
|
|
+ });
|
|
|
|
+ store.register({
|
|
|
|
+ id: "removeads",
|
|
|
|
+ alias: "Remove ads",
|
|
|
|
+ type: store.NON_CONSUMABLE
|
|
|
|
+ });
|
|
|
|
+ store.when("20lives").updated(refreshStore);
|
|
|
|
+ store.when("50lives").updated(refreshStore);
|
|
|
|
+ store.when("200lives").updated(refreshStore);
|
|
|
|
+ store.when("removeads").updated(refreshStore);
|
|
|
|
+ store.when("20lives").approved(function(product) {
|
|
|
|
+ localStorage["lives"] = parseInt(localStorage["lives"]) + 20
|
|
|
|
+ document.getElementById('livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ product.finish();
|
|
|
|
+ playSound("purchase")
|
|
|
|
+ });
|
|
|
|
+ store.when("50lives").approved(function(product) {
|
|
|
|
+ localStorage["lives"] = parseInt(localStorage["lives"]) + 50
|
|
|
|
+ document.getElementById('livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ product.finish();
|
|
|
|
+ playSound("purchase")
|
|
|
|
+ });
|
|
|
|
+ store.when("200lives").approved(function(product) {
|
|
|
|
+ localStorage["lives"] = parseInt(localStorage["lives"]) + 200
|
|
|
|
+ document.getElementById('livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ product.finish();
|
|
|
|
+ playSound("purchase")
|
|
|
|
+ });
|
|
|
|
+ store.when("removeads").approved(function(product) {
|
|
|
|
+ localStorage["showAds"] = "false"
|
|
|
|
+ product.finish();
|
|
|
|
+ try{
|
|
|
|
+ AdMob.hideBanner();
|
|
|
|
+ AdMob.removeBanner();
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ playSound("purchase")
|
|
|
|
+ });
|
|
|
|
+ store.refresh();
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ // Sounds
|
|
|
|
+ try{
|
|
|
|
+ tapSound = new Media("file:///android_asset/www/sounds/tap.ogg");
|
|
|
|
+ tapSound2 = new Media("file:///android_asset/www/sounds/tap2.ogg");
|
|
|
|
+ achievementSound = new Media("file:///android_asset/www/sounds/achievement.mp3");
|
|
|
|
+ errorSound = new Media("file:///android_asset/www/sounds/error.mp3");
|
|
|
|
+ purchaseSound = new Media("file:///android_asset/www/sounds/purchase.mp3");
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ // Ads
|
|
|
|
+ /*if(localStorage["showAds"] == "true"){
|
|
|
|
+ admob.setOptions({
|
|
|
|
+ publisherId: "ca-app-pub-5926997736584944/3066080116" , // Required
|
|
|
|
+ interstitialAdId: "ca-app-pub-5926997736584944/6019546518", // Optional
|
|
|
|
+ });
|
|
|
|
+ document.addEventListener(admob.events.onAdLoaded, onAdLoadedEvent);
|
|
|
|
+ prepareInterstitialAd();
|
|
|
|
+ admob.createBannerView();
|
|
|
|
+ }*/
|
|
|
|
+ try{
|
|
|
|
+ if(localStorage["showAds"] == "true"){
|
|
|
|
+ admobid = {
|
|
|
|
+ banner: 'ca-app-pub-5926997736584944/3066080116',
|
|
|
|
+ interstitial: 'ca-app-pub-5926997736584944/6019546518'
|
|
|
|
+ };
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ AdMob.createBanner({
|
|
|
|
+ isTesting: false,
|
|
|
|
+ adId: admobid.banner,
|
|
|
|
+ position: AdMob.AD_POSITION.BOTTOM_CENTER,
|
|
|
|
+ autoShow: true,
|
|
|
|
+ success: function(){
|
|
|
|
+ //alert('yeai')
|
|
|
|
+ //alert(AdMob.AD_POSITION.BOTTOM_CENTER)
|
|
|
|
+ AdMob.showBanner(AdMob.AD_POSITION.BOTTOM_CENTER)
|
|
|
|
+ },
|
|
|
|
+ error: function(){
|
|
|
|
+ //alert('failed to create banner');
|
|
|
|
+ }});
|
|
|
|
+ AdMob.prepareInterstitial( {adId:admobid.interstitial, autoShow:false, isTesting: false} );
|
|
|
|
+ AdMob.prepareRewardVideoAd({adId:"ca-app-pub-5926997736584944/8707157712", autoShow:false, isTesting: false}, function(){
|
|
|
|
+ //alert('yep')
|
|
|
|
+ }, function(){
|
|
|
|
+ //alert('nope')
|
|
|
|
+ });
|
|
|
|
+ }, 50)
|
|
|
|
+ }
|
|
|
|
+ videoRewardCountdown()
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ try{
|
|
|
|
+ navigator.globalization.getPreferredLanguage(function (language) {
|
|
|
|
+ var language = language.value.split('-')[0]
|
|
|
|
+ switch(language){
|
|
|
|
+ case 'fr': lang = 'fr'; break;
|
|
|
|
+ case 'de': lang = 'dr'; break;
|
|
|
|
+ case 'es': lang = 'es'; break;
|
|
|
|
+ case 'en': lang = 'en'; break;
|
|
|
|
+ default: lang = 'en'; break;
|
|
|
|
+ }
|
|
|
|
+ load()
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ document.body.className = "menu"
|
|
|
|
+ }, 2500)
|
|
|
|
+ //alert(lang)
|
|
|
|
+ })
|
|
|
|
+ // Load the game
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Store
|
|
|
|
+function refreshStore(){
|
|
|
|
+ // 20 lives
|
|
|
|
+ try{
|
|
|
|
+ var product20 = store.get("20lives");
|
|
|
|
+ document.querySelector('#buy20lives .title').innerHTML = langStrs[lang]["buy"]+ product20.title.replace(/ *\([^)]*\) */g, "");
|
|
|
|
+ document.querySelector('#buy20lives .price').innerHTML = product20.price
|
|
|
|
+ document.querySelector('#buy20lives').addEventListener('touchstart',function(){
|
|
|
|
+ store.order("20lives");
|
|
|
|
+ },false)
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ // 50 lives
|
|
|
|
+ try{
|
|
|
|
+ var product50 = store.get("50lives");
|
|
|
|
+ document.querySelector('#buy50lives .title').innerHTML = langStrs[lang]["buy"]+ product50.title.replace(/ *\([^)]*\) */g, "");
|
|
|
|
+ document.querySelector('#buy50lives .price').innerHTML = product50.price
|
|
|
|
+ document.querySelector('#buy50lives').addEventListener('touchstart',function(){
|
|
|
|
+ store.order("50lives");
|
|
|
|
+ },false)
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ // 200 lives
|
|
|
|
+ try{
|
|
|
|
+ var product200 = store.get("200lives");
|
|
|
|
+ document.querySelector('#buy200lives .title').innerHTML = langStrs[lang]["buy"]+ product200.title.replace(/ *\([^)]*\) */g, "");
|
|
|
|
+ document.querySelector('#buy200lives .price').innerHTML = product200.price
|
|
|
|
+ document.querySelector('#buy200lives').addEventListener('touchstart',function(){
|
|
|
|
+ store.order("200lives");
|
|
|
|
+ },false)
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+ // Remove ads
|
|
|
|
+ try{
|
|
|
|
+ var removeads = store.get("removeads");
|
|
|
|
+ document.querySelector('#removeads .title').innerHTML = removeads.title.replace(/ *\([^)]*\) */g, "");
|
|
|
|
+ document.querySelector('#removeads .price').innerHTML = removeads.price
|
|
|
|
+ if(removeads.state == store.OWNED){
|
|
|
|
+ localStorage["showAds"] = "false"
|
|
|
|
+ document.querySelector('#removeads').classList.add("owned")
|
|
|
|
+ AdMob.hideBanner();
|
|
|
|
+ AdMob.removeBanner();
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ document.querySelector('#removeads').addEventListener('touchstart',function(){
|
|
|
|
+ store.order("removeads");
|
|
|
|
+ },false)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Click
|
|
|
|
+function click(){
|
|
|
|
+ lastClickTime = new Date().getTime();
|
|
|
|
+ // Blue and green buttons just let you go
|
|
|
|
+ if(colour == 0 || colour == 2){
|
|
|
|
+ score++
|
|
|
|
+ if(parseInt(localStorage["highscore"])+1 == score && localStorage["highscore"] != "0"){
|
|
|
|
+ logMessage(langStrs[lang]["highscore"])
|
|
|
|
+ playSound("achievement")
|
|
|
|
+ }
|
|
|
|
+ playSound("tap")
|
|
|
|
+ if(score == 25 || score == 50 || (score%100 == 0 && score!=0)){
|
|
|
|
+ logMessage(score+langStrs[lang]["points"])
|
|
|
|
+ playSound("achievement")
|
|
|
|
+ }
|
|
|
|
+ shuffle()
|
|
|
|
+ }
|
|
|
|
+ // Red buttons make you lose
|
|
|
|
+ else if(colour == 1){
|
|
|
|
+ lose(langStrs[lang]["notRed"]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Logging messages
|
|
|
|
+function logMessage(mssg, time){
|
|
|
|
+ if(time==undefined){
|
|
|
|
+ time = 1500
|
|
|
|
+ }
|
|
|
|
+ var messageDiv = document.getElementById('message')
|
|
|
|
+ messageDiv.innerHTML = mssg
|
|
|
|
+ messageDiv.style.color = "rgba(88,88,88,1)"
|
|
|
|
+ messageDiv.style.top = "8%"
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ var messageDiv = document.getElementById('message')
|
|
|
|
+ messageDiv.style.color = "rgba(88,88,88,0)"
|
|
|
|
+ messageDiv.style.top = "-2%"
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ var messageDiv = document.getElementById('message')
|
|
|
|
+ messageDiv.style.top = "13%"
|
|
|
|
+ }, 800)
|
|
|
|
+ }, time)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Create a new button
|
|
|
|
+function shuffle(){
|
|
|
|
+ var x = Math.random();
|
|
|
|
+ if(blueInRow>5){
|
|
|
|
+ console.log("Capped blues")
|
|
|
|
+ x = 0.8;
|
|
|
|
+ }
|
|
|
|
+ // Blue
|
|
|
|
+ if(x < (0.3 + 0.45*Math.exp((-score) / 1200))){
|
|
|
|
+ colour = 0
|
|
|
|
+ blueInRow++
|
|
|
|
+ }
|
|
|
|
+ // Red
|
|
|
|
+ else if(x < (0.67 + 0.25*Math.exp((-score) / 900))){
|
|
|
|
+ blueInRow = 0
|
|
|
|
+ colour = 1
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ if(playing){
|
|
|
|
+ colour = 0;
|
|
|
|
+ update()
|
|
|
|
+ }
|
|
|
|
+ }, Math.min(Math.max(460 + 400*Math.exp((-score) / 100) - 30*Math.log(score) + (Math.random()-0.5)*200, 400), 900));
|
|
|
|
+ }
|
|
|
|
+ // Green
|
|
|
|
+ else{
|
|
|
|
+ blueInRow = 0
|
|
|
|
+ colour = 2
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ var t = new Date().getTime();
|
|
|
|
+ if(t - lastClickTime > Math.max(750 - 4*score, 350)){
|
|
|
|
+ lose(langStrs[lang]["tooSlow"]);
|
|
|
|
+ }
|
|
|
|
+ }, Math.min(460 + 400*Math.exp((-score) / 100) - 30*Math.log(score), 900));
|
|
|
|
+ }
|
|
|
|
+ update()
|
|
|
|
+}
|
|
|
|
+// Update the screen
|
|
|
|
+function update(){
|
|
|
|
+ if(colour == 0){clicker.className = "button round-button blue"}
|
|
|
|
+ if(colour == 1){clicker.className = "button round-button red"}
|
|
|
|
+ if(colour == 2){clicker.className = "button round-button green"}
|
|
|
|
+ if(score == 0){
|
|
|
|
+ text.innerHTML = langStrs[lang]["textlabel"]
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ text.innerHTML = score;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// UI
|
|
|
|
+function lose(reason){
|
|
|
|
+ if(parseInt(localStorage["highscore"]) < score && localStorage["highscore"] != 0){ // New Highscore
|
|
|
|
+ document.getElementById('newScore').className = 'highscore'
|
|
|
|
+ document.getElementById('newScore').innerHTML = langStrs[lang]["shareHighscore"]
|
|
|
|
+ }
|
|
|
|
+ else{ //Normal score
|
|
|
|
+ document.getElementById('newScore').className = 'normalScore'
|
|
|
|
+ document.getElementById('newScore').innerHTML = langStrs[lang]["shareScore"]
|
|
|
|
+ }
|
|
|
|
+ // Update highscore
|
|
|
|
+ if(localStorage["highscore"] < score){
|
|
|
|
+ localStorage["highscore"] = score
|
|
|
|
+ }
|
|
|
|
+ document.querySelector('#highScoretext span').innerHTML = localStorage["highscore"]
|
|
|
|
+ playSound("error")
|
|
|
|
+ playing = false;
|
|
|
|
+ lostTime = new Date().getTime()
|
|
|
|
+ console.log("You lost", score)
|
|
|
|
+ document.body.className = "loser"
|
|
|
|
+ loserOverlay.querySelector('#loseReason').innerHTML = reason
|
|
|
|
+ loserOverlay.querySelector('a').innerHTML = score;
|
|
|
|
+ // Start counting heart down
|
|
|
|
+ if(canRespawn){
|
|
|
|
+ heartClippingY = 0;
|
|
|
|
+ heartRespawn.style['margin-top'] = heartClippingY+"px"
|
|
|
|
+ heartRespawn.style['background-position-y'] = -heartClippingY+"px"
|
|
|
|
+ heartRespawn.style['height'] = 100-heartClippingY+"px"
|
|
|
|
+ document.getElementById("heartExplanation").style.color = "rgba(200,200,200,0.8)"
|
|
|
|
+ setTimeout(respawnCountdown, 1200)
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ heartClippingY = 100;
|
|
|
|
+ respawnCountdown();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function restart(){
|
|
|
|
+ var t = new Date().getTime();
|
|
|
|
+ if((lostTime == undefined || t > lostTime+500) && playing==false){ //So that user doesn't restart unwillingly
|
|
|
|
+ playing = true;
|
|
|
|
+ score = 0
|
|
|
|
+ colour = 0
|
|
|
|
+ heartClippingY = 0
|
|
|
|
+ canRespawn = true;
|
|
|
|
+ update()
|
|
|
|
+ document.body.className = "playing"
|
|
|
|
+ numberOfGames++
|
|
|
|
+ if(localStorage["showAds"] == "true" && numberOfGames%5 == 4){
|
|
|
|
+ //showInterstitialAd()
|
|
|
|
+ AdMob.showInterstitial();
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ AdMob.prepareInterstitial( {adId:admobid.interstitial, autoShow:false, isTesting: false} );
|
|
|
|
+ }, 500)
|
|
|
|
+ setTimeout(function(){
|
|
|
|
+ logMessage(langStrs[lang]["removeAds"], 4000)
|
|
|
|
+ }, 1000)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function menu(event){
|
|
|
|
+ playing = false;
|
|
|
|
+ event.stopPropagation();
|
|
|
|
+ document.body.className = "menu"
|
|
|
|
+}
|
|
|
|
+function share(){
|
|
|
|
+ facebookConnectPlugin.showDialog({
|
|
|
|
+ method: "share",
|
|
|
|
+ href: "https://play.google.com/store/apps/details?id=com.clicky.clicky",
|
|
|
|
+ caption: "Clicky",
|
|
|
|
+ description: langStrs[lang]["description"],
|
|
|
|
+ picture: "https://lh6.googleusercontent.com/AJvJVPTZ-l89nHSggNa6gwtDofahCQCQujivDO2et5vi2tNxl4ybOQgLRk7qLXlFOXPMLlEC=w371",
|
|
|
|
+ share_feedWeb: true, // iOS only
|
|
|
|
+ }, function(){}, function(){})
|
|
|
|
+}
|
|
|
|
+var resCountdown;
|
|
|
|
+function respawnCountdown(){
|
|
|
|
+ if(heartClippingY < 95){
|
|
|
|
+ heartClippingY += 1;
|
|
|
|
+ heartRespawn.style['margin-top'] = heartClippingY+"px"
|
|
|
|
+ heartRespawn.style['background-position-y'] = -heartClippingY+"px"
|
|
|
|
+ heartRespawn.style['height'] = 100-heartClippingY+"px"
|
|
|
|
+
|
|
|
|
+ //heartRespawn.style['clip-path'] = "inset("+heartClippingY+"px 0px 0px 0px)"
|
|
|
|
+ //heartRespawn.style.webkitClipPath = "inset("+heartClippingY+"px 0px 0px 0px)"
|
|
|
|
+ //heartRespawn.style['background-position-x'] = x+"px"
|
|
|
|
+ resCountdown = setTimeout(respawnCountdown, 80)
|
|
|
|
+ }
|
|
|
|
+ else{ //You can't respawn anymore
|
|
|
|
+ //heartRespawn.style['clip-path'] = "inset("+200+"px 0px 0px 0px)"
|
|
|
|
+ //heartRespawn.style.webkitClipPath = "inset("+200+"px 0px 0px 0px)"
|
|
|
|
+ heartRespawn.style['margin-top'] = 99+"px"
|
|
|
|
+ heartRespawn.style['background-position-y'] = -99+"px"
|
|
|
|
+ heartRespawn.style['height'] = 100-99+"px"
|
|
|
|
+ canRespawn = false;
|
|
|
|
+ document.getElementById("heartExplanation").style.color = "rgba(200,200,200,0)"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function respawn(event){
|
|
|
|
+ console.log('respawning')
|
|
|
|
+ event.stopPropagation();
|
|
|
|
+ if(parseInt(localStorage["lives"]) > 0){ //Still lives left
|
|
|
|
+ if(canRespawn){
|
|
|
|
+ // Continue from whenever we were with blue button
|
|
|
|
+ playing = true;
|
|
|
|
+ canRespawn = false
|
|
|
|
+ colour = 0
|
|
|
|
+ update()
|
|
|
|
+ document.body.className = "playing"
|
|
|
|
+ // Take one life off
|
|
|
|
+ localStorage["lives"] = parseInt(localStorage["lives"]) - 1
|
|
|
|
+ livesCounter.querySelector('#livesCounter').innerHTML = localStorage["lives"]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else{ // Need to buy lives
|
|
|
|
+ goToStore(undefined,true)
|
|
|
|
+ heartClippingY = 0
|
|
|
|
+ clearTimeout(resCountdown)
|
|
|
|
+ heartRespawn.style['margin-top'] = 0+"px"
|
|
|
|
+ heartRespawn.style['background-position-y'] = -0+"px"
|
|
|
|
+ heartRespawn.style['height'] = 100-0+"px"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function goToSettings(){
|
|
|
|
+ document.body.className = "settings"
|
|
|
|
+ if(localStorage["sound"] == "false"){
|
|
|
|
+ settingsOverlay.querySelector("#soundButton").className = "offButton"
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ settingsOverlay.querySelector("#soundButton").className = ""
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function goToStore(event, backToLoser){
|
|
|
|
+ document.body.className = "store"
|
|
|
|
+ if(playing){
|
|
|
|
+ storeOverlay.querySelector('#storeGoToMenu').style.display = "none"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToGame').style.display = "block"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToLoser').style.display = "none"
|
|
|
|
+ }
|
|
|
|
+ else if(backToLoser != undefined){
|
|
|
|
+ storeOverlay.querySelector('#storeGoToMenu').style.display = "none"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToGame').style.display = "none"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToLoser').style.display = "block"
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ storeOverlay.querySelector('#storeGoToMenu').style.display = "block"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToGame').style.display = "none"
|
|
|
|
+ storeOverlay.querySelector('#storeGoToLoser').style.display = "none"
|
|
|
|
+ }
|
|
|
|
+ keepRefreshingStore()
|
|
|
|
+}
|
|
|
|
+function keepRefreshingStore(){
|
|
|
|
+ if(document.body.className == "store"){
|
|
|
|
+ store.refresh()
|
|
|
|
+ setTimeout(keepRefreshingStore, 1000)
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ store.refresh()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function continueGame(){
|
|
|
|
+ document.body.className = "playing"
|
|
|
|
+}
|
|
|
|
+function goToLoser(){
|
|
|
|
+ document.body.className = "loser"
|
|
|
|
+}
|
|
|
|
+function toggleSound(){
|
|
|
|
+ if(localStorage["sound"] == "false"){
|
|
|
|
+ localStorage["sound"] = "true"
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ localStorage["sound"] = "false"
|
|
|
|
+ }
|
|
|
|
+ goToSettings()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Sounds
|
|
|
|
+function playSound(sound){
|
|
|
|
+ try{
|
|
|
|
+ if(localStorage["sound"] == "true"){
|
|
|
|
+ if(sound == "tap"){
|
|
|
|
+ if(score%2 == 0){
|
|
|
|
+ tapSound.seekTo(0)
|
|
|
|
+ tapSound.play()
|
|
|
|
+ } else{
|
|
|
|
+ tapSound2.seekTo(0)
|
|
|
|
+ tapSound2.play();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if(sound =="achievement"){
|
|
|
|
+ achievementSound.play()
|
|
|
|
+ }
|
|
|
|
+ else if(sound == "error"){
|
|
|
|
+ errorSound.play()
|
|
|
|
+ }
|
|
|
|
+ else if(sound == "purchase"){
|
|
|
|
+ purchaseSound.play()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch(e){}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// High scores
|
|
|
|
+/*function goToHighscores(){
|
|
|
|
+ //alert(2)
|
|
|
|
+ facebookConnectPlugin.login(["user_friends"], function(obj){
|
|
|
|
+ //alert("Worked1")
|
|
|
|
+ // localStorage["link"] = "https://graph.facebook.com/oauth/access_token_info?client_id=APPID&access_token="+obj["authResponse"]["accessToken"]
|
|
|
|
+ //alert(localStorage["link"])
|
|
|
|
+ //document.getElementById('soundButton').innerHTML=obj["authResponse"]["accessToken"]
|
|
|
|
+ },
|
|
|
|
+ function(str){
|
|
|
|
+ //alert("Didn't work")
|
|
|
|
+ //alert(str)
|
|
|
|
+ //navigator.notification.alert("Facebook access is needed to get highscores.", function(){}, "Could not open highscores")
|
|
|
|
+ })
|
|
|
|
+}*/
|
|
|
|
+
|
|
|
|
+function shareScore(event){
|
|
|
|
+ event.stopPropagation();
|
|
|
|
+ facebookConnectPlugin.showDialog({
|
|
|
|
+ method: "share",
|
|
|
|
+ href: "https://play.google.com/store/apps/details?id=com.clicky.clicky",
|
|
|
|
+ caption: langStrs[lang]["shareTitle"],
|
|
|
|
+ description: langStrs[lang]["shareDescription1"]+score+langStrs[lang]["shareDescription2"],
|
|
|
|
+ quote: langStrs[lang]["shareDescription1"]+score+langStrs[lang]["shareDescription2"],
|
|
|
|
+ share_feedWeb: true, // iOS only
|
|
|
|
+ }, function(){}, function(){})
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Video reward countdown
|
|
|
|
+var videoTimeLeft = 60
|
|
|
|
+function videoRewardCountdown(){
|
|
|
|
+ videoTimeLeft--
|
|
|
|
+ if(videoTimeLeft>0){
|
|
|
|
+ document.getElementById('videoCountdown').innerHTML = "(" + videoTimeLeft + "s)"
|
|
|
|
+ setTimeout(videoRewardCountdown, 1000)
|
|
|
|
+ document.getElementById('freelife').className="storeButton disabled"
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ document.getElementById('videoCountdown').innerHTML = ""
|
|
|
|
+ document.getElementById('freelife').className="storeButton"
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// Credits
|
|
|
|
+function openCredits(){
|
|
|
|
+ document.body.className = "credits"
|
|
|
|
+}
|
|
|
|
+function closeCredits(){
|
|
|
|
+ document.body.className = "settings"
|
|
|
|
+}
|
|
|
|
+
|