You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
8.0 KiB

class AddNode extends Phaser.Scene{constructor(t,e,s,...i){super("AddNode"),this.father=t,this.gameR=e,this.selected=s,this.lCategory=[];let a=HEIGHT_WINDOW/14;this.style={font:a.toString()+"px stencil",fill:"#e2e2e2"},this.lastCategory=null,void 0===i&&(i=[]),this.option=i}create(){let t=HEIGHT_WINDOW/(4/3);this.add.rectangle(0,0,WIDTH_WINDOW,HEIGHT_WINDOW,0).setOrigin(0,0).setAlpha(.5),this.add.rectangle(0,HEIGHT_WINDOW/2,WIDTH_WINDOW,t,3487290).setOrigin(0,.5),this.createButtonCancel(),this.option.length>0?this.createButtonModify():this.createButtonAdd()}addButton(t,e,s,i=new Category,a){let h=this.createButton(t,e,s);return h.on("pointerdown",()=>this.click(h,i,a)),i!==this.lastCategory&&this.option.length>0&&(this.option[0]===a||void 0!==this.option[0]&&this.option[0].length>0&&this.option[0][0]===a[0]&&this.option[0][1]===a[1])&&(this.option.splice(0,1),this.lastCategory=i,this.click(h,i,a)),h}createButton(t,e,s,i=1.3*HEIGHT_BUTTON_TEXT,a=null){let h=this.add.image(t,e,s).setOrigin(.5,.5).setInteractive();return h.on("pointerover",()=>h.setFrame(1)),h.on("pointerout",()=>h.setFrame(0)),h.displayHeight=i,null===a?h.scaleX=h.scaleY:h.displayWidth=a,h}click(t,e,s){t.isTinted?e.remove(t):e.add(t,s)}newCategory(t,e,s){let i=new Category(t,e,s);return this.lCategory.push(i),i}addTitle(t,e,s){let i=this.add.text(t,e,s,this.style).setOrigin(.5,.5);return i.displayWidth>WIDTH_WINDOW&&(i.displayWidth=WIDTH_WINDOW,i.scaleY=i.scaleX),i}createButtonCancel(){this.createButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/15),"cancel",HEIGHT_BUTTON_TEXT).on("pointerdown",()=>this.cancel())}createButtonAdd(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"add",HEIGHT_BUTTON_TEXT).on("pointerdown",()=>this.addNode())}createButtonModify(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"modify",HEIGHT_BUTTON_TEXT).on("pointerdown",()=>this.modifyNode())}verifyCategory(){for(let t=0;t<this.lCategory.length;t++)if(!this.lCategory[t].validate())return!1;return!0}cancel(t){void 0!==t&&(t.click(),this.gameR.clickNode()),this.gameR.applyTree(),this.scene.resume("Game"),this.scene.stop("AddNode"),this.father.scene.remove("AddNode")}}class Bonus{constructor(t,e,s,i){this.texture=e,this.name=t,this.value=s,this.type=i}useOn(t){t.team.addScore(SCORE_BONUS)}}class Finish extends Phaser.Scene{constructor(t,e,s){super("Finish"),this.father=t,this.gameSave=e,this.score=s;let i=parseInt(getCookie(this.gameSave.level));isNaN(i)&&(i=this.score),console.log(i),this.score>=i&&setCookie(this.gameSave.level,this.score)}create(){this.add.rectangle(0,0,WIDTH_WINDOW,HEIGHT_WINDOW,0).setOrigin(0,0).setAlpha(.5),this.add.rectangle(0,HEIGHT_WINDOW/2,WIDTH_WINDOW,HEIGHT_WINDOW/2,3487290).setOrigin(0,.5)}addTitle(t){let e=HEIGHT_TITLE/1.5,s={font:e.toString()+"px stencil",fill:"#e2e2e2"},i=this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/2,t,s).setOrigin(.5,1);i.displayWidth>WIDTH_WINDOW&&(i.displayWidth=WIDTH_WINDOW,i.scaleY=i.scaleX),s={font:(e/2).toString()+"px stencil",fill:"#e2e2e2",align:"center"},this.add.text(WIDTH_WINDOW/2,i.y+i.displayHeight,"SCORE : "+this.score.toString()+"\n"+selectWord("RECORD SCORE : ","SCORE RECORD : ")+getCookie(this.gameSave.level),s).setOrigin(.5,.5)}createButton(t,e){let s=this.add.image(t,HEIGHT_WINDOW/8*7,e).setOrigin(.5,.5).setInteractive();return s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.displayHeight=HEIGHT_BUTTON_TEXT,s.scaleX=s.scaleY,s}btnRetry(t){t.on("pointerdown",()=>this.retry())}retry(){this.close(),console.log("RETRY"),-1===this.father.scene.getIndex("Game")&&newGame(this.father),this.father.scene.start("Game")}btnHome(t){t.on("pointerdown",()=>this.home())}home(){console.log("HOME"),this.close(),this.father.scene.remove("Game"),this.father.scene.start("Type")}btnNext(t){t.on("pointerdown",()=>this.next())}next(){console.log("NEXT"),this.gameSave.setLevel(getNextLevel(this.gameSave.level)),this.retry()}close(){this.sound.stopAll(),this.father.scene.remove("GamingBoard"),this.father.scene.remove("Finish")}}function selectWord(t,e){switch(LANG){case"fr":return e.toString().toUpperCase();default:return t.toString().toUpperCase()}}function newGame(t,e,s=new Game(t,e)){return-1!==t.scene.getIndex("Game")&&t.scene.remove("Game"),t.scene.add("Game",s),s}function chooseTarget(t,e){let s=2*WIDTH_MAP,i=[];return e.forEach(function(e){if(e!==t){let a=Math.hypot(e.x-t.x,e.y-t.y);s>=a&&(s>a&&(s=a,i=[]),i.push(e))}}),i.length>1?i[Math.floor(Math.random()*(i.length+1))]:i[0]}function toJson(t,e,s=!1){let i;switch(typeof e){case"string":i='"'+t.toString()+'":"'+e+'"';break;default:i='"'+t.toString()+'":'+e}return s||(i+=","),i}function endLineJson(t){return t.length>0&&","===t[t.length-1]&&(t=t.substr(0,t.length-1)),t}function getNextLevel(t=""){let e=t;return e=e.slice(0,-1)+(parseInt(t[t.length-1])+1).toString(),console.log(t[t.length-1]),e[e.length-1]>=NUMBER_LEVEL?t:e}function setCookie(t,e){let s=new Date;s.setTime(s.getTime()+31104e6);let i="expires="+s.toUTCString();document.cookie=t+"="+e+";"+i+";path=/;SameSite=Lax"}function getCookie(t){let e=document.cookie.split("; ");for(let s=0;s<e.length;s++){let i=e[s].split("=");if(i[0]===t.toString())return i[1]}return""}class HealthBar{constructor(t,e="",s,i,a,h,n,o,r=COLOR_RED,l=!0){this.bar=new Phaser.GameObjects.Graphics(t),this.width=Math.floor(s),this.height=Math.floor(i),this.valueMax=n,this.value=n,this.color=o,this.colorMin=r,this.bonus=[],this.draw(),t.add.existing(this.bar);let c={font:(i-=4).toString()+"px stencil",fill:"#000000"};this.nameText=t.add.text(a,h,e,c).setOrigin(0,0),this.nameText.alpha=.5,this.nameText.displayWidth>.9*this.width&&(this.nameText.displayWidth=.9*this.width,this.nameText.scaleY=this.nameText.scaleX),this.setX(a,l),this.setY(h)}addBonus(t){t.value>0&&this.bonus.push(t),this.draw()}removeBonus(t){this.bonus.splice(this.bonus.indexOf(t),1),this.draw()}setValue(t){t<0&&(t=0),t>this.valueMax&&(t=this.valueMax),t!==this.value&&(this.value=t,this.draw())}getValue(){let t=this.value;return this.bonus.forEach(e=>t+=e.value),t}setValueMax(t=this.valueMax){if(t<=0)return;let e=t-this.valueMax;this.valueMax=t,this.setValue(this.value+e)}decrease(t){let e=t;return this.bonus.forEach(s=>{(e=s.decrease(t))>0&&this.bonus.splice(this.bonus.indexOf(s),1)}),this.value-=e,e=0,this.value<0&&(e=-this.value,this.value=0),this.draw(),e}increase(t){this.value+=t,this.value>this.valueMax&&(this.value=this.valueMax),this.draw()}setX(t,e=!0){e&&(t-=this.width/2),this.bar.setX(t),this.nameText.setX(t+5)}setY(t){this.bar.setY(t),this.nameText.setY(t)}draw(){this.bar.clear(),this.bar.fillStyle(0),this.bar.fillRect(0,0,this.width,this.height),this.bar.fillStyle(16777215),this.bar.fillRect(2,2,this.width-4,this.height-4);let t=this.valueMax;this.bonus.forEach(e=>t+=e.value);let e=this.value/this.valueMax;e<1/3?this.bar.fillStyle(this.colorMin):this.bar.fillStyle(this.color);let s=(e=this.value/t)*(this.width-4);this.bar.fillRect(2,2,s,this.height-4);let i=s+2;this.bonus.forEach(e=>{let s=e.value/t;this.bar.fillStyle(e.color);let a=s*(this.width-4);this.bar.fillRect(i,2,a,this.height-4),i+=a})}destroy(){this.bar.destroy(),this.nameText.destroy()}getJson(){let t="{";return t=endLineJson(t+=toJson("valueMax",this.valueMax)+toJson("color",this.color)+toJson("colorMin",this.colorMin)),t+="}"}setVisible(t){this.bar.setVisible(t),this.nameText.setVisible(t)}}class ManageLang extends Phaser.Scene{constructor(t,e){super(t),this.name=t,this.father=e,this.otherScenes=[]}addOtherScenes(t){this.otherScenes.push(t)}create(){this.createFlags()}createFlags(){this.diffXFlag=0,this.createFlag("fr"),this.createFlag("en")}createFlag(t){let e=this.add.image(WIDTH_WINDOW-10-this.diffXFlag,10,t).setOrigin(1,0).setInteractive();e.displayHeight=WIDTH_BUTTON/2,e.scaleX=e.scaleY,this.diffXFlag=this.diffXFlag+e.displayWidth+10,e.on("pointerdown",()=>this.setLang(t))}setLang(t){t!==LANG&&(LANG=t,this.father.scene.add("LoadFile",new LoadFile(this.father,this.name)),this.father.scene.start("LoadFile"),this.otherScenes.forEach(t=>this.father.scene.stop(t)))}}class Node{constructor(t=""){this.type=t}getTreeJson(t=""){let e="{"+toJson("type",this.type);return e+='"option":['+t+"]}"}}