From 5ef302d4d587de96864173a06b4e22d8dd029954 Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Tue, 11 Aug 2020 22:34:37 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20l'icone=20Waria=20-=20Modification?= =?UTF-8?q?=20des=20fichiers=20json=20du=20mode=20de=20jeu=20Duel=20-=20Co?= =?UTF-8?q?rrection=20d'un=20probl=C3=A8me=20lors=20de=20la=20suppression?= =?UTF-8?q?=20d'une=20action=20de=20l'arbre=20(elle=20n'=C3=A9tait=20pas?= =?UTF-8?q?=20vraiment=20supprim=C3=A9e)=20-=20Dor=C3=A9navant,=20les=20bo?= =?UTF-8?q?nus=20d'attaque=20se=20cumule=20-=20Ajout=20du=20record=20de=20?= =?UTF-8?q?score=20par=20niveau=20-=20Ajout=20de=20l'affichage=20du=20reco?= =?UTF-8?q?rd=20dans=20la=20sc=C3=A8ne=20de=20s=C3=A9lection=20et=20sur=20?= =?UTF-8?q?la=20page=20de=20fin=20de=20jeu=20-=20Suppression=20d'un=20lien?= =?UTF-8?q?=20css=20dans=20le=20html=20qui=20=C3=A9tait=20inutil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/index.html | 2 +- Code/public/icon/favicon.png | Bin 0 -> 30472 bytes Code/public/js/level2.min.js | 2 +- Code/public/js/level3.min.js | 2 +- Code/public/json/duel2.json | 2 +- Code/public/json/duel3.json | 2 +- Code/public/json/duel4.json | 2 +- Code/public/json/duel5.json | 2 +- Code/public/json/duel6.json | 2 +- Code/public/json/duel7.json | 2 +- Code/src/js/level2/AddAttack.js | 5 +- Code/src/js/level2/AddCondition.js | 9 ++- Code/src/js/level2/AddMove.js | 5 +- Code/src/js/level2/BonusAttack.js | 2 +- Code/src/js/level2/Game.js | 16 ++--- Code/src/js/level2/LevelSelect.js | 38 ++++++++---- Code/src/js/level2/LoadFile.js | 8 +-- Code/src/js/level2/Winner.js | 7 ++- Code/src/js/level3/AddNode.js | 7 ++- Code/src/js/level3/Finish.js | 12 +++- Code/src/js/level3/Function.js | 15 +---- Code/src/js/level3/HealthBar.js | 5 +- Code/src/json/duel2.json | 72 ++++++---------------- Code/src/json/duel3.json | 69 ++++++++++++++------- Code/src/json/duel4.json | 44 +++++++++++--- Code/src/json/duel5.json | 94 ++++++++++++++++++++++++----- Code/src/json/duel6.json | 42 +++++++------ Code/src/json/duel7.json | 52 +++++++++------- 28 files changed, 323 insertions(+), 197 deletions(-) create mode 100644 Code/public/icon/favicon.png diff --git a/Code/index.html b/Code/index.html index cdefc7f..67e2b35 100644 --- a/Code/index.html +++ b/Code/index.html @@ -3,10 +3,10 @@ Waria + - diff --git a/Code/public/icon/favicon.png b/Code/public/icon/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e26aba799c5113629c163d0581fa381b878e664 GIT binary patch literal 30472 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/2&&(e.displayWidth=WIDTH_WINDOW/2,e.scaleY=e.scaleX);let t=super.newCategory("direction",!0,!0);super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,"fleeFrom",t,!1),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"moveToward",t,!0),(e=super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?"))).displayWidth>WIDTH_WINDOW/2&&(e.displayWidth=WIDTH_WINDOW/2,e.scaleY=e.scaleX);let s=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/6*4,HEIGHT_WINDOW/3.2,"enemyBot",s,!0);let i=super.addButton(WIDTH_WINDOW/6*5,HEIGHT_WINDOW/3.2,"bonus",s,!1);e=super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("WHAT BONUS ? (OPTIONAL)","QUEL BONUS ? (FACULTATIF)"));let h=super.newCategory("target",!0,!1),a=super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),"bonusSpeed",h,"speed"),o=super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),"bonusAttack",h,"attack"),n=super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/12),"bonusShield",h,"shield");s.addEvent(()=>this.clickBonus(i,e,a,o,n)),this.clickBonus(i,e,a,o,n)}clickBonus(e,...t){e.isTinted?t.forEach(e=>e.setVisible(!0)):t.forEach(e=>e.setVisible(!1))}addNode(){super.verifyCategory()&&(this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"move",[this.lCategory[0].getValue(),this.lCategory[1].getValue(),this.lCategory[2].getValue()])),super.cancel())}modifyNode(){super.verifyCategory()&&(this.selected.node.toward=this.lCategory[0].getValue(),this.selected.node.enemyBot=this.lCategory[1].getValue(),this.selected.node.typeBonus=this.lCategory[2].getValue(),this.selected.rect.setFrame(this.selected.node.getFrame()),super.cancel())}}class Attack extends Node{constructor(e=1){super("attack"),e>1/3?e>2/3?(e=1,this.percentBonus=1):(e=2/3,this.percentBonus=1.5):(e=1/3,this.percentBonus=2),this.percentRange=e}do(e){return!(!e.haveTarget()||!e.isTargetInRange(this.percentRange))&&e.attackTarget(this.percentBonus)}getFrame(){return 3*this.percentRange-1}getTreeJson(){return super.getTreeJson(this.getOptionJson())}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,o,n=new CategoryBar,r=1,l){super(e,t,s,i,h,a,void 0!==l?l:n.valueMax,o,o,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let d={font:i.toString()+"px stencil",fill:"#e2e2e2"};this.text=this.scene.add.text(this.bar.x+this.width+10,this.bar.y,this.value.toString(),d).setOrigin(0,0),this.categoryBar=n,this.setValue(0),this.categoryBar.setValueOf(this,r)}addEvent(e,t){this.event=e,this.context=t,this.doEvent()}doDrag(){let e=this.scene.input;e.x>=this.bar.x-10&&e.x<=this.bar.x+this.width+10&&e.y>=this.bar.y&&e.y<=this.bar.y+this.height&&(this.scene.pauseScene(),this.clickOn())}clickOn(){this.onMove(),this.scene.input.on("pointermove",()=>this.onMove()),this.scene.input.on("pointerup",()=>this.stopClick())}stopClick(){this.scene.input.off("pointermove"),this.scene.input.off("pointerup")}onMove(){this.setValWithX(this.scene.input.x)}doEvent(){void 0!==this.event&&void 0!==this.context&&this.event.call(this.context,this.value)}setValWithX(e){let t=this.value;this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax)),t!==this.value&&this.doEvent()}draw(){super.draw();let e=this.value/this.valueMax*this.width-5;this.bar.fillStyle(9868950),this.bar.fillRect(e,0,10,this.height),void 0!==this.text&&this.text.setText(this.value+1)}getJson(e=[]){let t=super.getJson();return t=t.substr(0,t.length-1)+",",t+='"lText":[',e.forEach(e=>{t+='"'+e+'",'}),t=endLineJson(t),t+="]",t+="}"}destroy(){super.destroy(),this.text.destroy(),this.scene.input.off("pointerdown",this.doDrag,this)}}class BonusAttack extends Bonus{constructor(e,t,s){super(e,t,s,"attack")}useOn(e){super.useOn(e),e.setAttackBonus(this.value)}}class BonusHealth{constructor(e,t){this.value=e,this.color=t}decrease(e){this.value-=e;let t=0;return this.value<0&&(t=-this.value,this.value=0),t}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,"shield"),this.time=i,this.color=h}useOn(e,t){super.useOn(e);let s=new BonusHealth(this.value,this.color);e.shield.addBonus(s),t.time.addEvent({delay:this.time,callback:()=>e.shield.removeBonus(s)})}}class BonusSpeed extends Bonus{constructor(e="",t,s,i){super(e,t,s,"speed"),this.time=i}useOn(e,t){super.useOn(e),e.increaseSpeedBonus(this.value-1),t.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value-1)})}}class BonusView extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,t,s,i.texture),this.setOrigin(.5,.5),this.displayHeight=HEIGHT_BONUS,this.scaleX=this.scaleY,e.add.existing(this),this.bonus=i}useOn(e){this.bonus.useOn(e,this.scene),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",e).setOrigin(.5,.5);let t=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();WIDTH_WINDOW>HEIGHT_WINDOW?(t.displayHeight=HEIGHT_WINDOW/5,t.scaleX=t.scaleY):(t.displayWidth=WIDTH_WINDOW/1.5,t.scaleY=t.scaleX),t.on("pointerout",()=>t.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Button extends Phaser.GameObjects.Sprite{constructor(e,t,s,i,h,a,o,n=0,r=!0){super(e,t,s,a),this.name=a,this.setInteractive().setVisible(r),this.displayHeight=h,this.displayWidth=i,this.line=n,this.on("pointerout",()=>this.changeFrame(0)),this.on("pointerover",()=>this.changeFrame(1)),this.on("pointerdown",o),this.changeFrame(0),e.add.existing(this)}changeFrame(e=0){this.setFrame(e+2*this.line)}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}addEvent(e){this.event=e}add(e,t){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lValue=[],this.lBtn=[]),this.lValue.push(t),this.lBtn.push(e),e.tint=COLOR_SELECTED,this.oneChange()}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint(),this.oneChange()}oneChange(){void 0!==this.event&&this.event()}}class CategoryBar{constructor(e=VALUE_MAX_BAR,t=1){this.startValue=t,this.valueMax=e,this.point=this.valueMax}addPoint(e){if(this.point+=e,this.point<0){let e=this.point;return this.point=0,e}return this.point>this.valueMax&&(this.point=this.valueMax),0}setValueOf(e,t){let s=t-e.value,i=e.value;this.point>=s?e.setValue(t):e.setValue(e.value+this.point),this.addPoint(i-e.value),this.draw()}addText(e,t,s,i,h){this.text=t;let a={font:h.toString()+"px stencil",fill:"#e2e2e2"};this.textScene=e.add.text(s,i,this.text,a).setOrigin(0,0),this.draw()}setTextPos(e,t){this.textScene.setX(e),this.textScene.setY(t)}setText(e){this.text=e,this.draw()}draw(){this.textScene.setText(this.text+this.point)}destroy(){this.textScene.destroy()}}class Condition extends Node{constructor(e,t=!1,s=!1,i,h){super("condition"),this.shieldFilter=t,this.rangeFilter=s,this.shield=i,this.range=h,this.myself=e,this.lNode=[]}addNode(e){this.lNode.push(e)}do(e){if(this.doCondition(e))for(let t=0;te+=t.getTreeJson()+","),e=endLineJson(e),e+="]}"}getOptionJson(){return this.myself+","+this.shieldFilter+","+this.rangeFilter+","+this.shield+","+this.range}}class Description extends ManageLang{constructor(e){super("Description",e)}create(){super.create();let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW,s=this.add.image(e,t,"cancel").setOrigin(.5,1).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.return()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY,this.loadBonus()}loadBonus(){let e,t,s;this.width=WIDTH_WINDOW/3-20,this.height=HEIGHT_WINDOW/4,WIDTH_WINDOW>HEIGHT_WINDOW?(this.nbWidth=1,this.nbHeight=3,e=WIDTH_WINDOW/3,t=0,s=0):(this.nbWidth=3,this.nbHeight=1,e=0,t=HEIGHT_WINDOW/3.5,s=WIDTH_BUTTON/1.5);let i=WIDTH_BUTTON/1.5;this.createList(lShieldBonus,s,i,!0),s+=e,i+=t,this.createList(lSpeedBonus,s,i,!1),s+=e,i+=t,this.createList(lAttackBonus,s,i,!1)}createList(e,t,s,i=!0){this.createCategoryBonus(t,s,this.width*this.nbWidth,this.height*this.nbHeight),e.forEach(e=>{let h="";void 0!==e.time&&(h=" - "+selectWord("TIME","TEMPS")+" : "+e.time/1e3);let a="";if(void 0!==e.value){let t="x";i&&(t="+"),a="BONUS : "+t+e.value}this.createBonusDescription(t,s,this.width,this.height,e.texture,e.name,a+h),this.nbHeight>1&&(s+=this.height),this.nbWidth>1&&(t+=this.width)})}createCategoryBonus(e,t,s,i){e+=10,t+=10,this.add.rectangle(e,t,s,i,8816262).setOrigin(0,0)}createBonusDescription(e,t,s,i,h,a,o){e+=20,t+=20,s-=20,i-=20,this.add.rectangle(e,t,s,i,16777215).setOrigin(0,0);let n=this.add.image(e+5,t+5,h).setOrigin(0,0),r={fill:"#000000"};WIDTH_WINDOW>HEIGHT_WINDOW?(n.displayHeight=s/5,n.scaleX=n.scaleY,r.font=(n.displayHeight/3).toString()+"px stencil",this.add.text(e+n.displayWidth+10,t+5+n.displayHeight/2,a.toString(),r).setOrigin(0,.5),r.font=(n.displayHeight/4).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/2,o.toString(),r).setOrigin(0,.5)):(n.displayHeight=i/2,n.scaleX=n.scaleY,n.displayWidth>s&&(n.displayWidth=s,n.scaleY=n.scaleX),r.font=(s/10).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/3,a.toString(),r).setOrigin(0,0),r.font=(s/15).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/1.5,o.toString(),r).setOrigin(0,1))}return(){this.father.scene.start("Game"),this.father.scene.remove("Description")}}class Game extends ManageLang{constructor(e,t="level1"){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,this.level=t,this.listPositionRobotInit=[],this.scoreText=0}preload(){let e,t={font:"100px stencil",fill:"#e2e2e2"};this.load.on("start",()=>{(e=this.add.text(.5*WIDTH_WINDOW,.5*HEIGHT_WINDOW,selectWord("LEVEL LOADING ...","CHARGEMENT DU NIVEAU ..."),t).setOrigin(.5,.5)).alpha=.5}),this.load.on("complete",()=>{e.destroy()}),this.cache.json.exists("level")&&this.cache.json.remove("level"),this.load.json("level","public/json/"+this.level+".json"),console.log("PRELOAD"),this.createGamingBoard()}create(){super.create();let e=this.cache.json.get("level");if(void 0!==e)this.loadSave(e),this.doLine=!1,this.createButtons(),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()}),this.input.keyboard.on("keydown-E",()=>{this.clickPencil()}),this.input.keyboard.on("keydown-ENTER",()=>{this.clickPlus()}),this.scene.setVisible(!0,"GamingBoard"),this.setScore(0),this.gm.getMyTeam().addEventScore(this.setScore,this);else{console.log("ERROR : LEVEL UNDEFINED ("+this.level+")"),new Button(this,10,10,WIDTH_BUTTON,WIDTH_BUTTON,"back",()=>this.clickBack()).setOrigin(0,0);let e={font:"50px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/2,selectWord("LEVEL UNDEFINED","NIVEAU INDEFINI"),e).setOrigin(.5,.5)}}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}createGamingBoard(){this.gm=new GamingBoard(this),-1!==this.father.scene.getIndex("GamingBoard")&&this.father.scene.remove("GamingBoard"),this.father.scene.add("GamingBoard",this.gm),this.scene.launch("GamingBoard"),this.gm.pause()}loadSave(e){this.loadBonus(e.lBonus),this.loadTeam(e);let t=[];if(this.gm.getMyTeam().listRobot.forEach(e=>t.push(e)),void 0!==this.listRobot)for(let e=0;e1&&this.robotSelected.setTint(COLOR_SELECTED)}applyTree(){void 0!==this.tree&&void 0!==this.robotSelected&&(this.tree.sort(),this.robotSelected.setNodes(this.tree.getNode()))}loadTree(e,t=CENTERX_TREE,s=OFFY_TREE_BEGIN){let i;if(void 0!==e.x&&void 0!==e.y)i=new RectangleNode(e.x,e.y,this,e.type,e.option),void 0!==e.lNode&&e.lNode.length>0&&e.lNode.forEach(e=>i.addRect(this.loadTree(e)));else if(i=new RectangleNode(t,s,this,e.type,e.option),void 0!==e.lNode&&e.lNode.length>0){let h=e.lNode.length,a=t-OFFX_TREE/2*(h-1),o=s+OFFY_TREE;e.lNode.forEach(e=>{i.addRect(this.loadTree(e,a,o)),a+=OFFX_TREE})}return i}loadInitSave(e,t,...s){let i=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,7*HEIGHT_BAR,HEIGHT_BAR,e.valueMax);for(let t=0;t{t+=this.loadT(s.name,s.freeForAll,s.robots,e.robotRandomPosition,t,s.color)}),this.gm.addEventMyTeam(this.setRobotSelected,this)}}loadT(e=MY_TEAM,t,s,i,h=0,a){let o=new Team(e,t);return this.loadRobot(s,i,h).forEach(e=>o.addRobot(e)),void 0!==a&&o.getRobots().forEach(e=>e.setTint(a)),this.gm.addTeam(o),o.listRobot.length}loadRobot(e=[],t=!1,s=0){let i=s,h=[];return e.forEach(e=>{let s=[];e.lNode.forEach(e=>{s.push(this.loadNode(e))}),t&&(void 0===this.listPositionRobotInit[i]?(e.x=Math.random()*(1-e.width/2-e.width/2)+e.width/2,e.y=Math.random()*(1-e.height/2-e.height/2)+e.height/2,this.listPositionRobotInit[i]=new Position(e.x,e.y)):(e.x=this.listPositionRobotInit[i].x,e.y=this.listPositionRobotInit[i].y)),h.push(new Robot(WIDTH_MAP*e.height,WIDTH_MAP*e.width,WIDTH_MAP*e.x,WIDTH_MAP*e.y,this.gm,e.name,e.speed,e.speedReload,e.range,e.damage,s)),i+=1}),h}loadNode(e){let t;switch(e.type){case"condition":t=new Condition(e.option[0],e.option[1],e.option[2],e.option[3],e.option[4]);break;case"move":t=new Move(e.option[0],e.option[1]);break;case"attack":t=new Attack(e.option[0]);break;default:return}return void 0!==e.lNode&&e.lNode.forEach(e=>t.addNode(this.loadNode(e))),t}loadBonus(e=[]){e.forEach(e=>{this.gm.addBonus(this.loadB(e))})}loadB(e){let t;switch(e.style){case"speed":t=lSpeedBonus[e.number];break;case"attack":t=lAttackBonus[e.number];break;case"shield":t=lShieldBonus[e.number];break;default:return null}return new BonusView(this.gm,e.x*WIDTH_MAP,e.y*WIDTH_MAP,t)}finish(){let e;console.log("FINISH"),e=this.gm.winner()?new Winner(this.father,this,this.score):new Looser(this.father,this,this.score),this.father.scene.add("Finish",e),this.scene.pause("Game"),this.scene.launch("Finish"),this.robotSelected=void 0}clickNode(){this.tryClick(),this.selected=this.tree.getSelected(),void 0!==this.selected&&(this.selected!==this.tree&&(this.pencilBtn.setVisible(!0),this.binBtn.setVisible(!0)),this.selected.canAddNode&&this.plusBtn.setVisible(!0))}doDrag(e,t,s,i){t.setX(s),t.setY(i)}dragStart(){console.log("START DRAG"),this.doLine=!0,this.pauseScene()}dragEnd(){console.log("END DRAG"),this.applyTree(),this.doLine=!1}pauseScene(){this.playBtn.line=0,this.playBtn.changeFrame(0),this.gm.pause()}resume(){this.playBtn.line=1,this.playBtn.changeFrame(0),this.gm.resume()}createButtons(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=WIDTH_BUTTON,i=1.1*s,h=0;new Button(this,10,10,s,s,"back",()=>this.clickBack()).setOrigin(0,0),new Button(this,WIDTH_WINDOW-i,HEIGHT_WINDOW,s,s,"bonusBtn",()=>this.clickBonus()).setOrigin(1,1),new Button(this,WIDTH_WINDOW,HEIGHT_WINDOW,s,s,"save",()=>this.clickSave()).setOrigin(1,1),this.playBtn=new Button(this,e,t,s,s,"play",()=>this.clickPlay()).setOrigin(1,0),h=1===SPEED_GAME?0:1,this.speedBtn=new Button(this,e-i,t,s,s,"speed",()=>this.clickSpeed(),h).setOrigin(1,0),this.pencilBtn=new Button(this,e-2*i,t,s,s,"pencil",()=>this.clickPencil(),0,!1).setOrigin(1,0),this.binBtn=new Button(this,e-3*i,t,s,s,"bin",()=>this.clickBin(),0,!1).setOrigin(1,0),this.plusBtn=new Button(this,e-4*i,t,s,s,"plus",()=>this.clickPlus(),0,!1).setOrigin(1,0),h=this.father.sound.mute?1:0,this.muteBtn=new Button(this,e-5*i,t,s,s,"mute",()=>this.clickMute(),h).setOrigin(1,0);let a={font:(s/2).toString()+"px stencil",fill:"#e2e2e2"};this.scoreText=this.add.text(OFFX_MAP,t,"SCORE : "+this.scoreText,a).setOrigin(0,0),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}setScore(e){this.score=e,this.scoreText.setText("SCORE : "+this.score)}clickBonus(){this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.add("Description",new Description(this.father,this)),this.scene.start("Description")}clickSave(){let e='{"tree":'+this.tree.getJson()+',"initStat":'+this.initStat.getJson()+"}";console.log(e)}clickPlay(){this.gm.paused?this.resume():this.pauseScene(),this.playBtn.changeFrame(1)}clickSpeed(){1===SPEED_GAME?(SPEED_GAME=2,this.speedBtn.line=1):(SPEED_GAME=1,this.speedBtn.line=0),this.gm.time.timeScale=SPEED_GAME,this.speedBtn.changeFrame(1)}clickPencil(){if(void 0!==this.selected){switch(console.log("PENCIL"),this.selected.type){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this,this.selected,!1));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this,this.selected,!1));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,!1));break;default:return}this.scene.pause("Game"),this.scene.launch("AddNode")}}clickBin(){void 0!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.binBtn.changeFrame(0),this.tryClick())}clickPlus(){void 0!==this.selected&&this.selected.canAddNode&&(console.log("PLUS"),this.father.scene.add("PlusNode",new PlusNode(this.father,this,this.selected)),this.scene.launch("PlusNode"),this.plusBtn.changeFrame(0),this.scene.pause("Game"))}clickBack(){console.log("BACK"),this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.stop("Game"),this.father.scene.start("Type")}clickMute(){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.muteBtn.line=0):(this.father.sound.mute=!0,this.muteBtn.line=1),this.muteBtn.changeFrame(1)}tryClick(){this.pencilBtn.setVisible(!1),this.binBtn.setVisible(!1),this.plusBtn.setVisible(!1),void 0!=this.selected&&(this.selected.deselect(),this.selected=void 0)}setLevel(e){this.level!==e&&(this.level=e,this.listPositionRobotInit=[],this.robotSelected=void 0),console.log(this.level)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listTeam=[],listBonus=[],this.father=e,this.end=!1,this.paused=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit"),this.scene.setVisible(!1,"GamingBoard")}create(){let e=this.add.image(0,0,"background").setOrigin(0,0);e.alpha=.3,e.displayWidth=WIDTH_MAP,e.displayHeight=WIDTH_MAP,this.time.addEvent({delay:2e3,callback:this.upShield,callbackScope:this})}update(e,t){this.end||this.paused||(this.listTeam.forEach(e=>{e.actualise(this.getEnemyRobotTeam(e))||this.listTeam.splice(this.listTeam.indexOf(e),1)}),this.listTeam.forEach(e=>e.readAll()),(void 0===this.getMyTeam()||this.listTeam.length<=1)&&(this.end=!0,this.finish()))}addEventMyTeam(e,t){this.getMyTeam().addEvent(e,t)}getEnemyRobotTeam(e){let t=[];return this.listTeam.forEach(s=>{(e.freeForAll||s!==e)&&(t=t.concat(s.getRobots()))}),t}setRobotVisible(e=!0){this.listTeam.forEach(t=>t.setRobotVisible(e))}setEnemyRobotVisible(e=!0){let t=this.getMyTeam();this.listTeam.forEach(s=>{t!==s&&s.setRobotVisible(e)})}setBonusVisible(e=!0){listBonus.forEach(t=>t.setVisible(e))}finish(){this.pause(),this.father.finish()}winner(){return void 0!==this.getMyTeam()}pause(){this.sound.pauseAll(),this.paused=!0,this.time.timeScale=0}resume(){this.sound.resumeAll(),this.setRobotVisible(!0),this.setBonusVisible(!0),this.paused=!1,this.time.timeScale=SPEED_GAME}addTeam(e){this.listTeam.push(e)}addBonus(e){listBonus.push(e)}modifyNodes(e){let t=this.getMyTeam();return void 0!==t&&(t.modifyNodes(e),!0)}modifyValue(e,t,s,i){let h=this.getMyTeam();return void 0!==h&&(h.modifyValue(e,t,s,i),!0)}getMyTeam(){for(let e=0;ee.listRobot.forEach(e=>{e.addShield(SHIELD_PER_SECOND)})),this.time.addEvent({delay:1e3,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(e,t,s,i,h,a=10){this.scene=e,this.posX=t,this.posY=s,this.width=i,this.height=h,this.category=new CategoryBar(a),this.lBar=[],this.lText=[],this.category.addText(this.scene,selectWord("TOKENS : ","JETONS : "),this.posX,this.posY,this.height)}addBar(e,t,s,i=[]){this.lText.push(i),this.lBar.push(new Bar(this.scene,selectWord(i[0],i[1]),this.width,this.height,this.posX,this.posY,s,this.category,e,t)),this.posY+=1.5*this.height,this.category.setTextPos(this.posX,this.posY)}getJson(){let e="{";e+=toJson("valueMax",this.category.valueMax),e+='"lBar":[';for(let t=0;te.destroy())}}class LevelSelect extends ManageLang{constructor(e,t=""){super("LevelSelect"),this.father=e,this.level=t,console.log(getCookie(this.level))}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/6,"WARIA",e).setOrigin(.5,.5);let t=parseInt(getCookie(this.level));isNaN(t)&&(t=1);let s=WIDTH_WINDOW/5,i=HEIGHT_WINDOW/3,h=s,a=HEIGHT_WINDOW/2.5;for(let e=1;e<=t&&!(e>NUMBER_LEVEL);e++)this.createLevel(h,a,e),(h+=s)===WIDTH_WINDOW&&(h=s,a+=i);new Button(this,10,10,WIDTH_BUTTON,WIDTH_BUTTON,"back",()=>this.clickBack()).setOrigin(0,0)}createLevel(e,t,s=0){let i;i=WIDTH_WINDOW>HEIGHT_WINDOW?HEIGHT_WINDOW/4:WIDTH_WINDOW/4;let h=this.add.image(e,t,"rectangle").setOrigin(.5,.5).setInteractive();h.displayHeight=h.displayWidth=i;let a={font:(i/2).toString()+"px stencil",fill:"#000000"},o=this.add.text(e,t,s.toString(),a).setOrigin(.5,.5);h.on("pointerover",()=>this.over(h,o)),h.on("pointerout",()=>this.out(h,o)),h.on("pointerdown",()=>this.click(s))}over(e,t){e.setFrame(1),t.setColor("white")}out(e,t){e.setFrame(0),t.setColor("black")}click(e){e-=1,this.level+=e.toString(),newGame(this.father,this.level),this.scene.start("Game")}clickBack(){this.scene.start("Type")}}class LoadFile extends Phaser.Scene{constructor(e,t,s){super("LoadFile"),this.father=e,this.son=s,this.nameSon=t,this.father.scene.pause(this.nameSon),this.father.scene.stop(this.nameSon),this.father.scene.remove("LoadFile")}preload(){let e=this.add.graphics(),t=this.add.graphics(),s=WIDTH_WINDOW/2-160,i=HEIGHT_WINDOW/2-25;t.fillStyle(2236962,.8),t.fillRect(s,i,320,50),this.load.on("progress",function(t){e.clear(),e.fillStyle(16777215,1),e.fillRect(s+10,i+10,300*t,30)}),this.load.on("complete",()=>{e.destroy(),t.destroy()}),this.load.audio("shot","assets/sounds/shot.ogg"),this.load.audio("hit","assets/sounds/hit.ogg"),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadImage("bonusSpeed0","bonus/",!0),this.loadImage("bonusSpeed1","bonus/",!0),this.loadImage("bonusSpeed2","bonus/",!0),this.loadImage("bonusAttack0","bonus/",!0),this.loadImage("bonusAttack1","bonus/",!0),this.loadImage("bonusAttack2","bonus/",!0),this.loadImage("bonusShield0","bonus/",!0),this.loadImage("bonusShield1","bonus/",!0),this.loadImage("bonusShield2","bonus/",!0),this.loadImage("enemy","robots/"),this.loadImage("myBot","robots/"),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",550,150,"buttons/"),this.loadSprite("modify",550,150,"buttons/"),this.loadSprite("home",550,150,"buttons/"),this.loadSprite("next",550,150,"buttons/"),this.loadSprite("retry",550,150,"buttons/"),this.loadSprite("duel",269,262,"buttons/"),this.loadSprite("last",269,262,"buttons/"),this.loadSprite("team",269,262,"buttons/"),this.loadSprite("flag",269,262,"buttons/"),this.loadSprite("map",269,262,"buttons/"),this.loadSprite("play",100,100,"buttons/",!0),this.loadSprite("bin",100,100,"buttons/",!0),this.loadSprite("plus",100,100,"buttons/",!0),this.loadSprite("pencil",100,100,"buttons/",!0),this.loadSprite("speed",100,100,"buttons/",!0),this.loadSprite("mute",100,100,"buttons/",!0),this.loadSprite("save",100,100,"buttons/",!0),this.loadSprite("bonusBtn",100,100,"buttons/",!0),this.loadSprite("back",200,200,"buttons/",!0),this.loadSprite("shortRange",300,150,"buttons/"),this.loadSprite("mediumRange",300,150,"buttons/"),this.loadSprite("longRange",300,150,"buttons/"),this.loadSprite("shield0",300,150,"buttons/"),this.loadSprite("shield33",300,150,"buttons/"),this.loadSprite("shield66",300,150,"buttons/"),this.loadSprite("shield100",300,150,"buttons/"),this.loadSprite("bonusShield",300,150,"buttons/"),this.loadSprite("bonusSpeed",300,150,"buttons/"),this.loadSprite("bonusAttack",300,150,"buttons/"),this.loadSprite("myself",300,150,"buttons/"),this.loadSprite("enemyBot",300,150,"buttons/"),this.loadSprite("bonus",300,150,"buttons/"),this.loadSprite("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/",!0),this.loadSprite("moveNode",180,190,"nodes/",!0),this.loadSprite("conditionNode",180,190,"nodes/",!0),this.loadSprite("rectangle",400,400,"buttons/",!0),this.loadImage("background","others/",!0),this.loadImage("bullet","others/",!0),this.loadImage("logoWaria","others/",!0),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0),this.cache.json.exists("listBonus")&&(this.cache.json.remove("listBonus"),lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[]),this.load.json("listBonus","public/json/listBonus.json")}create(){this.loadBonus(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}loadBonus(){let e=this.cache.json.get("listBonus");void 0!==e&&(e.lSpeedBonus.forEach(e=>lSpeedBonus.push(new BonusSpeed(selectWord(e.name.en,e.name.fr),e.texture,e.value,e.time))),e.lShieldBonus.forEach(e=>lShieldBonus.push(new BonusShield(selectWord(e.name.en,e.name.fr),e.texture,e.value,e.time,e.color))),e.lAttackBonus.forEach(e=>lAttackBonus.push(new BonusAttack(selectWord(e.name.en,e.name.fr),e.texture,e.value))))}loadSprite(e,t,s,i="",h=!1){this.textures.exists(e)&&h||(this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/lang/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s}))}loadImage(e,t="",s=!1){this.textures.exists(e)&&s||(this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/lang/"+LANG+"/"+t+e+".png"))}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e,t,s){super(e,t,s)}create(){super.create(),super.addTitle(selectWord("GAME OVER","PARTIE PERDUE")),super.btnRetry(super.createButton(WIDTH_WINDOW/3,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/1.5,"home"))}}class Missile extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,0,0,t),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move extends Node{constructor(e,t=!0,s){super("move"),this.toward=e,this.enemyBot=t,this.typeBonus=s}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,this.getListBonus());if(void 0!==t){let s;return(s=!0===this.toward?this.moveToward(e,t):this.fleeFrom(e,t))||(t.useOn(e),listBonus.splice(listBonus.indexOf(t),1),e.target=null),!0}}return!1}getListBonus(){if(void 0!==this.typeBonus){let e=[];return listBonus.forEach(t=>{t.bonus.type===this.typeBonus&&e.push(t)}),e}return listBonus}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;if(e=this.toward?0:5,!this.enemyBot)switch(this.typeBonus){case"speed":e+=2;break;case"attack":e+=3;break;case"shield":e+=4;break;default:e+=1}return e}getTreeJson(){return super.getTreeJson(this.getOptionJson())}getOptionJson(){let e=this.toward+","+this.enemyBot;return void 0!==this.typeBonus&&(e+=',"'+this.typeBonus+'"'),e}}class PlusNode extends Phaser.Scene{constructor(e,t,s){super("PlusNode"),this.father=e,this.gameR=t,this.selected=s}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),this.createNode(),this.createButton()}createNode(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW/2,s=WIDTH_WINDOW/3,i=HEIGHT_WINDOW/10,h=i/1.5;ORIENTATION_VERTICAL&&(h/=1.5),this.createBtn(e-s,t,"attack",selectWord("ATTACK","ATTAQUE"),s,i,()=>this.click("attack")),this.createBtn(e,t,"move",selectWord("MOVE","DEPLACEMENT"),s,i,()=>this.click("move")),this.createBtn(e+s,t,"condition",selectWord("CONDITION","CONDITION"),s,i,()=>this.click("condition"))}createBtn(e,t,s,i,h,a,o){let n=this.add.sprite(e,t+a,s).setOrigin(.5,.5).setInteractive().on("pointerdown",o);n.displayHeight=2*a,n.scaleX=n.scaleY,n.displayWidth>h&&(n.displayWidth=h/1.1,n.scaleY=n.scaleX);let r={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"},l=this.add.text(e,t-a,i,r).setOrigin(.5,.5);return l.displayWidth=n.displayWidth,l.scaleY=l.scaleX,n}click(e){switch(e.toString()){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this.gameR,this.selected));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this.gameR,this.selected));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this.gameR,this.selected))}this.scene.launch("AddNode"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}createButton(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW-100,s=this.add.image(e,t,"cancel").setOrigin(.5,.5).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.cancel()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}}class Position{constructor(e,t){this.x=e,this.y=t}}class RectangleNode{constructor(e,t,s,i,h=[]){switch(i.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(s,e,t,"attackNode"),this.node=new Attack(h[0]),this.canAddNode=!1,this.line=s.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(s,e,t,"moveNode"),this.node=new Move(h[0],h[1],h[2]),this.canAddNode=!1,this.line=s.add.graphics();break;case"condition":this.rect=new Phaser.GameObjects.Image(s,e,t,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=s,this.line=s.add.graphics();break;case"waria":this.rect=new Phaser.GameObjects.Image(s,e,t,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=s,this.scene.add.existing(this.rect),this.scene.input.setDraggable(this.rect);break;default:return void console.log("Création d'un node echoué")}"waria"!==i.toString().toLowerCase()&&this.rect.setFrame(this.node.getFrame()),this.type=i,this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_NODE,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let e=0;ethis.addLine(e))}addLine(e){e.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNode(){if(void 0===this.node){let e=[];return this.lRect.forEach(function(t){e.push(t.getNode())}),e}return this.canAddNode&&(this.node.clearNodes(),this.lRect.forEach(e=>this.node.addNode(e.getNode()))),this.node}sort(e=((e,t)=>e.getX()-t.getX())){this.canAddNode&&(this.lRect.sort(e),this.lRect.forEach(function(t){t.canAddNode&&t.sort(e)}))}destroy(){this.line.destroy(),this.rect.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}delete(e){let t=this.lRect.indexOf(e);if(-1!==t)return this.lRect.splice(t,1),e.destroy(),!0;for(let t=0;tt+=s.getJson(e)+","),t=endLineJson(t)+"]"),t=endLineJson(t),t+="}"}destroy(){this.rect.destroy(),void 0!==this.line&&this.line.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}}class Robot{constructor(e,t,s,i,h,a="enemy",o=SPEED_BEGIN,n=SPEED_RELOAD_BEGIN,r=RANGE_BEGIN,l=DAMAGE_BEGIN,d=[]){this.speedBonus=1,this.attackBonus=1,this.name=a,this.height=e,this.width=t,this.x=s,this.y=i,this.life=new HealthBar(h,selectWord("LIFE","VIE"),2*this.width,this.width/3,this.x,this.y-this.width,LIFE,32768),this.shield=new HealthBar(h,selectWord("SHIELD","BOUCLIER"),2*this.width,this.width/3,this.x,this.y-1.5*this.width,SHIELD,255),this.canAttack=!0,this.missile=new Missile(h,"bullet",this.width/5,this.width/4),h.add.existing(this.missile),this.addScene(h),this.lNode=d,this.setSpeed(o),this.setSpeedReload(n),this.setRange(r),this.setDamage(l),this.setX(this.x),this.setY(this.y),this.team=void 0}addScene(e){this.scene=e,"enemy"===this.name?this.circle=this.scene.add.image(this.x,this.y,"enemy").setOrigin(.5,.5).setInteractive():this.circle=this.scene.add.image(this.x,this.y,"myBot").setOrigin(.5,.5).setInteractive(),this.circle.displayWidth=this.width,this.circle.displayHeight=this.height,this.circle.on("pointerdown",()=>this.click())}click(){void 0===this.circleRange?this.drawRange():this.eraseRange(),this.doEvent()}addEvent(e,t,s){this.eventClick=e,this.contextClick=t,this.valueClick=s}doEvent(){void 0!==this.eventClick&&void 0!==this.contextClick&&this.eventClick.call(this.contextClick,this,this.valueClick)}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.life.setX(this.x),this.shield.setX(this.x),this.circle.setX(this.x),this.drawCircleRange()}setY(e){this.y=e;let t=this.y-this.width,s=this.y-1.5*this.width;t<0?(s=this.y+this.width-this.shield.height,t=this.y+1.5*this.width-this.shield.height):s<0&&(s=t,t=this.y+this.width-this.shield.height),this.life.setY(t),this.shield.setY(s),this.circle.setY(this.y),this.drawCircleRange()}setTint(e){this.circle.setTint(e)}clearTint(){this.circle.clearTint()}setTarget(e){this.target=e}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(e,t){}setDamage(e=this.damage){this.damage=e+DAMAGE_BASE}setRange(e=this.range){this.range=e+RANGE_BASE,this.drawCircleRange()}setSpeed(e=this.speed){this.speed=e+SPEED_BASE}setSpeedReload(e=this.speedReload){this.speedReload=e+SPEED_RELOAD_BASE}setAttackBonus(e){this.attackBonus=e}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e}advanceToTarget(){return this.verifyTarget()&&this.advanceTo(this.target),!1}advanceTo(e){if(e.x!==this.x||e.y!==this.y){let t=!1,s=!1,i=this.getVelocity(e),h=i[0]+this.x,a=i[1]+this.y;return i[0]>=0&&h>=e.x||i[0]<=0&&h<=e.x?(this.setX(e.x),t=!0):this.setX(this.x+i[0]),i[1]>=0&&a>=e.y||i[1]<=0&&a<=e.y?(this.setY(e.y),s=!0):this.setY(this.y+i[1]),!(t&&s)}return!1}fleeFromTarget(){return!!this.verifyTarget()&&this.fleeFrom(this.target)}fleeFrom(e){if(this.target.x!==this.x||this.target.y!==this.y){let t=this.getVelocity(e,!0);return t[0]>=0&&this.x-this.width/2<=0?this.setX(this.width/2):t[0]<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-t[0]),t[1]>=0&&this.y-this.width/2<=0?this.setY(this.height/2):t[1]<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-t[1]),!0}return!1}getVelocity(e,t=!1){let s=[],i=e.x-this.x,h=e.y-this.y,a=Math.hypot(i,h);return s[0]=i/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,s[1]=h/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,t&&(this.x+this.width/2+s[0]>WIDTH_MAP||this.x-this.width/2-s[0]<0?(s[1]+=s[0]*Math.sign(s[1]),s[0]=0):(this.y+this.width/2-s[1]>WIDTH_MAP||this.y-this.width/2+s[1]<0)&&(s[0]+=s[1]*Math.sign(-s[0]),s[1]=0)),s}attackTarget(e=0){return!!this.verifyTarget()&&(this.canAttack&&this.attack(this.target,e),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(e,t){this.canAttack=!1,this.missile.setPosition(this.x,this.y).setVisible(!0),this.missile.setRotation(Math.atan2(this.y-this.target.y,this.x-this.target.x)-1.57),this.scene.sound.play("shot",{rate:SPEED_GAME});let s=this.calcDistance(this.target)*WIDTH_MAP/1e3;this.scene.tweens.add({targets:this.missile,x:e.x,y:e.y,ease:"Linear",duration:s,onComplete:()=>this.finishAttack(e,t)}),this.scene.time.addEvent({delay:SPEED_RELOAD/this.speedReload,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*this.attackBonus*DAMAGE*t,this.team)&&this.setTarget(null),this.missile.setVisible(!1),1!==this.attackBonus&&this.setAttackBonus(1)}reload(){this.canAttack=!0}beAttack(e,t){let s=this.shield.decrease(e),i={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},h=this.scene.add.text(this.x,this.y,e.toString(),i).setOrigin(0,1);return this.scene.tweens.add({targets:h,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>h.destroy()}),this.scene.sound.play("hit",{rate:SPEED_GAME}),console.log("HIT"),s>0&&(console.log("Shield Broken"),this.life.decrease(s)),this.addScore(t),this.die()}addScore(e){void 0!==e&&(e.addScore(SCORE_HIT),0===this.life.value&&e.addScore(SCORE_KILL))}isTargetInRange(e=1){return!!this.haveTarget()&&this.calcDistance(this.target)<=this.range*RANGE*e}calcDistance(e){return Math.hypot(e.x-this.x,e.y-this.y)}isAlive(){return this.life.value>0}die(){return 0===this.life.value&&(void 0!==this.circleRange&&this.circleRange.destroy(),this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){this.verifyTarget();for(let e=0;ethis.addNode(e))}setVisible(e){this.circle.setVisible(e),this.life.setVisible(e),this.shield.setVisible(e),void 0!==this.circleRange&&this.circleRange.setVisible(e)}getTreeJson(){let e="{"+toJson("type","waria");return e+='"lNode":[',this.lNode.forEach(t=>e+=t.getTreeJson()+","),e=endLineJson(e),e+="]}"}copy(e){e.lNode=this.lNode,e.damage=this.damage,e.speedReload=this.speedReload,e.speed=this.speed,e.range=this.range,void 0!==this.circleRange?e.drawRange():e.eraseRange()}}class Team{constructor(e="enemy",t=!1){this.freeForAll=t,this.listRobot=[],this.name=e,this.score=0}addEventScore(e,t){this.eventScore=e,this.context=t}addScore(e){this.score+=e,void 0!==this.eventScore&&void 0!==this.context&&this.eventScore.call(this.context,this.score)}addRobot(e){this.listRobot.push(e),e.team=this}readAll(){this.listRobot.forEach(e=>e.read())}getRobots(){return this.listRobot}actualise(e=[]){for(let t=0;t{i.addEvent(e,t,s),s++})}modifyValue(e,t,s,i){this.setSpeed(s),this.setRange(i),this.setSpeedReload(t),this.setDamage(e)}setRange(e){this.listRobot.forEach(t=>{t.setRange(e)})}setSpeed(e){this.listRobot.forEach(t=>{t.setSpeed(e)})}setSpeedReload(e){this.listRobot.forEach(t=>{t.setSpeedReload(e)})}setDamage(e){this.listRobot.forEach(t=>{t.setDamage(e)})}drawRange(){this.listRobot.forEach(e=>{e.drawRange()})}modifyNodes(e){this.listRobot.forEach(t=>{t.setNodes(e)})}setRobotVisible(e){this.listRobot.forEach(t=>t.setVisible(e))}}class Type extends ManageLang{constructor(e){super("Type",e)}preload(){}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/6,"WARIA",e).setOrigin(.5,.5);let t=this.add.sprite(WIDTH_WINDOW/8*3,HEIGHT_WINDOW/4*2,"duel").setInteractive();this.createbutton(t,"duel");let s=this.add.sprite(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/4*2,"last").setInteractive();this.createbutton(s,"last");let i=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/4*3,"team").setInteractive();this.createbutton(i,"team")}createbutton(e,t){WIDTH_WINDOW>HEIGHT_WINDOW?(e.displayHeight=HEIGHT_WINDOW/4,e.scaleX=e.scaleY):(e.displayWidth=WIDTH_WINDOW/4,e.scaleY=e.scaleX),e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(t))}clickPlay(e){-1!==father.scene.getIndex("LevelSelect")&&this.father.scene.remove("LevelSelect"),this.father.scene.add("LevelSelect",new LevelSelect(this.father,e)),this.scene.start("LevelSelect")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1,lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[];const MYSELF="myself",MY_TEAM="myTeam",SHIELD_PER_SECOND=5,COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,COLOR_RED=16711680,COLOR_ORANGE=16744192,COLOR_GREEN=32768,COLOR_RANGE=32768,COLOR_SPEED_RELOAD=8323327,NUMBER_LEVEL=8,COLOR_SELECTED=15718407,COLOR_MYSELF=6711039,WIDTH_WINDOW=window.innerWidth-20,HEIGHT_WINDOW=window.innerHeight-20;var OFFY_MAP,WIDTH_MAP,OFFY_TREE_BEGIN,CENTERX_TREE,HEIGHT_TITLE,HEIGHT_NODE,HEIGHT_BUTTON_TEXT,OFFX_MAP=WIDTH_WINDOW/20,ORIENTATION_VERTICAL=!0;WIDTH_WINDOW.4*HEIGHT_WINDOW&&(WIDTH_MAP=.4*HEIGHT_WINDOW,OFFX_MAP*=3),OFFY_TREE_BEGIN=WIDTH_MAP+2*OFFY_MAP,CENTERX_TREE=WIDTH_WINDOW/2,HEIGHT_TITLE=WIDTH_WINDOW/5,HEIGHT_NODE=(HEIGHT_WINDOW-WIDTH_MAP)/6):(ORIENTATION_VERTICAL=!1,HEIGHT_NODE=HEIGHT_WINDOW/7,HEIGHT_BUTTON_TEXT=HEIGHT_WINDOW/9,(WIDTH_MAP=.8*HEIGHT_WINDOW)>.5*WIDTH_WINDOW&&(HEIGHT_NODE=(WIDTH_WINDOW-((WIDTH_MAP=.4*WIDTH_WINDOW)+OFFX_MAP))/6,HEIGHT_BUTTON_TEXT=HEIGHT_WINDOW/15),OFFY_TREE_BEGIN=(OFFY_MAP=(HEIGHT_WINDOW-WIDTH_MAP)/2)+WIDTH_MAP/8,CENTERX_TREE=(WIDTH_WINDOW-(WIDTH_MAP+OFFX_MAP+WIDTH_MAP/4))/2+(WIDTH_MAP+OFFX_MAP+WIDTH_MAP/4),HEIGHT_TITLE=HEIGHT_WINDOW/5);const WIDTH_LINE=HEIGHT_NODE/20,OFFX_TREE=HEIGHT_NODE,OFFY_TREE=1.1*HEIGHT_NODE,WIDTH_BUTTON=WIDTH_MAP/10,SCORE_HIT=5,SCORE_KILL=15,SCORE_BONUS=4,HEIGHT_BAR=WIDTH_MAP/20,LIFE=100,SHIELD=100,VALUE_MAX_BAR=5,SPEED=WIDTH_MAP/1e3,SPEED_BASE=1,SPEED_BEGIN=3,RANGE=WIDTH_MAP/16,RANGE_BASE=3,RANGE_BEGIN=2,SPEED_RELOAD=4e3,SPEED_RELOAD_BASE=2,SPEED_RELOAD_BEGIN=3,DAMAGE=2,DAMAGE_BASE=10,DAMAGE_BEGIN=2,HEIGHT_BONUS=WIDTH_MAP/10,HEIGHT_DAMAGE=WIDTH_MAP/20,DURATION_DAMAGE=700;class Winner extends Finish{constructor(e,t,s){super(e,t,s),setCookie(t.level.slice(0,-1),parseInt(t.level[t.level.length-1])+2)}create(){super.create(),super.addTitle(selectWord("YOU WIN","PARTIE GAGNÉE")),super.btnRetry(super.createButton(WIDTH_WINDOW/4,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/2,"home")),getNextLevel(this.gameSave.level)===this.gameSave.level||super.btnNext(super.createButton(WIDTH_WINDOW/4*3,"next"))}} \ No newline at end of file +class AddAttack extends AddNode{constructor(e,t,s,i=!0){i?super(e,t,s):super(e,t,s,!1,s.node.percentRange)}create(){console.log("ATTACK"),super.create(),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : ATTACK","AJOUTER ACTION : ATTAQUE")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("TARGET FILTERS","FILTRES CIBLES")),super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/3.2,"enemyBot",super.newCategory("target",!0,!0),!1);let e=super.newCategory("range",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),"shortRange",e,1/3),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),"mediumRange",e,2/3),super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/12),"longRange",e,1)}addNode(){if(super.verifyCategory()){let e=new RectangleNode(this.selected.getX(),this.selected.getY()+OFFY_TREE,this.gameR,"attack",[this.lCategory[1].getValue()]);this.selected.addRect(e),super.cancel(e)}}modifyNode(){super.verifyCategory()&&(this.selected.node.percentRange=this.lCategory[1].getValue(),this.selected.rect.setFrame(this.selected.node.getFrame()),super.cancel())}}class AddCondition extends AddNode{constructor(e,t,s,i=!0){i?super(e,t,s):s.node.shieldFilter?super(e,t,s,s.node.myself,[s.node.shield,"shield"]):super(e,t,s,s.node.myself,[s.node.range,"range"])}create(){super.create(),console.log("CONDITION"),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : CONDITION","AJOUTER ACTION : CONDITION")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("TARGET FILTERS","FILTRES CIBLES"));let e=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"enemyBot",e,!1),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/3.2,"myself",e,!0);let t=super.newCategory("shield",!0,!0);super.addButton(WIDTH_WINDOW/8,HEIGHT_WINDOW/(16/9),"shortRange",t,[1/3,"range"]),super.addButton(WIDTH_WINDOW/4*1.5,HEIGHT_WINDOW/(16/9),"mediumRange",t,[2/3,"range"]),super.addButton(WIDTH_WINDOW/4,HEIGHT_WINDOW/(16/12),"longRange",t,[1,"range"]);let s=this.add.graphics();s.lineStyle(10,16777215,1),s.lineBetween(WIDTH_WINDOW/2,HEIGHT_WINDOW/2,WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/13)),super.addButton(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/(16/9),"shield0",t,[0,"shield"]),super.addButton(WIDTH_WINDOW/8*7,HEIGHT_WINDOW/(16/9),"shield33",t,[1/3,"shield"]),super.addButton(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/(16/12),"shield66",t,[2/3,"shield"]),super.addButton(WIDTH_WINDOW/8*7,HEIGHT_WINDOW/(16/12),"shield100",t,[1,"shield"])}addNode(){if(super.verifyCategory()){let e;e="range"===this.lCategory[1].getValue()[1]?new RectangleNode(this.selected.getX(),this.selected.getY()+OFFY_TREE,this.gameR,"condition",[this.lCategory[0].getValue(),!1,!0,0,this.lCategory[1].getValue()[0]]):new RectangleNode(this.selected.getX(),this.selected.getY()+OFFY_TREE,this.gameR,"condition",[this.lCategory[0].getValue(),!0,!1,this.lCategory[1].getValue()[0],0]),this.selected.addRect(e),super.cancel(e)}}modifyNode(){super.verifyCategory()&&(this.selected.node.shieldFilter=!1,this.selected.node.rangeFilter=!1,"range"===this.lCategory[1].getValue()[1]?(this.selected.node.rangeFilter=!0,this.selected.node.range=this.lCategory[1].getValue()[0]):(this.selected.node.shieldFilter=!0,this.selected.node.shield=this.lCategory[1].getValue()[0]),this.selected.node.myself=this.lCategory[0].getValue(),this.selected.rect.setFrame(this.selected.node.getFrame()),super.cancel())}}class AddMove extends AddNode{constructor(e,t,s,i=!0){i?super(e,t,s):super(e,t,s,s.node.toward,s.node.enemyBot,s.node.typeBonus)}create(){console.log("MOVE"),super.create(),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : MOVE","AJOUTER ACTION : DEPLACEMENT"));let e=super.addTitle(WIDTH_WINDOW/4,HEIGHT_WINDOW/(16/3),selectWord("FLEE OR MOVE ?","RECULER OU AVANCER ?"));e.displayWidth>WIDTH_WINDOW/2&&(e.displayWidth=WIDTH_WINDOW/2,e.scaleY=e.scaleX);let t=super.newCategory("direction",!0,!0);super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,"fleeFrom",t,!1),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"moveToward",t,!0),(e=super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?"))).displayWidth>WIDTH_WINDOW/2&&(e.displayWidth=WIDTH_WINDOW/2,e.scaleY=e.scaleX);let s=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/6*4,HEIGHT_WINDOW/3.2,"enemyBot",s,!0);let i=super.addButton(WIDTH_WINDOW/6*5,HEIGHT_WINDOW/3.2,"bonus",s,!1);e=super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("WHAT BONUS ? (OPTIONAL)","QUEL BONUS ? (FACULTATIF)"));let h=super.newCategory("target",!0,!1),a=super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),"bonusSpeed",h,"speed"),o=super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),"bonusAttack",h,"attack"),n=super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/12),"bonusShield",h,"shield");s.addEvent(()=>this.clickBonus(i,e,a,o,n)),this.clickBonus(i,e,a,o,n)}clickBonus(e,...t){e.isTinted?t.forEach(e=>e.setVisible(!0)):t.forEach(e=>e.setVisible(!1))}addNode(){if(super.verifyCategory()){let e=new RectangleNode(this.selected.getX(),this.selected.getY()+OFFY_TREE,this.gameR,"move",[this.lCategory[0].getValue(),this.lCategory[1].getValue(),this.lCategory[2].getValue()]);this.selected.addRect(e),super.cancel(e)}}modifyNode(){super.verifyCategory()&&(this.selected.node.toward=this.lCategory[0].getValue(),this.selected.node.enemyBot=this.lCategory[1].getValue(),this.selected.node.typeBonus=this.lCategory[2].getValue(),this.selected.rect.setFrame(this.selected.node.getFrame()),super.cancel())}}class Attack extends Node{constructor(e=1){super("attack"),e>1/3?e>2/3?(e=1,this.percentBonus=1):(e=2/3,this.percentBonus=1.5):(e=1/3,this.percentBonus=2),this.percentRange=e}do(e){return!(!e.haveTarget()||!e.isTargetInRange(this.percentRange))&&e.attackTarget(this.percentBonus)}getFrame(){return 3*this.percentRange-1}getTreeJson(){return super.getTreeJson(this.getOptionJson())}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,o,n=new CategoryBar,r=1,l){super(e,t,s,i,h,a,void 0!==l?l:n.valueMax,o,o,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let d={font:i.toString()+"px stencil",fill:"#e2e2e2"};this.text=this.scene.add.text(this.bar.x+this.width+10,this.bar.y,this.value.toString(),d).setOrigin(0,0),this.categoryBar=n,this.setValue(0),this.categoryBar.setValueOf(this,r)}addEvent(e,t){this.event=e,this.context=t,this.doEvent()}doDrag(){let e=this.scene.input;e.x>=this.bar.x-10&&e.x<=this.bar.x+this.width+10&&e.y>=this.bar.y&&e.y<=this.bar.y+this.height&&(this.scene.pauseScene(),this.clickOn())}clickOn(){this.onMove(),this.scene.input.on("pointermove",()=>this.onMove()),this.scene.input.on("pointerup",()=>this.stopClick())}stopClick(){this.scene.input.off("pointermove"),this.scene.input.off("pointerup")}onMove(){this.setValWithX(this.scene.input.x)}doEvent(){void 0!==this.event&&void 0!==this.context&&this.event.call(this.context,this.value)}setValWithX(e){let t=this.value;this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax)),t!==this.value&&this.doEvent()}draw(){super.draw();let e=this.value/this.valueMax*this.width-5;this.bar.fillStyle(9868950),this.bar.fillRect(e,0,10,this.height),void 0!==this.text&&this.text.setText(this.value+1)}getJson(e=[]){let t=super.getJson();return t=t.substr(0,t.length-1)+",",t+='"lText":[',e.forEach(e=>{t+='"'+e+'",'}),t=endLineJson(t),t+="]",t+="}"}destroy(){super.destroy(),this.text.destroy(),this.scene.input.off("pointerdown",this.doDrag,this)}}class BonusAttack extends Bonus{constructor(e,t,s){super(e,t,s,"attack")}useOn(e){super.useOn(e),e.setAttackBonus(e.attackBonus*this.value)}}class BonusHealth{constructor(e,t){this.value=e,this.color=t}decrease(e){this.value-=e;let t=0;return this.value<0&&(t=-this.value,this.value=0),t}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,"shield"),this.time=i,this.color=h}useOn(e,t){super.useOn(e);let s=new BonusHealth(this.value,this.color);e.shield.addBonus(s),t.time.addEvent({delay:this.time,callback:()=>e.shield.removeBonus(s)})}}class BonusSpeed extends Bonus{constructor(e="",t,s,i){super(e,t,s,"speed"),this.time=i}useOn(e,t){super.useOn(e),e.increaseSpeedBonus(this.value-1),t.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value-1)})}}class BonusView extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,t,s,i.texture),this.setOrigin(.5,.5),this.displayHeight=HEIGHT_BONUS,this.scaleX=this.scaleY,e.add.existing(this),this.bonus=i}useOn(e){this.bonus.useOn(e,this.scene),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",e).setOrigin(.5,.5);let t=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();WIDTH_WINDOW>HEIGHT_WINDOW?(t.displayHeight=HEIGHT_WINDOW/5,t.scaleX=t.scaleY):(t.displayWidth=WIDTH_WINDOW/1.5,t.scaleY=t.scaleX),t.on("pointerout",()=>t.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Button extends Phaser.GameObjects.Sprite{constructor(e,t,s,i,h,a,o,n=0,r=!0){super(e,t,s,a),this.name=a,this.setInteractive().setVisible(r),this.displayHeight=h,this.displayWidth=i,this.line=n,this.on("pointerout",()=>this.changeFrame(0)),this.on("pointerover",()=>this.changeFrame(1)),this.on("pointerdown",o),this.changeFrame(0),e.add.existing(this)}changeFrame(e=0){this.setFrame(e+2*this.line)}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}addEvent(e){this.event=e}add(e,t){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lValue=[],this.lBtn=[]),this.lValue.push(t),this.lBtn.push(e),e.tint=COLOR_SELECTED,this.oneChange()}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint(),this.oneChange()}oneChange(){void 0!==this.event&&this.event()}}class CategoryBar{constructor(e=VALUE_MAX_BAR,t=1){this.startValue=t,this.valueMax=e,this.point=this.valueMax}addPoint(e){if(this.point+=e,this.point<0){let e=this.point;return this.point=0,e}return this.point>this.valueMax&&(this.point=this.valueMax),0}setValueOf(e,t){let s=t-e.value,i=e.value;this.point>=s?e.setValue(t):e.setValue(e.value+this.point),this.addPoint(i-e.value),this.draw()}addText(e,t,s,i,h){this.text=t;let a={font:h.toString()+"px stencil",fill:"#e2e2e2"};this.textScene=e.add.text(s,i,this.text,a).setOrigin(0,0),this.draw()}setTextPos(e,t){this.textScene.setX(e),this.textScene.setY(t)}setText(e){this.text=e,this.draw()}draw(){this.textScene.setText(this.text+this.point)}destroy(){this.textScene.destroy()}}class Condition extends Node{constructor(e,t=!1,s=!1,i,h){super("condition"),this.shieldFilter=t,this.rangeFilter=s,this.shield=i,this.range=h,this.myself=e,this.lNode=[]}addNode(e){this.lNode.push(e)}do(e){if(this.doCondition(e))for(let t=0;te+=t.getTreeJson()+","),e=endLineJson(e),e+="]}"}getOptionJson(){return this.myself+","+this.shieldFilter+","+this.rangeFilter+","+this.shield+","+this.range}}class Description extends ManageLang{constructor(e){super("Description",e)}create(){super.create();let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW,s=this.add.image(e,t,"cancel").setOrigin(.5,1).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.return()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY,this.loadBonus()}loadBonus(){let e,t,s;this.width=WIDTH_WINDOW/3-20,this.height=HEIGHT_WINDOW/4,WIDTH_WINDOW>HEIGHT_WINDOW?(this.nbWidth=1,this.nbHeight=3,e=WIDTH_WINDOW/3,t=0,s=0):(this.nbWidth=3,this.nbHeight=1,e=0,t=HEIGHT_WINDOW/3.5,s=WIDTH_BUTTON/1.5);let i=WIDTH_BUTTON/1.5;this.createList(lShieldBonus,s,i,!0),s+=e,i+=t,this.createList(lSpeedBonus,s,i,!1),s+=e,i+=t,this.createList(lAttackBonus,s,i,!1)}createList(e,t,s,i=!0){this.createCategoryBonus(t,s,this.width*this.nbWidth,this.height*this.nbHeight),e.forEach(e=>{let h="";void 0!==e.time&&(h=" - "+selectWord("TIME","TEMPS")+" : "+e.time/1e3);let a="";if(void 0!==e.value){let t="x";i&&(t="+"),a="BONUS : "+t+e.value}this.createBonusDescription(t,s,this.width,this.height,e.texture,e.name,a+h),this.nbHeight>1&&(s+=this.height),this.nbWidth>1&&(t+=this.width)})}createCategoryBonus(e,t,s,i){e+=10,t+=10,this.add.rectangle(e,t,s,i,8816262).setOrigin(0,0)}createBonusDescription(e,t,s,i,h,a,o){e+=20,t+=20,s-=20,i-=20,this.add.rectangle(e,t,s,i,16777215).setOrigin(0,0);let n=this.add.image(e+5,t+5,h).setOrigin(0,0),r={fill:"#000000"};WIDTH_WINDOW>HEIGHT_WINDOW?(n.displayHeight=s/5,n.scaleX=n.scaleY,r.font=(n.displayHeight/3).toString()+"px stencil",this.add.text(e+n.displayWidth+10,t+5+n.displayHeight/2,a.toString(),r).setOrigin(0,.5),r.font=(n.displayHeight/4).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/2,o.toString(),r).setOrigin(0,.5)):(n.displayHeight=i/2,n.scaleX=n.scaleY,n.displayWidth>s&&(n.displayWidth=s,n.scaleY=n.scaleX),r.font=(s/10).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/3,a.toString(),r).setOrigin(0,0),r.font=(s/15).toString()+"px stencil",this.add.text(e+5,t+n.displayHeight+(i-n.displayHeight)/1.5,o.toString(),r).setOrigin(0,1))}return(){this.father.scene.start("Game"),this.father.scene.remove("Description")}}class Game extends ManageLang{constructor(e,t="level1"){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,this.level=t,this.listPositionRobotInit=[],this.scoreText=0}preload(){let e,t={font:"100px stencil",fill:"#e2e2e2"};this.load.on("start",()=>{(e=this.add.text(.5*WIDTH_WINDOW,.5*HEIGHT_WINDOW,selectWord("LEVEL LOADING ...","CHARGEMENT DU NIVEAU ..."),t).setOrigin(.5,.5)).alpha=.5,e.displayWidth>WIDTH_WINDOW&&(e.displayWidth=WIDTH_WINDOW,e.scaleY=e.scaleX)}),this.load.on("complete",()=>{e.destroy()}),this.cache.json.exists("level")&&this.cache.json.remove("level"),this.load.json("level","public/json/"+this.level+".json"),console.log("PRELOAD"),this.createGamingBoard()}create(){super.create();let e=this.cache.json.get("level");if(void 0!==e)this.loadSave(e),this.doLine=!1,this.createButtons(),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()}),this.input.keyboard.on("keydown-E",()=>{this.clickPencil()}),this.input.keyboard.on("keydown-ENTER",()=>{this.clickPlus()}),this.scene.setVisible(!0,"GamingBoard"),this.setScore(0),this.gm.getMyTeam().addEventScore(this.setScore,this);else{console.log("ERROR : LEVEL UNDEFINED ("+this.level+")"),new Button(this,10,10,WIDTH_BUTTON,WIDTH_BUTTON,"back",()=>this.clickBack()).setOrigin(0,0);let e={font:"50px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/2,selectWord("LEVEL UNDEFINED","NIVEAU INDEFINI"),e).setOrigin(.5,.5)}}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}createGamingBoard(){this.gm=new GamingBoard(this),-1!==this.father.scene.getIndex("GamingBoard")&&this.father.scene.remove("GamingBoard"),this.father.scene.add("GamingBoard",this.gm),this.scene.launch("GamingBoard"),this.gm.pause()}loadSave(e){this.loadBonus(e.lBonus),this.loadTeam(e);let t=[];if(this.gm.getMyTeam().listRobot.forEach(e=>t.push(e)),void 0!==this.listRobot)for(let e=0;e1&&this.robotSelected.setTint(COLOR_SELECTED)}applyTree(){void 0!==this.tree&&void 0!==this.robotSelected&&(this.tree.sort(),this.robotSelected.setNodes(this.tree.getNode()))}loadTree(e,t=CENTERX_TREE,s=OFFY_TREE_BEGIN){let i;if(void 0!==e.x&&void 0!==e.y)i=new RectangleNode(e.x,e.y,this,e.type,e.option),void 0!==e.lNode&&e.lNode.length>0&&e.lNode.forEach(e=>i.addRect(this.loadTree(e)));else if(i=new RectangleNode(t,s,this,e.type,e.option),void 0!==e.lNode&&e.lNode.length>0){let h=e.lNode.length,a=t-OFFX_TREE/2*(h-1),o=s+OFFY_TREE;e.lNode.forEach(e=>{i.addRect(this.loadTree(e,a,o)),a+=OFFX_TREE})}return i}loadInitSave(e,t,...s){let i=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,7*HEIGHT_BAR,HEIGHT_BAR,e.valueMax);for(let t=0;t{t+=this.loadT(s.name,s.freeForAll,s.robots,e.robotRandomPosition,t,s.color)}),this.gm.addEventMyTeam(this.setRobotSelected,this)}}loadT(e=MY_TEAM,t,s,i,h=0,a){let o=new Team(e,t);return this.loadRobot(s,i,h).forEach(e=>o.addRobot(e)),void 0!==a&&o.getRobots().forEach(e=>e.setTint(a)),this.gm.addTeam(o),o.listRobot.length}loadRobot(e=[],t=!1,s=0){let i=s,h=[];return e.forEach(e=>{let s=[];e.lNode.forEach(e=>{s.push(this.loadNode(e))}),t&&(void 0===this.listPositionRobotInit[i]?(e.x=Math.random()*(1-e.width/2-e.width/2)+e.width/2,e.y=Math.random()*(1-e.height/2-e.height/2)+e.height/2,this.listPositionRobotInit[i]=new Position(e.x,e.y)):(e.x=this.listPositionRobotInit[i].x,e.y=this.listPositionRobotInit[i].y)),h.push(new Robot(WIDTH_MAP*e.height,WIDTH_MAP*e.width,WIDTH_MAP*e.x,WIDTH_MAP*e.y,this.gm,e.name,e.speed,e.speedReload,e.range,e.damage,s)),i+=1}),h}loadNode(e){let t;switch(e.type){case"condition":t=new Condition(e.option[0],e.option[1],e.option[2],e.option[3],e.option[4]);break;case"move":t=new Move(e.option[0],e.option[1],e.option[2]);break;case"attack":t=new Attack(e.option[0]);break;default:return}return void 0!==e.lNode&&e.lNode.forEach(e=>t.addNode(this.loadNode(e))),t}loadBonus(e=[]){e.forEach(e=>{this.gm.addBonus(this.loadB(e))})}loadB(e){let t;switch(e.style){case"speed":t=lSpeedBonus[e.number];break;case"attack":t=lAttackBonus[e.number];break;case"shield":t=lShieldBonus[e.number];break;default:return null}return new BonusView(this.gm,e.x*WIDTH_MAP,e.y*WIDTH_MAP,t)}finish(){let e;console.log("FINISH"),e=this.gm.winner()?new Winner(this.father,this,this.score):new Looser(this.father,this,this.score),this.father.scene.add("Finish",e),this.scene.pause("Game"),this.scene.launch("Finish"),this.robotSelected=void 0}clickNode(){this.tryClick(),this.selected=this.tree.getSelected(),void 0!==this.selected&&(this.selected!==this.tree&&(this.pencilBtn.setVisible(!0),this.binBtn.setVisible(!0)),this.selected.canAddNode&&this.plusBtn.setVisible(!0))}doDrag(e,t,s,i){t.setX(s),t.setY(i)}dragStart(){console.log("START DRAG"),this.doLine=!0,this.pauseScene()}dragEnd(){console.log("END DRAG"),this.applyTree(),this.doLine=!1}pauseScene(){this.playBtn.line=0,this.playBtn.changeFrame(0),this.gm.pause()}resume(){this.playBtn.line=1,this.playBtn.changeFrame(0),this.gm.resume()}createButtons(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=WIDTH_BUTTON,i=1.1*s,h=0;new Button(this,10,10,s,s,"back",()=>this.clickBack()).setOrigin(0,0),new Button(this,WIDTH_WINDOW-i,HEIGHT_WINDOW,s,s,"bonusBtn",()=>this.clickBonus()).setOrigin(1,1),new Button(this,WIDTH_WINDOW,HEIGHT_WINDOW,s,s,"save",()=>this.clickSave()).setOrigin(1,1),this.playBtn=new Button(this,e,t,s,s,"play",()=>this.clickPlay()).setOrigin(1,0),h=1===SPEED_GAME?0:1,this.speedBtn=new Button(this,e-i,t,s,s,"speed",()=>this.clickSpeed(),h).setOrigin(1,0),this.pencilBtn=new Button(this,e-2*i,t,s,s,"pencil",()=>this.clickPencil(),0,!1).setOrigin(1,0),this.binBtn=new Button(this,e-3*i,t,s,s,"bin",()=>this.clickBin(),0,!1).setOrigin(1,0),this.plusBtn=new Button(this,e-4*i,t,s,s,"plus",()=>this.clickPlus(),0,!1).setOrigin(1,0),h=this.father.sound.mute?1:0,this.muteBtn=new Button(this,e-5*i,t,s,s,"mute",()=>this.clickMute(),h).setOrigin(1,0);let a={font:(s/2).toString()+"px stencil",fill:"#e2e2e2"};this.scoreText=this.add.text(OFFX_MAP,t,"SCORE : "+this.scoreText,a).setOrigin(0,0),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}setScore(e){this.score=e,this.scoreText.setText("SCORE : "+this.score)}clickBonus(){this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.add("Description",new Description(this.father,this)),this.scene.start("Description")}clickSave(){let e='{"tree":'+this.tree.getJson()+',"initStat":'+this.initStat.getJson()+"}";console.log(e)}clickPlay(){this.gm.paused?this.resume():this.pauseScene(),this.playBtn.changeFrame(1)}clickSpeed(){1===SPEED_GAME?(SPEED_GAME=2,this.speedBtn.line=1):(SPEED_GAME=1,this.speedBtn.line=0),this.gm.time.timeScale=SPEED_GAME,this.speedBtn.changeFrame(1)}clickPencil(){if(void 0!==this.selected){switch(console.log("PENCIL"),this.selected.type){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this,this.selected,!1));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this,this.selected,!1));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,!1));break;default:return}this.scene.pause("Game"),this.scene.launch("AddNode")}}clickBin(){void 0!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.binBtn.changeFrame(0),this.tryClick(),this.applyTree())}clickPlus(){void 0!==this.selected&&this.selected.canAddNode&&(console.log("PLUS"),this.father.scene.add("PlusNode",new PlusNode(this.father,this,this.selected)),this.scene.launch("PlusNode"),this.plusBtn.changeFrame(0),this.scene.pause("Game"))}clickBack(){console.log("BACK"),this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.stop("Game"),this.father.scene.start("Type")}clickMute(){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.muteBtn.line=0):(this.father.sound.mute=!0,this.muteBtn.line=1),this.muteBtn.changeFrame(1)}tryClick(){this.pencilBtn.setVisible(!1),this.binBtn.setVisible(!1),this.plusBtn.setVisible(!1),void 0!=this.selected&&(this.selected.deselect(),this.selected=void 0)}setLevel(e){this.level!==e&&(this.level=e,this.listPositionRobotInit=[],this.robotSelected=void 0),console.log(this.level)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listTeam=[],listBonus=[],this.father=e,this.end=!1,this.paused=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit"),this.scene.setVisible(!1,"GamingBoard")}create(){let e=this.add.image(0,0,"background").setOrigin(0,0);e.alpha=.3,e.displayWidth=WIDTH_MAP,e.displayHeight=WIDTH_MAP,this.time.addEvent({delay:2e3,callback:this.upShield,callbackScope:this})}update(e,t){this.end||this.paused||(this.listTeam.forEach(e=>{e.actualise(this.getEnemyRobotTeam(e))||this.listTeam.splice(this.listTeam.indexOf(e),1)}),this.listTeam.forEach(e=>e.readAll()),(void 0===this.getMyTeam()||this.listTeam.length<=1)&&(this.end=!0,this.finish()))}addEventMyTeam(e,t){this.getMyTeam().addEvent(e,t)}getEnemyRobotTeam(e){let t=[];return this.listTeam.forEach(s=>{(e.freeForAll||s!==e)&&(t=t.concat(s.getRobots()))}),t}setRobotVisible(e=!0){this.listTeam.forEach(t=>t.setRobotVisible(e))}setEnemyRobotVisible(e=!0){let t=this.getMyTeam();this.listTeam.forEach(s=>{t!==s&&s.setRobotVisible(e)})}setBonusVisible(e=!0){listBonus.forEach(t=>t.setVisible(e))}finish(){this.pause(),this.father.finish()}winner(){return void 0!==this.getMyTeam()}pause(){this.sound.pauseAll(),this.paused=!0,this.time.timeScale=0}resume(){this.sound.resumeAll(),this.setRobotVisible(!0),this.setBonusVisible(!0),this.paused=!1,this.time.timeScale=SPEED_GAME}addTeam(e){this.listTeam.push(e)}addBonus(e){listBonus.push(e)}modifyNodes(e){let t=this.getMyTeam();return void 0!==t&&(t.modifyNodes(e),!0)}modifyValue(e,t,s,i){let h=this.getMyTeam();return void 0!==h&&(h.modifyValue(e,t,s,i),!0)}getMyTeam(){for(let e=0;ee.listRobot.forEach(e=>{e.addShield(SHIELD_PER_SECOND)})),this.time.addEvent({delay:1e3,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(e,t,s,i,h,a=10){this.scene=e,this.posX=t,this.posY=s,this.width=i,this.height=h,this.category=new CategoryBar(a),this.lBar=[],this.lText=[],this.category.addText(this.scene,selectWord("TOKENS : ","JETONS : "),this.posX,this.posY,this.height)}addBar(e,t,s,i=[]){this.lText.push(i),this.lBar.push(new Bar(this.scene,selectWord(i[0],i[1]),this.width,this.height,this.posX,this.posY,s,this.category,e,t)),this.posY+=1.5*this.height,this.category.setTextPos(this.posX,this.posY)}getJson(){let e="{";e+=toJson("valueMax",this.category.valueMax),e+='"lBar":[';for(let t=0;te.destroy())}}class LevelSelect extends ManageLang{constructor(e,t=""){super("LevelSelect"),this.father=e,this.level=t}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/6,"WARIA",e).setOrigin(.5,.5);let t=parseInt(getCookie(this.level));isNaN(t)&&(t=1);let s=WIDTH_WINDOW/5,i=HEIGHT_WINDOW/3,h=s,a=HEIGHT_WINDOW/2.5;for(let e=1;e<=t&&!(e>NUMBER_LEVEL);e++)this.createLevel(h,a,e),(h+=s)===WIDTH_WINDOW&&(h=s,a+=i);new Button(this,10,10,WIDTH_BUTTON,WIDTH_BUTTON,"back",()=>this.clickBack()).setOrigin(0,0)}createLevel(e,t,s=0){let i;i=WIDTH_WINDOW>1.3*HEIGHT_WINDOW?HEIGHT_WINDOW/4:WIDTH_WINDOW/6;let h=this.add.image(e,t,"rectangle").setOrigin(.5,.5).setInteractive();h.displayHeight=h.displayWidth=i;let a,o={font:(i/2).toString()+"px stencil",fill:"#000000",align:"center"},n=this.add.text(e,t,s.toString(),o).setOrigin(.5,.5),r=parseInt(getCookie(this.level+(s-1).toString()));isNaN(r)||(a=this.add.text(e,n.y+n.displayHeight/2,selectWord("RECORD SCORE :","SCORE RECORD :")+"\n"+r.toString(),o).setOrigin(.5,0)).displayWidth>.9*i&&(a.displayWidth=.9*i,a.scaleY=a.scaleX),h.on("pointerover",()=>this.over(h,n,a)),h.on("pointerout",()=>this.out(h,n,a)),h.on("pointerdown",()=>this.click(s))}over(e,...t){e.setFrame(1),t.forEach(e=>{void 0!==e&&e.setColor("white")})}out(e,...t){e.setFrame(0),t.forEach(e=>{void 0!==e&&e.setColor("black")})}click(e){e-=1,this.level+=e.toString(),newGame(this.father,this.level),this.scene.start("Game")}clickBack(){this.scene.start("Type")}}class LoadFile extends Phaser.Scene{constructor(e,t,s){super("LoadFile"),this.father=e,this.son=s,this.nameSon=t,this.father.scene.pause(this.nameSon),this.father.scene.stop(this.nameSon),this.father.scene.remove("LoadFile")}preload(){let e=this.add.graphics(),t=this.add.graphics(),s=WIDTH_WINDOW/3,i=s/5,h=WIDTH_WINDOW/2-s/2,a=HEIGHT_WINDOW/2-i/2;t.fillStyle(2236962,.8),t.fillRect(h,a,s,i),this.load.on("progress",function(t){e.clear(),e.fillStyle(16777215,1),e.fillRect(h+5,a+5,(s-10)*t,i-10)}),this.load.on("complete",()=>{e.destroy(),t.destroy()}),this.load.audio("shot","assets/sounds/shot.ogg"),this.load.audio("hit","assets/sounds/hit.ogg"),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadImage("bonusSpeed0","bonus/",!0),this.loadImage("bonusSpeed1","bonus/",!0),this.loadImage("bonusSpeed2","bonus/",!0),this.loadImage("bonusAttack0","bonus/",!0),this.loadImage("bonusAttack1","bonus/",!0),this.loadImage("bonusAttack2","bonus/",!0),this.loadImage("bonusShield0","bonus/",!0),this.loadImage("bonusShield1","bonus/",!0),this.loadImage("bonusShield2","bonus/",!0),this.loadImage("enemy","robots/"),this.loadImage("myBot","robots/"),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",550,150,"buttons/"),this.loadSprite("modify",550,150,"buttons/"),this.loadSprite("home",550,150,"buttons/"),this.loadSprite("next",550,150,"buttons/"),this.loadSprite("retry",550,150,"buttons/"),this.loadSprite("duel",269,262,"buttons/"),this.loadSprite("last",269,262,"buttons/"),this.loadSprite("team",269,262,"buttons/"),this.loadSprite("flag",269,262,"buttons/"),this.loadSprite("map",269,262,"buttons/"),this.loadSprite("play",100,100,"buttons/",!0),this.loadSprite("bin",100,100,"buttons/",!0),this.loadSprite("plus",100,100,"buttons/",!0),this.loadSprite("pencil",100,100,"buttons/",!0),this.loadSprite("speed",100,100,"buttons/",!0),this.loadSprite("mute",100,100,"buttons/",!0),this.loadSprite("save",100,100,"buttons/",!0),this.loadSprite("bonusBtn",100,100,"buttons/",!0),this.loadSprite("back",200,200,"buttons/",!0),this.loadSprite("shortRange",300,150,"buttons/"),this.loadSprite("mediumRange",300,150,"buttons/"),this.loadSprite("longRange",300,150,"buttons/"),this.loadSprite("shield0",300,150,"buttons/"),this.loadSprite("shield33",300,150,"buttons/"),this.loadSprite("shield66",300,150,"buttons/"),this.loadSprite("shield100",300,150,"buttons/"),this.loadSprite("bonusShield",300,150,"buttons/"),this.loadSprite("bonusSpeed",300,150,"buttons/"),this.loadSprite("bonusAttack",300,150,"buttons/"),this.loadSprite("myself",300,150,"buttons/"),this.loadSprite("enemyBot",300,150,"buttons/"),this.loadSprite("bonus",300,150,"buttons/"),this.loadSprite("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/",!0),this.loadSprite("moveNode",180,190,"nodes/",!0),this.loadSprite("conditionNode",180,190,"nodes/",!0),this.loadSprite("rectangle",400,400,"buttons/",!0),this.loadImage("background","others/",!0),this.loadImage("bullet","others/",!0),this.loadImage("logoWaria","others/",!0),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0),this.cache.json.exists("listBonus")&&(this.cache.json.remove("listBonus"),lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[]),this.load.json("listBonus","public/json/listBonus.json")}create(){this.loadBonus(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}loadBonus(){let e=this.cache.json.get("listBonus");void 0!==e&&(e.lSpeedBonus.forEach(e=>lSpeedBonus.push(new BonusSpeed(selectWord(e.name.en,e.name.fr),e.texture,e.value,e.time))),e.lShieldBonus.forEach(e=>lShieldBonus.push(new BonusShield(selectWord(e.name.en,e.name.fr),e.texture,e.value,e.time,e.color))),e.lAttackBonus.forEach(e=>lAttackBonus.push(new BonusAttack(selectWord(e.name.en,e.name.fr),e.texture,e.value))))}loadSprite(e,t,s,i="",h=!1){this.textures.exists(e)&&h||(this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/lang/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s}))}loadImage(e,t="",s=!1){this.textures.exists(e)&&s||(this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/lang/"+LANG+"/"+t+e+".png"))}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e,t,s){super(e,t,s)}create(){super.create(),super.addTitle(selectWord("GAME OVER","PARTIE PERDUE")),super.btnRetry(super.createButton(WIDTH_WINDOW/3,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/1.5,"home"))}}class Missile extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,0,0,t),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move extends Node{constructor(e,t=!0,s){super("move"),this.toward=e,this.enemyBot=t,this.typeBonus=s}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,this.getListBonus());if(void 0!==t){let s;return(s=!0===this.toward?this.moveToward(e,t):this.fleeFrom(e,t))||(t.useOn(e),listBonus.splice(listBonus.indexOf(t),1),e.target=null),!0}}return!1}getListBonus(){if(void 0!==this.typeBonus){let e=[];return listBonus.forEach(t=>{t.bonus.type===this.typeBonus&&e.push(t)}),e}return listBonus}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;if(e=this.toward?0:5,!this.enemyBot)switch(this.typeBonus){case"speed":e+=2;break;case"attack":e+=3;break;case"shield":e+=4;break;default:e+=1}return e}getTreeJson(){return super.getTreeJson(this.getOptionJson())}getOptionJson(){let e=this.toward+","+this.enemyBot;return void 0!==this.typeBonus&&(e+=',"'+this.typeBonus+'"'),e}}class PlusNode extends Phaser.Scene{constructor(e,t,s){super("PlusNode"),this.father=e,this.gameR=t,this.selected=s}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),this.createNode(),this.createButton()}createNode(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW/2,s=WIDTH_WINDOW/3,i=HEIGHT_WINDOW/10,h=i/1.5;ORIENTATION_VERTICAL&&(h/=1.5),this.createBtn(e-s,t,"attack",selectWord("ATTACK","ATTAQUE"),s,i,()=>this.click("attack")),this.createBtn(e,t,"move",selectWord("MOVE","DEPLACEMENT"),s,i,()=>this.click("move")),this.createBtn(e+s,t,"condition",selectWord("CONDITION","CONDITION"),s,i,()=>this.click("condition"))}createBtn(e,t,s,i,h,a,o){let n=this.add.sprite(e,t+a,s).setOrigin(.5,.5).setInteractive().on("pointerdown",o);n.displayHeight=2*a,n.scaleX=n.scaleY,n.displayWidth>h&&(n.displayWidth=h/1.1,n.scaleY=n.scaleX);let r={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"},l=this.add.text(e,t-a,i,r).setOrigin(.5,.5);return l.displayWidth=n.displayWidth,l.scaleY=l.scaleX,n}click(e){switch(e.toString()){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this.gameR,this.selected));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this.gameR,this.selected));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this.gameR,this.selected))}this.scene.launch("AddNode"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}createButton(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW-100,s=this.add.image(e,t,"cancel").setOrigin(.5,.5).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.cancel()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}}class Position{constructor(e,t){this.x=e,this.y=t}}class RectangleNode{constructor(e,t,s,i,h=[]){switch(i.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(s,e,t,"attackNode"),this.node=new Attack(h[0]),this.canAddNode=!1,this.line=s.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(s,e,t,"moveNode"),this.node=new Move(h[0],h[1],h[2]),this.canAddNode=!1,this.line=s.add.graphics();break;case"condition":this.rect=new Phaser.GameObjects.Image(s,e,t,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=s,this.line=s.add.graphics();break;case"waria":this.rect=new Phaser.GameObjects.Image(s,e,t,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=s,this.scene.add.existing(this.rect),this.scene.input.setDraggable(this.rect);break;default:return void console.log("Création d'un node echoué")}"waria"!==i.toString().toLowerCase()&&this.rect.setFrame(this.node.getFrame()),this.type=i,this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_NODE,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let e=0;ethis.addLine(e))}addLine(e){e.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNode(){if(void 0===this.node){let e=[];return this.lRect.forEach(function(t){e.push(t.getNode())}),e}return this.canAddNode&&(this.node.clearNodes(),this.lRect.forEach(e=>this.node.addNode(e.getNode()))),this.node}sort(e=((e,t)=>e.getX()-t.getX())){this.canAddNode&&(this.lRect.sort(e),this.lRect.forEach(function(t){t.canAddNode&&t.sort(e)}))}destroy(){this.line.destroy(),this.rect.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}delete(e){let t=this.lRect.indexOf(e);if(-1!==t)return this.lRect.splice(t,1),e.destroy(),!0;for(let t=0;tt+=s.getJson(e)+","),t=endLineJson(t)+"]"),t=endLineJson(t),t+="}"}destroy(){this.rect.destroy(),void 0!==this.line&&this.line.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}}class Robot{constructor(e,t,s,i,h,a="enemy",o=SPEED_BEGIN,n=SPEED_RELOAD_BEGIN,r=RANGE_BEGIN,l=DAMAGE_BEGIN,d=[]){this.speedBonus=1,this.attackBonus=1,this.name=a,this.height=e,this.width=t,this.x=s,this.y=i,this.life=new HealthBar(h,selectWord("LIFE","VIE"),2*this.width,this.width/3,this.x,this.y-this.width,LIFE,32768),this.shield=new HealthBar(h,selectWord("SHIELD","BOUCLIER"),2*this.width,this.width/3,this.x,this.y-1.5*this.width,SHIELD,255),this.canAttack=!0,this.missile=new Missile(h,"bullet",this.width/5,this.width/4),h.add.existing(this.missile),this.addScene(h),this.lNode=d,this.setSpeed(o),this.setSpeedReload(n),this.setRange(r),this.setDamage(l),this.setX(this.x),this.setY(this.y),this.team=void 0}addScene(e){this.scene=e,"enemy"===this.name?this.circle=this.scene.add.image(this.x,this.y,"enemy").setOrigin(.5,.5).setInteractive():this.circle=this.scene.add.image(this.x,this.y,"myBot").setOrigin(.5,.5).setInteractive(),this.circle.displayWidth=this.width,this.circle.displayHeight=this.height,this.circle.on("pointerdown",()=>this.click())}click(){void 0===this.circleRange?this.drawRange():this.eraseRange(),this.doEvent()}addEvent(e,t,s){this.eventClick=e,this.contextClick=t,this.valueClick=s}doEvent(){void 0!==this.eventClick&&void 0!==this.contextClick&&this.eventClick.call(this.contextClick,this,this.valueClick)}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.life.setX(this.x),this.shield.setX(this.x),this.circle.setX(this.x),this.drawCircleRange()}setY(e){this.y=e;let t=this.y-this.width,s=this.y-1.5*this.width;t<0?(s=this.y+this.width-this.shield.height,t=this.y+1.5*this.width-this.shield.height):s<0&&(s=t,t=this.y+this.width-this.shield.height),this.life.setY(t),this.shield.setY(s),this.circle.setY(this.y),this.drawCircleRange()}setTint(e){this.circle.setTint(e)}clearTint(){this.circle.clearTint()}setTarget(e){this.target=e}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(e,t){}setDamage(e=this.damage){this.damage=e+DAMAGE_BASE}setRange(e=this.range){this.range=e+RANGE_BASE,this.drawCircleRange()}setSpeed(e=this.speed){this.speed=e+SPEED_BASE}setSpeedReload(e=this.speedReload){this.speedReload=e+SPEED_RELOAD_BASE}setAttackBonus(e){this.attackBonus=e}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e}advanceToTarget(){return this.verifyTarget()&&this.advanceTo(this.target),!1}advanceTo(e){if(e.x!==this.x||e.y!==this.y){let t=!1,s=!1,i=this.getVelocity(e),h=i[0]+this.x,a=i[1]+this.y;return i[0]>=0&&h>=e.x||i[0]<=0&&h<=e.x?(this.setX(e.x),t=!0):this.setX(this.x+i[0]),i[1]>=0&&a>=e.y||i[1]<=0&&a<=e.y?(this.setY(e.y),s=!0):this.setY(this.y+i[1]),!(t&&s)}return!1}fleeFromTarget(){return!!this.verifyTarget()&&this.fleeFrom(this.target)}fleeFrom(e){if(this.target.x!==this.x||this.target.y!==this.y){let t=this.getVelocity(e,!0);return t[0]>=0&&this.x-this.width/2<=0?this.setX(this.width/2):t[0]<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-t[0]),t[1]>=0&&this.y-this.width/2<=0?this.setY(this.height/2):t[1]<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-t[1]),!0}return!1}getVelocity(e,t=!1){let s=[],i=e.x-this.x,h=e.y-this.y,a=Math.hypot(i,h);return s[0]=i/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,s[1]=h/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,t&&(this.x+this.width/2+s[0]>WIDTH_MAP||this.x-this.width/2-s[0]<0?(s[1]+=s[0]*Math.sign(s[1]),s[0]=0):(this.y+this.width/2-s[1]>WIDTH_MAP||this.y-this.width/2+s[1]<0)&&(s[0]+=s[1]*Math.sign(-s[0]),s[1]=0)),s}attackTarget(e=0){return!!this.verifyTarget()&&(this.canAttack&&this.attack(this.target,e),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(e,t){this.canAttack=!1,this.missile.setPosition(this.x,this.y).setVisible(!0),this.missile.setRotation(Math.atan2(this.y-this.target.y,this.x-this.target.x)-1.57),this.scene.sound.play("shot",{rate:SPEED_GAME});let s=this.calcDistance(this.target)*WIDTH_MAP/1e3;this.scene.tweens.add({targets:this.missile,x:e.x,y:e.y,ease:"Linear",duration:s,onComplete:()=>this.finishAttack(e,t)}),this.scene.time.addEvent({delay:SPEED_RELOAD/this.speedReload,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*this.attackBonus*DAMAGE*t,this.team)&&this.setTarget(null),this.missile.setVisible(!1),1!==this.attackBonus&&this.setAttackBonus(1)}reload(){this.canAttack=!0}beAttack(e,t){let s=this.shield.decrease(e),i={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},h=this.scene.add.text(this.x,this.y,e.toString(),i).setOrigin(0,1);return this.scene.tweens.add({targets:h,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>h.destroy()}),this.scene.sound.play("hit",{rate:SPEED_GAME}),console.log("HIT"),s>0&&(console.log("Shield Broken"),this.life.decrease(s)),this.addScore(t),this.die()}addScore(e){void 0!==e&&(e.addScore(SCORE_HIT),0===this.life.value&&e.addScore(SCORE_KILL))}isTargetInRange(e=1){return!!this.haveTarget()&&this.calcDistance(this.target)<=this.range*RANGE*e}calcDistance(e){return Math.hypot(e.x-this.x,e.y-this.y)}isAlive(){return this.life.value>0}die(){return 0===this.life.value&&(void 0!==this.circleRange&&this.circleRange.destroy(),this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){this.verifyTarget();for(let e=0;ethis.addNode(e))}setVisible(e){this.circle.setVisible(e),this.life.setVisible(e),this.shield.setVisible(e),void 0!==this.circleRange&&this.circleRange.setVisible(e)}getTreeJson(){let e="{"+toJson("type","waria");return e+='"lNode":[',this.lNode.forEach(t=>e+=t.getTreeJson()+","),e=endLineJson(e),e+="]}"}copy(e){e.lNode=this.lNode,e.damage=this.damage,e.speedReload=this.speedReload,e.speed=this.speed,e.range=this.range,void 0!==this.circleRange?e.drawRange():e.eraseRange()}}class Team{constructor(e="enemy",t=!1){this.freeForAll=t,this.listRobot=[],this.name=e,this.score=0}addEventScore(e,t){this.eventScore=e,this.context=t}addScore(e){this.score+=e,void 0!==this.eventScore&&void 0!==this.context&&this.eventScore.call(this.context,this.score)}addRobot(e){this.listRobot.push(e),e.team=this}readAll(){this.listRobot.forEach(e=>e.read())}getRobots(){return this.listRobot}actualise(e=[]){for(let t=0;t{i.addEvent(e,t,s),s++})}modifyValue(e,t,s,i){this.setSpeed(s),this.setRange(i),this.setSpeedReload(t),this.setDamage(e)}setRange(e){this.listRobot.forEach(t=>{t.setRange(e)})}setSpeed(e){this.listRobot.forEach(t=>{t.setSpeed(e)})}setSpeedReload(e){this.listRobot.forEach(t=>{t.setSpeedReload(e)})}setDamage(e){this.listRobot.forEach(t=>{t.setDamage(e)})}drawRange(){this.listRobot.forEach(e=>{e.drawRange()})}modifyNodes(e){this.listRobot.forEach(t=>{t.setNodes(e)})}setRobotVisible(e){this.listRobot.forEach(t=>t.setVisible(e))}}class Type extends ManageLang{constructor(e){super("Type",e)}preload(){}create(){super.create();let e={font:HEIGHT_TITLE.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/6,"WARIA",e).setOrigin(.5,.5);let t=this.add.sprite(WIDTH_WINDOW/8*3,HEIGHT_WINDOW/4*2,"duel").setInteractive();this.createbutton(t,"duel");let s=this.add.sprite(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/4*2,"last").setInteractive();this.createbutton(s,"last");let i=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/4*3,"team").setInteractive();this.createbutton(i,"team")}createbutton(e,t){WIDTH_WINDOW>HEIGHT_WINDOW?(e.displayHeight=HEIGHT_WINDOW/4,e.scaleX=e.scaleY):(e.displayWidth=WIDTH_WINDOW/4,e.scaleY=e.scaleX),e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(t))}clickPlay(e){-1!==father.scene.getIndex("LevelSelect")&&this.father.scene.remove("LevelSelect"),this.father.scene.add("LevelSelect",new LevelSelect(this.father,e)),this.scene.start("LevelSelect")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1,lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[];const MYSELF="myself",MY_TEAM="myTeam",SHIELD_PER_SECOND=5,COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,COLOR_RED=16711680,COLOR_ORANGE=16744192,COLOR_GREEN=32768,COLOR_RANGE=32768,COLOR_SPEED_RELOAD=8323327,NUMBER_LEVEL=8,COLOR_SELECTED=15718407,COLOR_MYSELF=6711039,WIDTH_WINDOW=window.innerWidth-20,HEIGHT_WINDOW=window.innerHeight-20;var OFFY_MAP,WIDTH_MAP,OFFY_TREE_BEGIN,CENTERX_TREE,HEIGHT_TITLE,HEIGHT_NODE,HEIGHT_BUTTON_TEXT,OFFX_MAP=WIDTH_WINDOW/20,ORIENTATION_VERTICAL=!0;WIDTH_WINDOW.4*HEIGHT_WINDOW&&(WIDTH_MAP=.4*HEIGHT_WINDOW,OFFX_MAP*=3),OFFY_TREE_BEGIN=WIDTH_MAP+2*OFFY_MAP,CENTERX_TREE=WIDTH_WINDOW/2,HEIGHT_TITLE=WIDTH_WINDOW/5,HEIGHT_NODE=(HEIGHT_WINDOW-WIDTH_MAP)/6):(ORIENTATION_VERTICAL=!1,HEIGHT_NODE=HEIGHT_WINDOW/7,HEIGHT_BUTTON_TEXT=HEIGHT_WINDOW/9,(WIDTH_MAP=.8*HEIGHT_WINDOW)>.5*WIDTH_WINDOW&&(HEIGHT_NODE=(WIDTH_WINDOW-((WIDTH_MAP=.4*WIDTH_WINDOW)+OFFX_MAP))/6,HEIGHT_BUTTON_TEXT=HEIGHT_WINDOW/15),OFFY_TREE_BEGIN=(OFFY_MAP=(HEIGHT_WINDOW-WIDTH_MAP)/2)+WIDTH_MAP/8,CENTERX_TREE=(WIDTH_WINDOW-(WIDTH_MAP+OFFX_MAP+WIDTH_MAP/4))/2+(WIDTH_MAP+OFFX_MAP+WIDTH_MAP/4),HEIGHT_TITLE=HEIGHT_WINDOW/5);const WIDTH_LINE=HEIGHT_NODE/20,OFFX_TREE=HEIGHT_NODE,OFFY_TREE=1.1*HEIGHT_NODE,WIDTH_BUTTON=WIDTH_MAP/10,SCORE_HIT=5,SCORE_KILL=15,SCORE_BONUS=4,HEIGHT_BAR=WIDTH_MAP/20,LIFE=100,SHIELD=100,VALUE_MAX_BAR=5,SPEED=WIDTH_MAP/1e3,SPEED_BASE=1,SPEED_BEGIN=3,RANGE=WIDTH_MAP/16,RANGE_BASE=3,RANGE_BEGIN=2,SPEED_RELOAD=4e3,SPEED_RELOAD_BASE=2,SPEED_RELOAD_BEGIN=3,DAMAGE=2,DAMAGE_BASE=10,DAMAGE_BEGIN=2,HEIGHT_BONUS=WIDTH_MAP/10,HEIGHT_DAMAGE=WIDTH_MAP/20,DURATION_DAMAGE=700;class Winner extends Finish{constructor(e,t,s){super(e,t,s);let i=t.level.slice(0,-1),h=parseInt(getCookie(i)),a=parseInt(t.level[t.level.length-1])+2;(isNaN(h)||a>h)&&setCookie(i,a)}create(){super.create(),super.addTitle(selectWord("YOU WIN","PARTIE GAGNÉE")),super.btnRetry(super.createButton(WIDTH_WINDOW/4,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/2,"home")),getNextLevel(this.gameSave.level)===this.gameSave.level||super.btnNext(super.createButton(WIDTH_WINDOW/4*3,"next"))}} \ No newline at end of file diff --git a/Code/public/js/level3.min.js b/Code/public/js/level3.min.js index bc0b061..be6f492 100644 --- a/Code/public/js/level3.min.js +++ b/Code/public/js/level3.min.js @@ -1 +1 @@ -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;tWIDTH_WINDOW&&(i.displayWidth=WIDTH_WINDOW,i.scaleY=i.scaleX),s={font:(e/2).toString()+"px stencil",fill:"#e2e2e2"},this.add.text(WIDTH_WINDOW/2,i.y+i.displayHeight,"SCORE : "+this.score.toString(),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;default:return t}}function newGame(t,e,s=new Game(t,e)){-1!==t.scene.getIndex("Game")&&t.scene.remove("Game"),t.scene.add("Game",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()+864e7);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;s0&&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+"]}"}} \ No newline at end of file +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=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;default:return t}}function newGame(t,e,s=new Game(t,e)){-1!==t.scene.getIndex("Game")&&t.scene.remove("Game"),t.scene.add("Game",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.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+"]}"}} \ No newline at end of file diff --git a/Code/public/json/duel2.json b/Code/public/json/duel2.json index c3f9270..14a928d 100644 --- a/Code/public/json/duel2.json +++ b/Code/public/json/duel2.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":false,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.1,"name":"enemy","speed":0,"speedReload":5,"range":5,"damage":5,"lNode":[{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8},{"style":"attack","number":1,"x":0.8,"y":0.3}]} \ No newline at end of file diff --git a/Code/public/json/duel3.json b/Code/public/json/duel3.json index c3f9270..b73b7a3 100644 --- a/Code/public/json/duel3.json +++ b/Code/public/json/duel3.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":false,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":10,"speedReload":0,"range":0,"damage":0,"lNode":[{"type":"condition","option":[false,false,true,0.3333333333333333,1],"lNode":[{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[1]},{"type":"condition","option":[true,true,false,0.6666666666666666,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"move","option":[true,true]}]},{"type":"move","option":[true,false]},{"type":"attack","option":[1]},{"type":"move","option":[true,true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8},{"style":"attack","number":2,"x":0.2,"y":0.4},{"style":"attack","number":2,"x":0.4,"y":0.2}]} \ No newline at end of file diff --git a/Code/public/json/duel4.json b/Code/public/json/duel4.json index c3f9270..3f08ab3 100644 --- a/Code/public/json/duel4.json +++ b/Code/public/json/duel4.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":false,"initStat":{"valueMax":15,"lBar":[{"valueMax":10,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":5,"speedReload":5,"range":5,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.3},{"style":"shield","number":0,"x":0.2,"y":0.2},{"style":"shield","number":0,"x":0.1,"y":0.2},{"style":"shield","number":2,"x":0.8,"y":0.6},{"style":"shield","number":2,"x":0.2,"y":0.8},{"style":"speed","number":2,"x":0.4,"y":0.9},{"style":"attack","number":0,"x":0.8,"y":0.15}]} \ No newline at end of file diff --git a/Code/public/json/duel5.json b/Code/public/json/duel5.json index c3f9270..cd925ca 100644 --- a/Code/public/json/duel5.json +++ b/Code/public/json/duel5.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":false,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.6,"y":0.13,"name":"enemy","speed":10,"speedReload":5,"range":5,"damage":10,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.5,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"speed","number":0,"x":0.1,"y":0.8},{"style":"shield","number":2,"x":0.1,"y":0.7},{"style":"shield","number":2,"x":0.1,"y":0.6},{"style":"shield","number":0,"x":0.9,"y":0.9},{"style":"shield","number":0,"x":0.9,"y":0.8},{"style":"shield","number":0,"x":0.9,"y":0.7},{"style":"shield","number":0,"x":0.9,"y":0.6},{"style":"shield","number":0,"x":0.9,"y":0.5},{"style":"shield","number":0,"x":0.9,"y":0.4},{"style":"shield","number":0,"x":0.9,"y":0.3},{"style":"shield","number":0,"x":0.9,"y":0.2},{"style":"attack","number":2,"x":0.9,"y":0.1},{"style":"attack","number":2,"x":0.1,"y":0.1},{"style":"attack","number":2,"x":0.2,"y":0.1}]} \ No newline at end of file diff --git a/Code/public/json/duel6.json b/Code/public/json/duel6.json index c3f9270..53f644b 100644 --- a/Code/public/json/duel6.json +++ b/Code/public/json/duel6.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":false,"initStat":{"valueMax":20,"lBar":[{"valueMax":10,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":10,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":10,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":10,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.15,"y":0.5,"name":"enemy","speed":5,"speedReload":10,"range":10,"damage":10,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.35,"y":0.7,"name":"myself","speed":0,"speedReload":0,"range":0,"damage":0,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8},{"style":"attack","number":0,"x":0.8,"y":0.4}]} \ No newline at end of file diff --git a/Code/public/json/duel7.json b/Code/public/json/duel7.json index c3f9270..cd0494a 100644 --- a/Code/public/json/duel7.json +++ b/Code/public/json/duel7.json @@ -1 +1 @@ -{"enemyVisible":true,"bonusVisible":true,"robotRandomPosition":true,"initStat":{"valueMax":10,"lBar":[{"valueMax":5,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":5,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":5,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":5,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":3,"speedReload":3,"range":3,"damage":5,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"shield","number":0,"x":0.2,"y":0.1},{"style":"shield","number":1,"x":0.5,"y":0.9},{"style":"shield","number":2,"x":0.2,"y":0.8}]} \ No newline at end of file +{"enemyVisible":false,"bonusVisible":false,"robotRandomPosition":true,"initStat":{"valueMax":20,"lBar":[{"valueMax":10,"color":16711680,"colorMin":16711680,"lText":["DAMAGE","DEGATS"]},{"valueMax":10,"color":8323327,"colorMin":8323327,"lText":["R.S","RECHARGEMENT"]},{"valueMax":10,"color":255,"colorMin":255,"lText":["SPEED","VITESSE"]},{"valueMax":10,"color":32768,"colorMin":32768,"lText":["RANGE","PORTEE"]}]},"listTeam":[{"name":"enemyTeam","robots":[{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":8,"speedReload":8,"range":8,"damage":8,"lNode":[{"type":"condition","option":[false,false,true,0,1],"lNode":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"type":"attack","option":[0.6666666666666666]},{"type":"attack","option":[]}]},{"type":"move","option":[true,false]},{"type":"move","option":[true]}]}]},{"name":"myTeam","robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":0,"speedReload":0,"range":0,"damage":0,"lNode":[{"type":"move","option":[true,false]},{"type":"attack","option":[0.3333333333333333]},{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lNode":[{"type":"move","option":[false,true]},{"type":"attack","option":[1]}]},{"type":"move","option":[true,true]}]}]}],"lBonus":[{"style":"speed","number":1,"x":0.1,"y":0.1},{"style":"shield","number":2,"x":0.9,"y":0.1},{"style":"shield","number":2,"x":0.1,"y":0.9},{"style":"attack","number":1,"x":0.9,"y":0.9}]} \ No newline at end of file diff --git a/Code/src/js/level2/AddAttack.js b/Code/src/js/level2/AddAttack.js index 78c0b85..7a5b6bf 100644 --- a/Code/src/js/level2/AddAttack.js +++ b/Code/src/js/level2/AddAttack.js @@ -24,8 +24,9 @@ class AddAttack extends AddNode { addNode() { if (super.verifyCategory()) { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'attack', [this.lCategory[1].getValue()])); - super.cancel(); + let newRect = new RectangleNode(this.selected.getX(), this.selected.getY() + OFFY_TREE, this.gameR, 'attack', [this.lCategory[1].getValue()]); + this.selected.addRect(newRect); + super.cancel(newRect); } } diff --git a/Code/src/js/level2/AddCondition.js b/Code/src/js/level2/AddCondition.js index c416774..92bb3b7 100644 --- a/Code/src/js/level2/AddCondition.js +++ b/Code/src/js/level2/AddCondition.js @@ -36,12 +36,15 @@ class AddCondition extends AddNode { addNode() { if (super.verifyCategory()) { + let newRect; if (this.lCategory[1].getValue()[1] === 'range') { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'condition', [this.lCategory[0].getValue(), false, true, 0, this.lCategory[1].getValue()[0]])); + newRect = new RectangleNode(this.selected.getX(), this.selected.getY() + OFFY_TREE, this.gameR, 'condition', [this.lCategory[0].getValue(), false, true, 0, this.lCategory[1].getValue()[0]]); + } else { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'condition', [this.lCategory[0].getValue(), true, false, this.lCategory[1].getValue()[0], 0])); + newRect = new RectangleNode(this.selected.getX(), this.selected.getY() + OFFY_TREE, this.gameR, 'condition', [this.lCategory[0].getValue(), true, false, this.lCategory[1].getValue()[0], 0]); } - super.cancel(); + this.selected.addRect(newRect); + super.cancel(newRect); } } diff --git a/Code/src/js/level2/AddMove.js b/Code/src/js/level2/AddMove.js index 2a62422..bfce407 100644 --- a/Code/src/js/level2/AddMove.js +++ b/Code/src/js/level2/AddMove.js @@ -46,8 +46,9 @@ class AddMove extends AddNode { addNode() { if (super.verifyCategory()) { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'move', [this.lCategory[0].getValue(), this.lCategory[1].getValue(), this.lCategory[2].getValue()])); - super.cancel(); + let newRect = new RectangleNode(this.selected.getX(), this.selected.getY() + OFFY_TREE, this.gameR, 'move', [this.lCategory[0].getValue(), this.lCategory[1].getValue(), this.lCategory[2].getValue()]); + this.selected.addRect(newRect); + super.cancel(newRect); } } diff --git a/Code/src/js/level2/BonusAttack.js b/Code/src/js/level2/BonusAttack.js index 0d13bd9..2ca5baf 100644 --- a/Code/src/js/level2/BonusAttack.js +++ b/Code/src/js/level2/BonusAttack.js @@ -5,6 +5,6 @@ class BonusAttack extends Bonus { useOn(robot) { super.useOn(robot); - robot.setAttackBonus(this.value); + robot.setAttackBonus(robot.attackBonus * this.value); } } \ No newline at end of file diff --git a/Code/src/js/level2/Game.js b/Code/src/js/level2/Game.js index 9d644cd..0e8bae5 100644 --- a/Code/src/js/level2/Game.js +++ b/Code/src/js/level2/Game.js @@ -14,6 +14,10 @@ class Game extends ManageLang { this.load.on('start', () => { text = this.add.text(0.5 * WIDTH_WINDOW, 0.5 * HEIGHT_WINDOW, selectWord("LEVEL LOADING ...", "CHARGEMENT DU NIVEAU ..."), style).setOrigin(0.5, 0.5); text.alpha = 0.5; + if (text.displayWidth > WIDTH_WINDOW) { + text.displayWidth = WIDTH_WINDOW; + text.scaleY = text.scaleX; + } }); this.load.on('complete', () => { text.destroy(); @@ -105,22 +109,17 @@ class Game extends ManageLang { this.gm.setBonusVisible(level.bonusVisible); } - setRobotSelected(robot, iRobot = 0, level, force = false) { + setRobotSelected(robot, iRobot = 0, level = this.cache.json.get('level'), force = false) { this.iRobot = iRobot; let tree; - let initStat; if (!force && this.robotSelected !== undefined && this.robotSelected !== robot && this.tree !== undefined && this.initStat !== undefined) { this.robotSelected.clearTint(); - initStat = JSON.parse(this.initStat.getJson()); this.tree.destroy(); this.initStat.destroy(); tree = JSON.parse(robot.getTreeJson()); } else { if (this.initStat !== undefined) { - initStat = JSON.parse(this.initStat.getJson()); this.initStat.destroy(); - } else { - initStat = level.initStat; } if (this.tree !== undefined) { tree = JSON.parse(this.tree.getJson(true)); @@ -130,7 +129,7 @@ class Game extends ManageLang { } } this.tree = this.loadTree(tree); - this.initStat = this.loadInitSave(initStat, robot, robot.damage - DAMAGE_BASE, robot.speedReload - SPEED_RELOAD_BASE, robot.speed - SPEED_BASE, robot.range - RANGE_BASE); + this.initStat = this.loadInitSave(level.initStat, robot, robot.damage - DAMAGE_BASE, robot.speedReload - SPEED_RELOAD_BASE, robot.speed - SPEED_BASE, robot.range - RANGE_BASE); this.robotSelected = robot; if (this.robotSelected.team.listRobot.length > 1) { @@ -236,7 +235,7 @@ class Game extends ManageLang { node = new Condition(element.option[0], element.option[1], element.option[2], element.option[3], element.option[4]); break; case "move": - node = new Move(element.option[0], element.option[1]); + node = new Move(element.option[0], element.option[1], element.option[2]); break; case "attack": node = new Attack(element.option[0]); @@ -456,6 +455,7 @@ class Game extends ManageLang { this.binBtn.changeFrame(0); this.tryClick(); + this.applyTree(); } } diff --git a/Code/src/js/level2/LevelSelect.js b/Code/src/js/level2/LevelSelect.js index 1d2b344..436bdb3 100644 --- a/Code/src/js/level2/LevelSelect.js +++ b/Code/src/js/level2/LevelSelect.js @@ -3,7 +3,6 @@ class LevelSelect extends ManageLang { super('LevelSelect'); this.father = father; this.level = level; - console.log(getCookie(this.level)); } create() { @@ -34,29 +33,46 @@ class LevelSelect extends ManageLang { createLevel(x, y, number = 0) { let width; - if (WIDTH_WINDOW > HEIGHT_WINDOW) { + if (WIDTH_WINDOW > HEIGHT_WINDOW * 1.3) { width = HEIGHT_WINDOW / 4; } else { - width = WIDTH_WINDOW / 4; + width = WIDTH_WINDOW / 6; } let btn = this.add.image(x, y, 'rectangle').setOrigin(0.5, 0.5).setInteractive(); btn.displayHeight = btn.displayWidth = width; - let style = {font: (width / 2).toString() + 'px stencil', fill: "#000000"}; + let style = {font: (width / 2).toString() + 'px stencil', fill: "#000000", align: "center"}; let text = this.add.text(x, y, number.toString(), style).setOrigin(0.5, 0.5); - btn.on('pointerover', () => this.over(btn, text)); - btn.on('pointerout', () => this.out(btn, text)); + + let score = parseInt(getCookie(this.level + (number - 1).toString())); + let scoreText; + + if (!isNaN(score)) { + scoreText = this.add.text(x, text.y + text.displayHeight / 2, selectWord("RECORD SCORE :", "SCORE RECORD :") + "\n" + score.toString(), style).setOrigin(0.5, 0); + if (scoreText.displayWidth > width * 0.9) { + scoreText.displayWidth = width * 0.9; + scoreText.scaleY = scoreText.scaleX; + } + } + + btn.on('pointerover', () => this.over(btn, text, scoreText)); + btn.on('pointerout', () => this.out(btn, text, scoreText)); btn.on('pointerdown', () => this.click(number)); } - over(btn, text) { + over(btn, ...texts) { btn.setFrame(1); - text.setColor("white"); + texts.forEach(text => { + if (text !== undefined) + text.setColor("white"); + }); } - out(btn, text) { + out(btn, ...texts) { btn.setFrame(0); - text.setColor("black"); - //text.setFill(0xffffff); + texts.forEach(text => { + if (text !== undefined) + text.setColor("black"); + }); } click(number) { diff --git a/Code/src/js/level2/LoadFile.js b/Code/src/js/level2/LoadFile.js index 1e98a84..4b89b78 100644 --- a/Code/src/js/level2/LoadFile.js +++ b/Code/src/js/level2/LoadFile.js @@ -13,17 +13,17 @@ class LoadFile extends Phaser.Scene { preload() { let progressBar = this.add.graphics(); let progressBox = this.add.graphics(); - let width = 320; - let height = 50; + let width = WIDTH_WINDOW / 3; + let height = width / 5; let x = WIDTH_WINDOW / 2 - width / 2; let y = HEIGHT_WINDOW / 2 - height / 2; progressBox.fillStyle(0x222222, 0.8); - progressBox.fillRect(x, y, 320, height); + progressBox.fillRect(x, y, width, height); this.load.on('progress', function (value) { progressBar.clear(); progressBar.fillStyle(0xffffff, 1); - progressBar.fillRect(x + 10, y + 10, (width - 20) * value, height - 20); + progressBar.fillRect(x + 5, y + 5, (width - 10) * value, height - 10); }); this.load.on('complete', () => { progressBar.destroy(); diff --git a/Code/src/js/level2/Winner.js b/Code/src/js/level2/Winner.js index 8945447..0d1c4fb 100644 --- a/Code/src/js/level2/Winner.js +++ b/Code/src/js/level2/Winner.js @@ -1,7 +1,12 @@ class Winner extends Finish { constructor(father, game, score) { super(father, game, score); - setCookie(game.level.slice(0, -1), parseInt(game.level[game.level.length - 1]) + 2); + let level = game.level.slice(0, -1); + let nb = parseInt(getCookie(level)); + let nbNext = parseInt(game.level[game.level.length - 1]) + 2; + if (isNaN(nb) || nbNext > nb) { + setCookie(level, nbNext); + } } create() { diff --git a/Code/src/js/level3/AddNode.js b/Code/src/js/level3/AddNode.js index 897a1bf..fe699ec 100644 --- a/Code/src/js/level3/AddNode.js +++ b/Code/src/js/level3/AddNode.js @@ -99,7 +99,12 @@ class AddNode extends Phaser.Scene { return true; } - cancel() { + cancel(newRect) { + if (newRect !== undefined) { + newRect.click(); + this.gameR.clickNode(); + } + this.gameR.applyTree(); this.scene.resume('Game'); this.scene.stop('AddNode'); this.father.scene.remove('AddNode'); diff --git a/Code/src/js/level3/Finish.js b/Code/src/js/level3/Finish.js index 4bcfdad..438ae9c 100644 --- a/Code/src/js/level3/Finish.js +++ b/Code/src/js/level3/Finish.js @@ -4,6 +4,14 @@ class Finish extends Phaser.Scene { this.father = father; this.gameSave = game; this.score = score; + let scoreRecord = parseInt(getCookie(this.gameSave.level)); + if (isNaN(scoreRecord)) { + scoreRecord = this.score; + } + console.log(scoreRecord); + if (this.score >= scoreRecord) { + setCookie(this.gameSave.level, this.score); + } } create() { @@ -19,8 +27,8 @@ class Finish extends Phaser.Scene { text.displayWidth = WIDTH_WINDOW; text.scaleY = text.scaleX; } - style = {font: (sizeText / 2).toString() + 'px stencil', fill: "#e2e2e2"}; - this.add.text(WIDTH_WINDOW / 2, text.y + text.displayHeight, "SCORE : " + this.score.toString(), style).setOrigin(0.5, 0.5); + style = {font: (sizeText / 2).toString() + 'px stencil', fill: "#e2e2e2", align: "center"}; + this.add.text(WIDTH_WINDOW / 2, text.y + text.displayHeight, "SCORE : " + this.score.toString() + "\n" + selectWord("RECORD SCORE : ", "SCORE RECORD : ") + getCookie(this.gameSave.level), style).setOrigin(0.5, 0.5); } createButton(x, texture) { diff --git a/Code/src/js/level3/Function.js b/Code/src/js/level3/Function.js index ce25f82..ce599f9 100644 --- a/Code/src/js/level3/Function.js +++ b/Code/src/js/level3/Function.js @@ -73,25 +73,12 @@ function getNextLevel(level = "") { function setCookie(cName, cValue) { let d = new Date(); - let day = 100; + let day = 360; d.setTime(d.getTime() + (day * 24 * 60 * 60 * 1000)); let expires = "expires=" + d.toUTCString(); document.cookie = cName + "=" + cValue + ";" + expires + ";path=/;SameSite=Lax"; } -/* -function getCookies() { - let c = document.cookie.split('; '); - let json = "{"; - c.forEach(cookie => { - let m = cookie.split(('=')); - json += '"' + m[0] + '":' + m[1] + ','; - }); - json = endLineJson(json) + '}'; - return JSON.parse(json); -} -*/ - function getCookie(cName) { let c = document.cookie.split('; '); for (let i = 0; i < c.length; i++) { diff --git a/Code/src/js/level3/HealthBar.js b/Code/src/js/level3/HealthBar.js index 4faa986..db781a0 100644 --- a/Code/src/js/level3/HealthBar.js +++ b/Code/src/js/level3/HealthBar.js @@ -18,7 +18,10 @@ class HealthBar { let style = {font: height.toString() + 'px stencil', fill: "#000000"}; this.nameText = scene.add.text(x, y, name, style).setOrigin(0, 0); this.nameText.alpha = 0.5; - + if (this.nameText.displayWidth > this.width * 0.9) { + this.nameText.displayWidth = this.width * 0.9; + this.nameText.scaleY = this.nameText.scaleX; + } this.setX(x, middle); this.setY(y); } diff --git a/Code/src/json/duel2.json b/Code/src/json/duel2.json index 23eaa1c..0605471 100644 --- a/Code/src/json/duel2.json +++ b/Code/src/json/duel2.json @@ -1,7 +1,7 @@ { "enemyVisible": true, "bonusVisible": true, - "robotRandomPosition": true, + "robotRandomPosition": false, "initStat": { "valueMax": 10, "lBar": [ @@ -50,67 +50,29 @@ { "height": 0.1, "width": 0.1, - "x": 0.1, + "x": 0.9, "y": 0.1, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, + "speed": 0, + "speedReload": 5, + "range": 5, "damage": 5, "lNode": [ { - "type": "condition", + "type": "attack", "option": [ - false, - false, - true, - 0, - 1 - ], - "lNode": [ - { - "type": "condition", - "option": [ - true, - true, - false, - 0.3333333333333333, - 0 - ], - "lNode": [ - { - "type": "move", - "option": [ - true, - false - ] - } - ] - }, - { - "type": "attack", - "option": [ - 0.3333333333333333 - ] - }, - { - "type": "attack", - "option": [ - 0.6666666666666666 - ] - }, - { - "type": "attack", - "option": [ - ] - } + 0.3333333333333333 ] }, { - "type": "move", + "type": "attack", + "option": [ + 0.6666666666666666 + ] + }, + { + "type": "attack", "option": [ - true, - false ] }, { @@ -205,6 +167,12 @@ "number": 2, "x": 0.2, "y": 0.8 + }, + { + "style": "attack", + "number": 1, + "x": 0.8, + "y": 0.3 } ] } \ No newline at end of file diff --git a/Code/src/json/duel3.json b/Code/src/json/duel3.json index 23eaa1c..fd3e34a 100644 --- a/Code/src/json/duel3.json +++ b/Code/src/json/duel3.json @@ -1,7 +1,7 @@ { "enemyVisible": true, "bonusVisible": true, - "robotRandomPosition": true, + "robotRandomPosition": false, "initStat": { "valueMax": 10, "lBar": [ @@ -53,10 +53,10 @@ "x": 0.1, "y": 0.1, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, - "damage": 5, + "speed": 10, + "speedReload": 0, + "range": 0, + "damage": 0, "lNode": [ { "type": "condition", @@ -64,17 +64,35 @@ false, false, true, - 0, + 0.3333333333333333, 1 ], "lNode": [ + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "attack", + "option": [ + 0.6666666666666666 + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + }, { "type": "condition", "option": [ true, true, false, - 0.3333333333333333, + 0.6666666666666666, 0 ], "lNode": [ @@ -88,20 +106,10 @@ ] }, { - "type": "attack", - "option": [ - 0.3333333333333333 - ] - }, - { - "type": "attack", - "option": [ - 0.6666666666666666 - ] - }, - { - "type": "attack", + "type": "move", "option": [ + true, + true ] } ] @@ -113,9 +121,16 @@ false ] }, + { + "type": "attack", + "option": [ + 1 + ] + }, { "type": "move", "option": [ + true, true ] } @@ -205,6 +220,18 @@ "number": 2, "x": 0.2, "y": 0.8 + }, + { + "style": "attack", + "number": 2, + "x": 0.2, + "y": 0.4 + }, + { + "style": "attack", + "number": 2, + "x": 0.4, + "y": 0.2 } ] -} \ No newline at end of file +} diff --git a/Code/src/json/duel4.json b/Code/src/json/duel4.json index 23eaa1c..e4d4af8 100644 --- a/Code/src/json/duel4.json +++ b/Code/src/json/duel4.json @@ -1,12 +1,12 @@ { "enemyVisible": true, "bonusVisible": true, - "robotRandomPosition": true, + "robotRandomPosition": false, "initStat": { - "valueMax": 10, + "valueMax": 15, "lBar": [ { - "valueMax": 5, + "valueMax": 10, "color": 16711680, "colorMin": 16711680, "lText": [ @@ -53,9 +53,9 @@ "x": 0.1, "y": 0.1, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, + "speed": 5, + "speedReload": 5, + "range": 5, "damage": 5, "lNode": [ { @@ -192,19 +192,43 @@ "style": "shield", "number": 0, "x": 0.2, - "y": 0.1 + "y": 0.3 }, { "style": "shield", - "number": 1, - "x": 0.5, - "y": 0.9 + "number": 0, + "x": 0.2, + "y": 0.2 + }, + { + "style": "shield", + "number": 0, + "x": 0.1, + "y": 0.2 + }, + { + "style": "shield", + "number": 2, + "x": 0.8, + "y": 0.6 }, { "style": "shield", "number": 2, "x": 0.2, "y": 0.8 + }, + { + "style": "speed", + "number": 2, + "x": 0.4, + "y": 0.9 + }, + { + "style": "attack", + "number": 0, + "x": 0.8, + "y": 0.15 } ] } \ No newline at end of file diff --git a/Code/src/json/duel5.json b/Code/src/json/duel5.json index 23eaa1c..7d119e3 100644 --- a/Code/src/json/duel5.json +++ b/Code/src/json/duel5.json @@ -1,7 +1,7 @@ { "enemyVisible": true, "bonusVisible": true, - "robotRandomPosition": true, + "robotRandomPosition": false, "initStat": { "valueMax": 10, "lBar": [ @@ -50,13 +50,13 @@ { "height": 0.1, "width": 0.1, - "x": 0.1, - "y": 0.1, + "x": 0.6, + "y": 0.13, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, - "damage": 5, + "speed": 10, + "speedReload": 5, + "range": 5, + "damage": 10, "lNode": [ { "type": "condition", @@ -129,7 +129,7 @@ { "height": 0.1, "width": 0.1, - "x": 0.9, + "x": 0.5, "y": 0.9, "name": "myself", "speed": 3, @@ -189,22 +189,88 @@ ], "lBonus": [ { - "style": "shield", + "style": "speed", "number": 0, - "x": 0.2, - "y": 0.1 + "x": 0.1, + "y": 0.8 }, { "style": "shield", - "number": 1, - "x": 0.5, + "number": 2, + "x": 0.1, + "y": 0.7 + }, + { + "style": "shield", + "number": 2, + "x": 0.1, + "y": 0.6 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, "y": 0.9 }, { "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.8 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.7 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.6 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.5 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.4 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.3 + }, + { + "style": "shield", + "number": 0, + "x": 0.9, + "y": 0.2 + }, + { + "style": "attack", + "number": 2, + "x": 0.9, + "y": 0.1 + }, + { + "style": "attack", + "number": 2, + "x": 0.1, + "y": 0.1 + }, + { + "style": "attack", "number": 2, "x": 0.2, - "y": 0.8 + "y": 0.1 } ] } \ No newline at end of file diff --git a/Code/src/json/duel6.json b/Code/src/json/duel6.json index 23eaa1c..42ea94a 100644 --- a/Code/src/json/duel6.json +++ b/Code/src/json/duel6.json @@ -1,12 +1,12 @@ { "enemyVisible": true, "bonusVisible": true, - "robotRandomPosition": true, + "robotRandomPosition": false, "initStat": { - "valueMax": 10, + "valueMax": 20, "lBar": [ { - "valueMax": 5, + "valueMax": 10, "color": 16711680, "colorMin": 16711680, "lText": [ @@ -15,7 +15,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 8323327, "colorMin": 8323327, "lText": [ @@ -24,7 +24,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 255, "colorMin": 255, "lText": [ @@ -33,7 +33,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 32768, "colorMin": 32768, "lText": [ @@ -50,13 +50,13 @@ { "height": 0.1, "width": 0.1, - "x": 0.1, - "y": 0.1, + "x": 0.15, + "y": 0.5, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, - "damage": 5, + "speed": 5, + "speedReload": 10, + "range": 10, + "damage": 10, "lNode": [ { "type": "condition", @@ -129,13 +129,13 @@ { "height": 0.1, "width": 0.1, - "x": 0.9, - "y": 0.9, + "x": 0.35, + "y": 0.7, "name": "myself", - "speed": 3, - "speedReload": 1, - "range": 3, - "damage": 5, + "speed": 0, + "speedReload": 0, + "range": 0, + "damage": 0, "lNode": [ { "type": "move", @@ -205,6 +205,12 @@ "number": 2, "x": 0.2, "y": 0.8 + }, + { + "style": "attack", + "number": 0, + "x": 0.8, + "y": 0.4 } ] } \ No newline at end of file diff --git a/Code/src/json/duel7.json b/Code/src/json/duel7.json index 23eaa1c..3a03367 100644 --- a/Code/src/json/duel7.json +++ b/Code/src/json/duel7.json @@ -1,12 +1,12 @@ { - "enemyVisible": true, - "bonusVisible": true, + "enemyVisible": false, + "bonusVisible": false, "robotRandomPosition": true, "initStat": { - "valueMax": 10, + "valueMax": 20, "lBar": [ { - "valueMax": 5, + "valueMax": 10, "color": 16711680, "colorMin": 16711680, "lText": [ @@ -15,7 +15,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 8323327, "colorMin": 8323327, "lText": [ @@ -24,7 +24,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 255, "colorMin": 255, "lText": [ @@ -33,7 +33,7 @@ ] }, { - "valueMax": 5, + "valueMax": 10, "color": 32768, "colorMin": 32768, "lText": [ @@ -53,10 +53,10 @@ "x": 0.1, "y": 0.1, "name": "enemy", - "speed": 3, - "speedReload": 3, - "range": 3, - "damage": 5, + "speed": 8, + "speedReload": 8, + "range": 8, + "damage": 8, "lNode": [ { "type": "condition", @@ -132,10 +132,10 @@ "x": 0.9, "y": 0.9, "name": "myself", - "speed": 3, - "speedReload": 1, - "range": 3, - "damage": 5, + "speed": 0, + "speedReload": 0, + "range": 0, + "damage": 0, "lNode": [ { "type": "move", @@ -189,22 +189,28 @@ ], "lBonus": [ { - "style": "shield", - "number": 0, - "x": 0.2, + "style": "speed", + "number": 1, + "x": 0.1, "y": 0.1 }, { "style": "shield", - "number": 1, - "x": 0.5, - "y": 0.9 + "number": 2, + "x": 0.9, + "y": 0.1 }, { "style": "shield", "number": 2, - "x": 0.2, - "y": 0.8 + "x": 0.1, + "y": 0.9 + }, + { + "style": "attack", + "number": 1, + "x": 0.9, + "y": 0.9 } ] } \ No newline at end of file