let score = 0 // stoque les ameliorations deja disponibles dans le magasin pour ne pas le faire clignoter let magasin_tech = {} let magasin_coll = {} // stoquer les ameliorations deja achetees pour ne pas les afficher dans le magasin let sacado = {} // premet de ne pas laisser le joueur acheter html 5 si il n'a pas débloqué html 1.0 etc.. let evolution_tech = 0 let evolution_coll = 0 // variable qui permet d'augmenter la taille de l'incrément du score pour chaque clic, en fonction de la technlologie déloquée let boost = 1 let revenu_passif = 0 async function remplirMagasinTechnologies(){ const table= document.getElementById("table_magasin_technologies_body") let data = await fetch("../bdd/arbre.json") data = await data.json() let tech = data["technologies"] for(const key in tech){ // ne va pas s'embeter à proecess si on a deja acheté l'amelioration if(!sacado[key] && !magasin_tech[key]){ el = tech[key] const tr = document.createElement("tr") const case_nom = document.createElement("td") case_nom.innerText = el.nom const case_boost = document.createElement("td") case_boost.innerText = el.boost const case_cout = document.createElement("td") case_cout.innerText = el.cout const test = document.createElement("td") const btn_acheter = document.createElement("button") // stoquage temporaire de la clé JSON correspondant à la technologie à débloquer // pour éviter de référencer key, qui va sauter sur sa valeur finale let tmp = key let t = new Technologie(tmp) // charge les propriétés de la technologie depuis la bdd sans mettre à jour le style directement après await t.chargerDepuisBdd(false) /* fonction qui va s'activer lorsqu'on achète l'objet*/ btn_acheter.addEventListener("click", (event) =>{ // ne laisse acheter que si on a l'argent if(score >= t.cout){ // on améliore le style de la page :) t.appliquerAmeliorationStyle() // et on ajouter l'amélioration dans l'abre des compétences débloquées sacado[key] = true // on refresh le magasin pour enlever l'amelioration de la liste // vide le ventre du magasin table.innerHTML = "" magasin_tech = {} remplirMagasinTechnologies() // finalement, on lui débit son compte de points tel un vendeur de voitures score -= t.cout const score_aff = document.getElementById("score_affichage") score_aff.innerText="SCORE : " + score // augmentation du boost d'incrément ouvrirAlerte("Incrémentation de la rentabilité de tes clicks de "+t.boost+" points !!") if(t.props.evolution == 0){ boost += t.boost -1 // car sinon, le premier boost ne va pas entrainer un nombre rond de points par click :) }else{ boost += t.boost } // incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher evolution_tech += 1 }else{ // PAS ASSEZ RICHE !!!!! alert("PAS ASSEZ RICHE !!!!!!!!!!!!") } }) btn_acheter.innerText = "Acheter" // n'afficher l'amélioration que si le score est assez élevé if((t.props.borne <= score) && (evolution_tech === parseInt(t.props.evolution))){ ouvrirAlerte(tech[key]["narration"]) // met à jour le contenu du magasin // pour ne pas re-afficher cette ligne et éviter un clignotement magasin_tech[key] = true test.appendChild(btn_acheter) tr.appendChild(case_nom) tr.appendChild(case_boost) tr.appendChild(case_cout) tr.appendChild(test) table.appendChild(tr) } } } } async function remplirMagasinCollegues(){ const table= document.getElementById("table_magasin_collegues_body") let data = await fetch("../bdd/arbre.json") data = await data.json() let collegues = data["collegues"] for(const key in collegues){ // ne va pas s'embeter à proecess si on a deja acheté l'amelioration if(!sacado[key] && !magasin_coll[key]){ el = collegues[key] // calcul du cout en fonction du nombre de collegue de ce type déjà acheté if(key in sacado){ el.cout = Number(el.cout * (1.1)**sacado[key]).toFixed(1) } const tr = document.createElement("tr") const case_nom = document.createElement("td") case_nom.innerText = el.nom const case_boost = document.createElement("td") case_boost.innerText = el.revenu_passif const case_cout = document.createElement("td") case_cout.innerText = el.cout case_cout.id = "case_cout_"+key // case contenant un lien vers la page wikipédia du personnage const case_wiki = document.createElement("td") let a = document.createElement("a") a.href = el.wikipedia a.innerText = el.nom case_wiki.appendChild(a) const action = document.createElement("td") const btn_acheter = document.createElement("button") // stoquage temporaire de la clé JSON correspondant à la technologie à débloquer // pour éviter de référencer key, qui va sauter sur sa valeur finale let tmp = key let c = new Collegue(tmp) // charge les propriétés de la technologie depuis la bdd sans mettre à jour le style directement après await c.chargerDepuisBdd() /* fonction qui va s'activer lorsqu'on achète l'objet*/ btn_acheter.addEventListener("click", (event) =>{ // ne laisse acheter que si on a l'argent if(score >= c.cout){ // finalement, on lui débit son compte de points tel un vendeur de voitures score -= c.cout const score_aff = document.getElementById("score_affichage") score_aff.innerText="SCORE : " + score // narration seulement si c'est la première fois qu'on achète if(!(key in sacado)){ ouvrirAlerte("Vous avez débloqué "+ c.nom+" !!"+collegues[key]["narration"]) ouvrirAlerte("Incrémentation de la rentabilité passive de "+c.revenu_passif+" points !!") // et on ajoute l'amélioration dans l'abre des compétences débloquées sacado[key] = 1 }else{ // on incrémente la qtt d'objet dans son sacado sacado[key] += 1 } // on change le futur cout dans le tableau document.getElementById("case_cout_"+key).innerText = Number(c.cout * (1.1)**sacado[key]).toFixed(1) // augmentation du boost d'incrément revenu_passif += c.revenu_passif // incrémente le score implicite d'evolution pour permettre à la prochaine amelioration de s'afficher evolution_coll += 1 }else{ // PAS ASSEZ RICHE !!!!! alert("PAS ASSEZ RICHE !!!!!!!!!!!!") } }) btn_acheter.innerText = "Acheter" // n'afficher l'amélioration que si le score est assez élevé if(evolution_coll === parseInt(c.props.evolution)){ // met à jour le contenu du magasin // pour ne pas re-afficher cette ligne et éviter un clignotement magasin_coll[key] = true action.appendChild(btn_acheter) tr.appendChild(case_nom) tr.appendChild(case_boost) tr.appendChild(case_cout) tr.appendChild(case_wiki) tr.appendChild(action) table.appendChild(tr) } } } } // fonction appelée à chaque clic de souris function scoreCount(){ const score_aff = document.getElementById("score_affichage") score += boost score_aff.innerText="SCORE : " + Number(score).toFixed(1) // check refresh la table magasin pour afficher une amélioration si un palier est atteint remplirMagasinTechnologies() remplirMagasinCollegues() } // revenu passif à chaque seconde function augmenterScorePassivement(){ const score_aff = document.getElementById("score_affichage") score += revenu_passif console.log("nv score : ",score) score_aff.innerText="SCORE : " + Number((score).toFixed(1)); setTimeout(() => { augmenterScorePassivement() }, 1000) }