From 20c3716b7da20b3612a6bc2d8fd3402320ae5fc7 Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Fri, 10 Jul 2020 01:50:25 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20l'image=20du=20bouton=20de=20sauve?= =?UTF-8?q?garde=20-=20Cr=C3=A9ation=20des=20fichiers=20json=20qui=20servi?= =?UTF-8?q?ront=20=C3=A0=20charger=20les=20niveaux=20du=20jeux=20-=20Pour?= =?UTF-8?q?=20le=20moment,=20l'arbre=20d'action=20et=20les=20stats=20initi?= =?UTF-8?q?als=20sont=20charg=C3=A9s=20depuis=20un=20fichier=20json=20-=20?= =?UTF-8?q?L'arbre=20se=20charge=20automatiquement=20en=20placant=20les=20?= =?UTF-8?q?actions=20au=20bon=20endroit=20=20et=20dans=20le=20bon=20ordre?= =?UTF-8?q?=20-=20cr=C3=A9ation=20des=20constantes=20CENTERX=5FTREE,=20OFF?= =?UTF-8?q?X=5FTREE=20et=20OFFY=5FTREE=20dans=20le=20but=20de=20g=C3=A9rer?= =?UTF-8?q?=20la=20disposition=20et=20l'=C3=A9cartement=20des=20actions=20?= =?UTF-8?q?-=20Suppression=20du=20code=20en=20dur=20de=20la=20cr=C3=A9atio?= =?UTF-8?q?n=20de=20l'arbre=20initial.=20Dor=C3=A9navant,=20tout=20les=20a?= =?UTF-8?q?rbres=20initiaux=20sot=20issus=20d'un=20fichier=20json)=20-=20A?= =?UTF-8?q?jout=20d'un=20bouton=20sauvegarder=20en=20bas=20=C3=A0=20droite?= =?UTF-8?q?=20de=20l'=C3=A9cran=20dans=20le=20but=20d'afficher=20dans=20la?= =?UTF-8?q?=20console=20la=20sauvegarde=20json=20de=20l'arbre=20et=20des?= =?UTF-8?q?=20stats=20du=20robot=20-=20Chaque=20type=20de=20partie=20(TEAM?= =?UTF-8?q?,=20FLAG=20...)=20poss=C3=A8de=20dor=C3=A9navant=20son=20propre?= =?UTF-8?q?=20fichier=20json=20(level1,=20level2,=20level3,=20level4,=20le?= =?UTF-8?q?vel5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/Gruntfile.js | 30 ++++++++- Code/assets/en/buttons/save.png | Bin 0 -> 8354 bytes Code/assets/fr/buttons/save.png | Bin 0 -> 8354 bytes Code/package-lock.json | 97 ++++++++++++++++++++------- Code/package.json | 5 +- Code/public/js/level2.min.js | 2 +- Code/public/json/level1.json | 1 + Code/public/json/level2.json | 1 + Code/public/json/level3.json | 1 + Code/public/json/level4.json | 1 + Code/public/json/level5.json | 1 + Code/src/js/level2/Function.js | 2 +- Code/src/js/level2/Game.js | 96 ++++++++++++++++----------- Code/src/js/level2/LoadFile.js | 1 + Code/src/js/level2/RectangleNode.js | 13 ++-- Code/src/js/level2/Type.js | 18 ++--- Code/src/js/level2/Variable.js | 5 ++ Code/src/json/level1.json | 99 ++++++++++++++++++++++++++++ Code/src/json/level2.json | 98 +++++++++++++++++++++++++++ Code/src/json/level3.json | 98 +++++++++++++++++++++++++++ Code/src/json/level4.json | 98 +++++++++++++++++++++++++++ Code/src/json/level5.json | 79 ++++++++++++++++++++++ 22 files changed, 665 insertions(+), 81 deletions(-) create mode 100644 Code/assets/en/buttons/save.png create mode 100644 Code/assets/fr/buttons/save.png create mode 100644 Code/public/json/level1.json create mode 100644 Code/public/json/level2.json create mode 100644 Code/public/json/level3.json create mode 100644 Code/public/json/level4.json create mode 100644 Code/public/json/level5.json create mode 100644 Code/src/json/level1.json create mode 100644 Code/src/json/level2.json create mode 100644 Code/src/json/level3.json create mode 100644 Code/src/json/level4.json create mode 100644 Code/src/json/level5.json diff --git a/Code/Gruntfile.js b/Code/Gruntfile.js index 8c914ca..352fc6e 100644 --- a/Code/Gruntfile.js +++ b/Code/Gruntfile.js @@ -3,8 +3,18 @@ module.exports = function (grunt) { copy: { main: { files: [ - {expand: false, src: ['node_modules/jquery/dist/jquery.min.js'], dest: 'public/js/jquery.min.js', filter: 'isFile'}, - {expand: false, src: ['node_modules/phaser/dist/phaser.min.js'], dest: 'public/js/phaser.min.js', filter: 'isFile'}, + { + expand: false, + src: ['node_modules/jquery/dist/jquery.min.js'], + dest: 'public/js/jquery.min.js', + filter: 'isFile' + }, + { + expand: false, + src: ['node_modules/phaser/dist/phaser.min.js'], + dest: 'public/js/phaser.min.js', + filter: 'isFile' + }, ], }, }, @@ -29,14 +39,28 @@ module.exports = function (grunt) { 'public/css//app.min.css': ['src/css/*.css'] } } + }, + minjson: { + compile: { + files: { + 'public/json//level1.json': ['src/json/level1.json'], + 'public/json//level2.json': ['src/json/level2.json'], + 'public/json//level3.json': ['src/json/level3.json'], + 'public/json//level4.json': ['src/json/level4.json'], + 'public/json//level5.json': ['src/json/level5.json'] + } + } } + }) + grunt.loadNpmTasks('grunt-minjson'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-uglify-es'); grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.registerTask('json', ['minjson']); grunt.registerTask('cp', ['copy']); grunt.registerTask('ugl', ['uglify', 'cssmin']); - grunt.registerTask('default', ['cp', 'ugl']); + grunt.registerTask('default', ['cp', 'ugl', 'json']); } diff --git a/Code/assets/en/buttons/save.png b/Code/assets/en/buttons/save.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3e7d81a88ad9c314b35490169b208574a05548 GIT binary patch literal 8354 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/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}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,n,r=new CategoryBar,o=1,d){super(e,t,s,i,h,a,void 0!==d?d:r.valueMax,n,n,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let l={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(),l).setOrigin(0,0),this.categoryBar=r,this.setValue(0),this.categoryBar.setValueOf(this,o)}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)}setValWithX(e){this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax))}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)}}class BonusAttack extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusAttack",h)}useOn(e){let t=e.speed;e.setSpeed(t+this.value),this.scene.time.addEvent({delay:this.time,callback:e.setSpeed(t)}),this.destroy()}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusShield",h)}useOn(e){e.shield.valueMax=e.shield.valueMax+this.value,e.shield.value=e.shield.value+this.val,this.destroy()}}class BonusSpeed extends Bonus{constructor(e,t,s,i,h,a){let n;switch(h){case 1:n="bonusSpeed0";break;case 2:n="bonusSpeed1";break;case 3:default:n="bonusSpeed2"}super(e,t,s,i,n,h),this.time=a}useOn(e){e.increaseSpeedBonus(this.value),this.scene.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value)}),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,.5);let e=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}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=15718407}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint()}}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)}}class Condition{constructor(e,t=!1,s=!1,i,h){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;t=h&&(s>h&&(s=h,i=[]),i.push(t))}}),i.length>1?i[Math.floor(Math.random()*(i.length+1))]:i[0]}function toJson(e,t,s=!1){let i;switch(typeof t){case"string":i='"'+e.toString()+'":"'+t+'"';break;default:i='"'+e.toString()+'":'+t}return s||(i+=","),i}function endLineJson(e){return e.length>0&&","===e[e.length-1]&&(e=e.substr(0,e.length-1)),e}var tree=void 0;class Game extends ManageLang{constructor(e,t){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,void 0!==t&&(this.tree=JSON.parse(t),this.loadSave(this.tree))}create(){super.create(),this.doLine=!1,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.scene.pause("GamingBoard"),this.selected=null;this.createButton();let e=WIDTH_WINDOW/4*3,t=WIDTH_WINDOW/10;if(void 0===this.tree){this.initStat=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10),this.initStat.addBar(DAMAGE_BEGIN,5,COLOR_ATTACK,["DAMAGE","DEGATS"]),this.initStat.addBar(SPEED_RELOAD_BEGIN,5,COLOR_SPEED_RELOAD,["R.S","RECHARGEMENT"]),this.initStat.addBar(SPEED_BEGIN,5,COLOR_MOVE,["SPEED","VITESSE"]),this.initStat.addBar(RANGE_BEGIN,5,COLOR_RANGE,["RANGE","PORTEE"]),this.tree=new RectangleNode(e,HEIGHT_WINDOW/10,this,"waria"),this.tree.addRect(new RectangleNode(e-2*t,HEIGHT_WINDOW/3,this,"move",[!0,!1])),this.tree.addRect(new RectangleNode(e+t,HEIGHT_WINDOW/3,this,"move",[!0])),this.tree.addRect(new RectangleNode(e,HEIGHT_WINDOW/3,this,"attack",[1/3]));let s=new RectangleNode(e-t,HEIGHT_WINDOW/3,this,"condition",[!0,!0,!1,1/3,0]);this.tree.addRect(s),s.addRect(new RectangleNode(e,HEIGHT_WINDOW/1.5,this,"move",[!1])),s.addRect(new RectangleNode(e-t,HEIGHT_WINDOW/1.5,this,"attack",[1]))}else{let e=this.tree.getJson();e=JSON.parse(e);let t=this.initStat.getJson();t=JSON.parse(t),this.loadSave(e,t)}this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,this.gm,MYSELF)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,this.gm)),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()}),this.input.keyboard.on("keydown-E",()=>{this.clickPencil()}),this.input.keyboard.on("keydown-ENTER",()=>{this.clickPlus()})}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}loadSave(e,t){this.initStat=this.loadInitSave(t),this.tree=this.loadTree(e)}loadTree(e){let t=new RectangleNode(e.x,e.y,this,e.type,e.option);return void 0!==e.lRect&&e.lRect.length>0&&e.lRect.forEach(e=>t.addRect(this.loadTree(e))),t}loadInitSave(e){let t=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10);for(let s=0;se.getX()-t.getX()),this.gm.modifyNodes(this.tree.getNode()),this.gm.modifyValue(this.initStat.lBar[0].value,this.initStat.lBar[1].value,this.initStat.lBar[2].value,this.initStat.lBar[3].value),this.gm.resume()}changeFrame(e,t=0,s=0){e.setFrame(t+2*s)}createButton(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=OFFY_MAP/1.5,i=1.1*s,h=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.play=this.add.sprite(e,t,"play").setOrigin(1,0).setInteractive();let a=this.add.sprite(e-i,t,"speed").setOrigin(1,0).setInteractive();this.pencil=this.add.sprite(e-2*i,t,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(e-3*i,t,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(e-4*i,t,"plus").setOrigin(1,0).setInteractive().setVisible(!1);let n=this.add.sprite(e-5*i,t,"mute").setOrigin(1,0).setInteractive();this.linePlay=0,this.lineSpeed=1===SPEED_GAME?0:1,this.changeFrame(a,0,this.lineSpeed),this.father.sound.mute?this.lineMute=1:this.lineMute=0,this.changeFrame(n,0,this.lineMute),h.displayHeight=h.displayWidth=s,this.play.displayHeight=this.play.displayWidth=s,a.displayHeight=a.displayWidth=s,n.displayHeight=n.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.play.on("pointerout",()=>this.changeFrame(this.play,0,this.linePlay)),this.play.on("pointerover",()=>this.changeFrame(this.play,1,this.linePlay)),a.on("pointerout",()=>this.changeFrame(a,0,this.lineSpeed)),a.on("pointerover",()=>this.changeFrame(a,1,this.lineSpeed)),n.on("pointerout",()=>this.changeFrame(n,0,this.lineMute)),n.on("pointerover",()=>this.changeFrame(n,1,this.lineMute)),this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),this.play.on("pointerdown",()=>this.clickPlay()),a.on("pointerdown",()=>this.clickSpeed(a)),h.on("pointerdown",()=>this.clickBack()),n.on("pointerdown",()=>this.clickMute(n)),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}creatBtnOutAndOver(e){e.on("pointerout",()=>this.changeFrame(e,0)),e.on("pointerover",()=>this.changeFrame(e,1))}clickPlay(){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(),this.changeFrame(this.play,1,this.linePlay)}clickSpeed(e){1===SPEED_GAME?(SPEED_GAME=2,this.lineSpeed=1):(SPEED_GAME=1,this.lineSpeed=0),this.changeFrame(e,1,this.lineSpeed)}clickPencil(){if(null!==this.selected){switch(console.log("PENCIL"),this.changeFrame(this.pencil,0),this.selected.type){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this,this.selected,!1,this.selected.node.percentRange));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this,this.selected,this.selected.node.toward,this.selected.node.enemyBot));break;case"condition":this.selected.node.shieldFilter?this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,this.selected.node.myself,[this.selected.node.shield,"shield"])):this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,this.selected.node.myself,[this.selected.node.range,"range"]));break;default:return}this.scene.pause("Game"),this.scene.launch("AddNode")}}clickBin(){null!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0),this.tryClick())}clickPlus(){null!==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.changeFrame(this.plus,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(e){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.lineMute=0):(this.father.sound.mute=!0,this.lineMute=1),this.changeFrame(e,1,this.lineMute)}tryClick(){this.pencil.setVisible(!1),this.bin.setVisible(!1),this.plus.setVisible(!1),null!=this.selected&&(this.selected.deselect(),this.selected=null)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listRobot=[],listBonus=[],this.father=e,this.end=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit")}create(){listBonus.push(new BonusSpeed("Fusée",this,WIDTH_MAP/2,WIDTH_MAP/2,5,2e3)),this.add.image(0,0,"background").alpha=.1;for(let e=0;et.addNode(e)),!0)}modifyValue(e,t,s,i){let h=this.getMyRobot();return void 0!==h&&(h.setSpeed(s),h.setRange(i),h.setSpeedReload(t),h.setDamage(e),!0)}getMyRobot(){for(let e=0;ee.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3/SPEED_GAME,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(e,t,s,i,h,a){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="{";return e+='"lBar":[',this.lBar.forEach(t=>e+=t.getJson()+","),e=endLineJson(e)+"],",e+='"lText":[',this.lText.forEach(t=>{e+="[",t.forEach(t=>{e+='"'+t+'",'}),e=endLineJson(e),e+="],"}),e=endLineJson(e),e+="]",e+="}"}}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(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}),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("enemy","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/"),this.loadSprite("bin",100,100,"buttons/"),this.loadSprite("plus",100,100,"buttons/"),this.loadSprite("pencil",100,100,"buttons/"),this.loadSprite("speed",100,100,"buttons/"),this.loadSprite("mute",100,100,"buttons/"),this.loadSprite("back",200,200,"buttons/"),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("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.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0)}loadSprite(e,t,s,i="",h=!1){this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s})}loadImage(e,t="",s=!1){this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/"+LANG+"/"+t+e+".png")}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e,t){super(e,t)}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{constructor(e,t=!0){this.toward=e,this.enemyBot=t}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,listBonus);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)),!0}}return!1}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;return e=this.toward?0:2,this.enemyBot||(e+=1),e}getOptionJson(){return this.toward+","+this.enemyBot}}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={font:(i/1.5).toString()+"px stencil",fill:"#e2e2e2"};this.add.text(e-s,t-i,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(e,t-i,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(e+s,t-i,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(e-s,t+i,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e,t+i,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e+s,t+i,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*i,a.scaleX=a.scaleY}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 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]),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_WINDOW/6,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){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;te+=t.getJson()+","),e=endLineJson(e)+"]"),e=endLineJson(e),e+="}"}}class Robot{constructor(e,t,s,i,h,a="enemy"){this.speed=SPEED_BASE+SPEED_BEGIN,this.speedReload=SPEED_RELOAD_BASE+SPEED_RELOAD_BEGIN,this.range=RANGE_BASE+RANGE_BEGIN,this.damage=DAMAGE_BASE+DAMAGE_BEGIN,this.speedBonus=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.circleRange=null,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=[];let n=new Condition(!0,!0,!1,.5,0);n.addNode(new Move(!1)),this.addNode(n),this.addNode(new Attack),this.addNode(new Move(!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.displayWidth=this.circle.displayHeight=this.width):this.circle=this.scene.add.circle(this.x,this.y,this.width/2,COLOR_MYSELF).setInteractive(),this.circle.on("pointerdown",()=>this.click())}click(){null===this.circleRange?this.drawRange():this.eraseRange()}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x),this.drawCircleRange()}setY(e){this.y=e,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y),this.drawCircleRange()}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}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e,console.log(this.speed)}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");let s=this.calcDistance(this.target)*WIDTH_MAP/1e3/SPEED_GAME;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/SPEED_GAME,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*DAMAGE*t)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(e){let t=this.shield.decrease(e),s={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},i=this.scene.add.text(this.x,this.y,e.toString(),s).setOrigin(0,1);return this.scene.tweens.add({targets:i,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>i.destroy()}),this.scene.sound.play("hit"),console.log("HIT"),t>0&&(console.log("Shield Broken"),this.life.decrease(t)),this.die()}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&&(null!==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;ee.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){newGame(this.father),this.scene.start("Game")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1;const MYSELF="myself",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,COLOR_MYSELF=6711039,WIDTH_WINDOW=$(document).width()-20,HEIGHT_WINDOW=$(document).height()-20,WIDTH_MAP=WIDTH_WINDOW1/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}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,n,r=new CategoryBar,o=1,d){super(e,t,s,i,h,a,void 0!==d?d:r.valueMax,n,n,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let l={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(),l).setOrigin(0,0),this.categoryBar=r,this.setValue(0),this.categoryBar.setValueOf(this,o)}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)}setValWithX(e){this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax))}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)}}class BonusAttack extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusAttack",h)}useOn(e){let t=e.speed;e.setSpeed(t+this.value),this.scene.time.addEvent({delay:this.time,callback:e.setSpeed(t)}),this.destroy()}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusShield",h)}useOn(e){e.shield.valueMax=e.shield.valueMax+this.value,e.shield.value=e.shield.value+this.val,this.destroy()}}class BonusSpeed extends Bonus{constructor(e,t,s,i,h,a){let n;switch(h){case 1:n="bonusSpeed0";break;case 2:n="bonusSpeed1";break;case 3:default:n="bonusSpeed2"}super(e,t,s,i,n,h),this.time=a}useOn(e){e.increaseSpeedBonus(this.value),this.scene.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value)}),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,.5);let e=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}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=15718407}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint()}}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)}}class Condition{constructor(e,t=!1,s=!1,i,h){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;t=h&&(s>h&&(s=h,i=[]),i.push(t))}}),i.length>1?i[Math.floor(Math.random()*(i.length+1))]:i[0]}function toJson(e,t,s=!1){let i;switch(typeof t){case"string":i='"'+e.toString()+'":"'+t+'"';break;default:i='"'+e.toString()+'":'+t}return s||(i+=","),i}function endLineJson(e){return e.length>0&&","===e[e.length-1]&&(e=e.substr(0,e.length-1)),e}var tree=void 0;class Game extends ManageLang{constructor(e,t="level1"){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,this.level=t}preload(){this.cache.json.exists("level")&&this.cache.json.remove("level"),this.load.json("level","public/json/"+this.level+".json")}create(){if(super.create(),void 0!==this.tree&&void 0!==this.initStat){let e=this.tree.getJson(!0);console.log(e),e=JSON.parse(e);let t=this.initStat.getJson(!0);t=JSON.parse(t),this.loadSave(e,t)}else{let e=this.cache.json.get("level");void 0!==e&&this.loadSave(e.tree,e.initStat)}this.doLine=!1,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.scene.pause("GamingBoard"),this.selected=null;this.createButton();this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,this.gm,MYSELF)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,this.gm)),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()}),this.input.keyboard.on("keydown-E",()=>{this.clickPencil()}),this.input.keyboard.on("keydown-ENTER",()=>{this.clickPlus()})}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}loadSave(e,t){this.initStat=this.loadInitSave(t),this.tree=this.loadTree(e)}loadTree(e,t=CENTERX_TREE,s=OFFY_TREE/2){if(void 0!==e.x&&void 0!==e.y){let t=new RectangleNode(e.x,e.y,this,e.type,e.option);return void 0!==e.lRect&&e.lRect.length>0&&e.lRect.forEach(e=>t.addRect(this.loadTree(e))),t}{let i=new RectangleNode(t,s,this,e.type,e.option);if(void 0!==e.lRect&&e.lRect.length>0){let h=e.lRect.length,a=t-OFFX_TREE/2*(h-1),n=s+OFFY_TREE;e.lRect.forEach(e=>{i.addRect(this.loadTree(e,a,n)),a+=OFFX_TREE})}return i}}loadInitSave(e){let t=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10);for(let s=0;se.getX()-t.getX()),this.gm.modifyNodes(this.tree.getNode()),this.gm.modifyValue(this.initStat.lBar[0].value,this.initStat.lBar[1].value,this.initStat.lBar[2].value,this.initStat.lBar[3].value),this.gm.resume()}changeFrame(e,t=0,s=0){e.setFrame(t+2*s)}createButton(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=OFFY_MAP/1.5,i=1.1*s,h=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.play=this.add.sprite(e,t,"play").setOrigin(1,0).setInteractive();let a=this.add.sprite(e-i,t,"speed").setOrigin(1,0).setInteractive(),n=this.add.sprite(WIDTH_WINDOW,t,"save").setOrigin(1,0).setInteractive();this.pencil=this.add.sprite(e-2*i,t,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(e-3*i,t,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(e-4*i,t,"plus").setOrigin(1,0).setInteractive().setVisible(!1);let r=this.add.sprite(e-5*i,t,"mute").setOrigin(1,0).setInteractive();this.linePlay=0,this.lineSpeed=1===SPEED_GAME?0:1,this.changeFrame(a,0,this.lineSpeed),this.father.sound.mute?this.lineMute=1:this.lineMute=0,this.changeFrame(r,0,this.lineMute),h.displayHeight=h.displayWidth=s,n.displayHeight=n.displayWidth=s,this.play.displayHeight=this.play.displayWidth=s,a.displayHeight=a.displayWidth=s,r.displayHeight=r.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.play.on("pointerout",()=>this.changeFrame(this.play,0,this.linePlay)),this.play.on("pointerover",()=>this.changeFrame(this.play,1,this.linePlay)),a.on("pointerout",()=>this.changeFrame(a,0,this.lineSpeed)),a.on("pointerover",()=>this.changeFrame(a,1,this.lineSpeed)),r.on("pointerout",()=>this.changeFrame(r,0,this.lineMute)),r.on("pointerover",()=>this.changeFrame(r,1,this.lineMute)),this.creatBtnOutAndOver(n),this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),this.play.on("pointerdown",()=>this.clickPlay()),a.on("pointerdown",()=>this.clickSpeed(a)),h.on("pointerdown",()=>this.clickBack()),r.on("pointerdown",()=>this.clickMute(r)),n.on("pointerdown",()=>this.clickSave()),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}creatBtnOutAndOver(e){e.on("pointerout",()=>this.changeFrame(e,0)),e.on("pointerover",()=>this.changeFrame(e,1))}clickSave(){this.tree.sort((e,t)=>e.getX()-t.getX());let e='{"tree":'+this.tree.getJson()+',"initStat":'+this.initStat.getJson()+"}";console.log(e)}clickPlay(){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(),this.changeFrame(this.play,1,this.linePlay)}clickSpeed(e){1===SPEED_GAME?(SPEED_GAME=2,this.lineSpeed=1):(SPEED_GAME=1,this.lineSpeed=0),this.changeFrame(e,1,this.lineSpeed)}clickPencil(){if(null!==this.selected){switch(console.log("PENCIL"),this.changeFrame(this.pencil,0),this.selected.type){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this,this.selected,!1,this.selected.node.percentRange));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this,this.selected,this.selected.node.toward,this.selected.node.enemyBot));break;case"condition":this.selected.node.shieldFilter?this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,this.selected.node.myself,[this.selected.node.shield,"shield"])):this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,this.selected.node.myself,[this.selected.node.range,"range"]));break;default:return}this.scene.pause("Game"),this.scene.launch("AddNode")}}clickBin(){null!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0),this.tryClick())}clickPlus(){null!==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.changeFrame(this.plus,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(e){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.lineMute=0):(this.father.sound.mute=!0,this.lineMute=1),this.changeFrame(e,1,this.lineMute)}tryClick(){this.pencil.setVisible(!1),this.bin.setVisible(!1),this.plus.setVisible(!1),null!=this.selected&&(this.selected.deselect(),this.selected=null)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listRobot=[],listBonus=[],this.father=e,this.end=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit")}create(){listBonus.push(new BonusSpeed("Fusée",this,WIDTH_MAP/2,WIDTH_MAP/2,5,2e3)),this.add.image(0,0,"background").alpha=.1;for(let e=0;et.addNode(e)),!0)}modifyValue(e,t,s,i){let h=this.getMyRobot();return void 0!==h&&(h.setSpeed(s),h.setRange(i),h.setSpeedReload(t),h.setDamage(e),!0)}getMyRobot(){for(let e=0;ee.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3/SPEED_GAME,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(e,t,s,i,h,a){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="{";return e+='"lBar":[',this.lBar.forEach(t=>e+=t.getJson()+","),e=endLineJson(e)+"],",e+='"lText":[',this.lText.forEach(t=>{e+="[",t.forEach(t=>{e+='"'+t+'",'}),e=endLineJson(e),e+="],"}),e=endLineJson(e),e+="]",e+="}"}}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(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}),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("enemy","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/"),this.loadSprite("bin",100,100,"buttons/"),this.loadSprite("plus",100,100,"buttons/"),this.loadSprite("pencil",100,100,"buttons/"),this.loadSprite("speed",100,100,"buttons/"),this.loadSprite("mute",100,100,"buttons/"),this.loadSprite("save",100,100,"buttons/"),this.loadSprite("back",200,200,"buttons/"),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("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.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0)}loadSprite(e,t,s,i="",h=!1){this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s})}loadImage(e,t="",s=!1){this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/"+LANG+"/"+t+e+".png")}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e,t){super(e,t)}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{constructor(e,t=!0){this.toward=e,this.enemyBot=t}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,listBonus);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)),!0}}return!1}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;return e=this.toward?0:2,this.enemyBot||(e+=1),e}getOptionJson(){return this.toward+","+this.enemyBot}}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={font:(i/1.5).toString()+"px stencil",fill:"#e2e2e2"};this.add.text(e-s,t-i,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(e,t-i,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(e+s,t-i,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(e-s,t+i,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e,t+i,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e+s,t+i,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*i,a.scaleX=a.scaleY}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 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]),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){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+="}"}}class Robot{constructor(e,t,s,i,h,a="enemy"){this.speed=SPEED_BASE+SPEED_BEGIN,this.speedReload=SPEED_RELOAD_BASE+SPEED_RELOAD_BEGIN,this.range=RANGE_BASE+RANGE_BEGIN,this.damage=DAMAGE_BASE+DAMAGE_BEGIN,this.speedBonus=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.circleRange=null,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=[];let n=new Condition(!0,!0,!1,.5,0);n.addNode(new Move(!1)),this.addNode(n),this.addNode(new Attack),this.addNode(new Move(!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.displayWidth=this.circle.displayHeight=this.width):this.circle=this.scene.add.circle(this.x,this.y,this.width/2,COLOR_MYSELF).setInteractive(),this.circle.on("pointerdown",()=>this.click())}click(){null===this.circleRange?this.drawRange():this.eraseRange()}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x),this.drawCircleRange()}setY(e){this.y=e,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y),this.drawCircleRange()}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}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e,console.log(this.speed)}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");let s=this.calcDistance(this.target)*WIDTH_MAP/1e3/SPEED_GAME;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/SPEED_GAME,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*DAMAGE*t)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(e){let t=this.shield.decrease(e),s={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},i=this.scene.add.text(this.x,this.y,e.toString(),s).setOrigin(0,1);return this.scene.tweens.add({targets:i,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>i.destroy()}),this.scene.sound.play("hit"),console.log("HIT"),t>0&&(console.log("Shield Broken"),this.life.decrease(t)),this.die()}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&&(null!==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;ee.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(t))}clickPlay(e){newGame(this.father,e),this.scene.start("Game")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1;const MYSELF="myself",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,COLOR_MYSELF=6711039,WIDTH_WINDOW=$(document).width()-20,HEIGHT_WINDOW=$(document).height()-20,WIDTH_MAP=WIDTH_WINDOW 0) { - element.lRect.forEach(rect => tree.addRect(this.loadTree(rect))) + loadTree(element, posX = CENTERX_TREE, posY = OFFY_TREE / 2) { + if (element.x !== undefined && element.y !== undefined) { + let tree = new RectangleNode(element.x, element.y, this, element.type, element.option); + if (element.lRect !== undefined && element.lRect.length > 0) { + element.lRect.forEach(rect => tree.addRect(this.loadTree(rect))) + } + return tree; + } else { + let tree = new RectangleNode(posX, posY, this, element.type, element.option); + if (element.lRect !== undefined && element.lRect.length > 0) { + let nbRect = element.lRect.length; + let x = posX - (OFFX_TREE / 2) * (nbRect - 1); + let y = posY + OFFY_TREE; + element.lRect.forEach(rect => { + tree.addRect(this.loadTree(rect, x, y)) + x += OFFX_TREE; + }); + } + return tree; } - return tree; } loadInitSave(element) { @@ -194,6 +201,8 @@ class Game extends ManageLang { this.play = this.add.sprite(x, y, 'play').setOrigin(1, 0).setInteractive(); let speed = this.add.sprite(x - diffX, y, 'speed').setOrigin(1, 0).setInteractive(); + let save = this.add.sprite(WIDTH_WINDOW, y, 'save').setOrigin(1, 0).setInteractive(); + this.pencil = this.add.sprite(x - diffX * 2, y, 'pencil').setOrigin(1, 0).setInteractive().setVisible(false); this.bin = this.add.sprite(x - diffX * 3, y, 'bin').setOrigin(1, 0).setInteractive().setVisible(false); this.plus = this.add.sprite(x - diffX * 4, y, 'plus').setOrigin(1, 0).setInteractive().setVisible(false); @@ -215,7 +224,7 @@ class Game extends ManageLang { this.changeFrame(mute, 0, this.lineMute); back.displayHeight = back.displayWidth = width; - + save.displayHeight = save.displayWidth = width; this.play.displayHeight = this.play.displayWidth = width; speed.displayHeight = speed.displayWidth = width; mute.displayHeight = mute.displayWidth = width; @@ -229,6 +238,7 @@ class Game extends ManageLang { speed.on('pointerover', () => this.changeFrame(speed, 1, this.lineSpeed)); mute.on('pointerout', () => this.changeFrame(mute, 0, this.lineMute)); mute.on('pointerover', () => this.changeFrame(mute, 1, this.lineMute)); + this.creatBtnOutAndOver(save); this.creatBtnOutAndOver(back); this.creatBtnOutAndOver(this.pencil); this.creatBtnOutAndOver(this.bin); @@ -238,6 +248,7 @@ class Game extends ManageLang { speed.on('pointerdown', () => this.clickSpeed(speed)); back.on('pointerdown', () => this.clickBack()); mute.on('pointerdown', () => this.clickMute(mute)); + save.on('pointerdown', () => this.clickSave()); this.pencil.on('pointerdown', () => this.clickPencil()); this.bin.on('pointerdown', () => this.clickBin()); this.plus.on('pointerdown', () => this.clickPlus()); @@ -253,6 +264,15 @@ class Game extends ManageLang { btn.on('pointerover', () => this.changeFrame(btn, 1)); } + clickSave() { + let sortDesc = (a, b) => a.getX() - b.getX(); + this.tree.sort(sortDesc); + let tree = this.tree.getJson(); + let initStat = this.initStat.getJson(); + let json = '{' + '"tree":' + tree + ',"initStat":' + initStat + '}'; + console.log(json); + } + clickPlay() { if (this.scene.isPaused('GamingBoard')) this.resume(); diff --git a/Code/src/js/level2/LoadFile.js b/Code/src/js/level2/LoadFile.js index 1933e17..781969a 100644 --- a/Code/src/js/level2/LoadFile.js +++ b/Code/src/js/level2/LoadFile.js @@ -67,6 +67,7 @@ class LoadFile extends Phaser.Scene { this.loadSprite('pencil', 100, 100, 'buttons/'); this.loadSprite('speed', 100, 100, 'buttons/'); this.loadSprite('mute', 100, 100, 'buttons/'); + this.loadSprite('save', 100, 100, 'buttons/'); this.loadSprite('back', 200, 200, 'buttons/'); this.loadSprite('shortRange', 300, 150, 'buttons/'); diff --git a/Code/src/js/level2/RectangleNode.js b/Code/src/js/level2/RectangleNode.js index fcaccfa..2e73115 100644 --- a/Code/src/js/level2/RectangleNode.js +++ b/Code/src/js/level2/RectangleNode.js @@ -40,7 +40,7 @@ class RectangleNode { this.type = type; this.rect.on('pointerdown', () => this.click()); this.rect.setOrigin(0.5, 0); - this.rect.displayHeight = HEIGHT_WINDOW / 6; + this.rect.displayHeight = HEIGHT_NODE; this.rect.scaleX = this.rect.scaleY; } @@ -167,15 +167,18 @@ class RectangleNode { return false; } - getJson() { + getJson(withX = false) { let json = '{'; - json += toJson("x", this.rect.x) + toJson("y", this.rect.y) + toJson("type", this.type); - if(this.node !==undefined){ + if (withX) { + json += toJson("x", this.rect.x) + toJson("y", this.rect.y) + } + json += toJson("type", this.type); + if (this.node !== undefined) { json += '"option":[' + this.node.getOptionJson() + '],'; } if (this.canAddNode) { json += '"lRect":['; - this.lRect.forEach(rect => json += rect.getJson() + ','); + this.lRect.forEach(rect => json += rect.getJson(withX) + ','); json = endLineJson(json) + ']'; } json = endLineJson(json); diff --git a/Code/src/js/level2/Type.js b/Code/src/js/level2/Type.js index 1f65780..102f485 100644 --- a/Code/src/js/level2/Type.js +++ b/Code/src/js/level2/Type.js @@ -12,31 +12,31 @@ class Type extends ManageLang { this.add.text(WIDTH_WINDOW / 2, HEIGHT_WINDOW / 4, "WARIA", style).setOrigin(0.5, 1); let btnDuel = this.add.sprite((WIDTH_WINDOW / 8) * 3, (HEIGHT_WINDOW / 4) * 2, 'duel').setInteractive(); - this.createbutton(btnDuel); + this.createbutton(btnDuel, 'level1'); let btnLast = this.add.sprite((WIDTH_WINDOW / 8) * 5, (HEIGHT_WINDOW / 4) * 2, 'last').setInteractive(); - this.createbutton(btnLast); + this.createbutton(btnLast, 'level2'); let btnTeam = this.add.sprite((WIDTH_WINDOW / 8) * 2, (HEIGHT_WINDOW / 4) * 3, 'team').setInteractive(); - this.createbutton(btnTeam); + this.createbutton(btnTeam, 'level3'); let btnFlag = this.add.sprite((WIDTH_WINDOW / 8) * 4, (HEIGHT_WINDOW / 4) * 3, 'flag').setInteractive(); - this.createbutton(btnFlag); + this.createbutton(btnFlag, 'level4'); let btnMap = this.add.sprite((WIDTH_WINDOW / 8) * 6, (HEIGHT_WINDOW / 4) * 3, 'map').setInteractive(); - this.createbutton(btnMap); + this.createbutton(btnMap, 'level5'); } - createbutton(btn) { + createbutton(btn, level) { btn.displayHeight = HEIGHT_WINDOW / 4; btn.scaleX = btn.scaleY; btn.on('pointerout', () => btn.setFrame(0)); btn.on('pointerover', () => btn.setFrame(1)); - btn.on('pointerdown', () => this.clickPlay(btn)); + btn.on('pointerdown', () => this.clickPlay(level)); } - clickPlay(btn) { - newGame(this.father); + clickPlay(level) { + newGame(this.father, level); this.scene.start('Game'); } } \ No newline at end of file diff --git a/Code/src/js/level2/Variable.js b/Code/src/js/level2/Variable.js index 54a2c1a..8c44f85 100644 --- a/Code/src/js/level2/Variable.js +++ b/Code/src/js/level2/Variable.js @@ -18,6 +18,11 @@ const HEIGHT_WINDOW = $(document).height() - 20; const WIDTH_MAP = WIDTH_WINDOW < HEIGHT_WINDOW ? WIDTH_WINDOW * 0.8 : HEIGHT_WINDOW * 0.8; const OFFX_MAP = WIDTH_WINDOW / 20; const OFFY_MAP = (HEIGHT_WINDOW - WIDTH_MAP) / 2; +const CENTERX_TREE = WIDTH_WINDOW / 4 * 3; +const OFFX_TREE = WIDTH_WINDOW / 10; +const OFFY_TREE = HEIGHT_WINDOW / 6 + +const HEIGHT_NODE = HEIGHT_WINDOW / 6; const LIFE = 100; const SHIELD = 100; diff --git a/Code/src/json/level1.json b/Code/src/json/level1.json new file mode 100644 index 0000000..02c96ac --- /dev/null +++ b/Code/src/json/level1.json @@ -0,0 +1,99 @@ +{ + "tree": { + "type": "waria", + "lRect": [ + { + "type": "move", + "option": [ + true, + false + ] + }, + + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "condition", + "option": [ + true, + true, + false, + 0.3333333333333333, + 0 + ], + "lRect": [ + { + "type": "move", + "option": [ + false, + true + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + } + ] + }, + { + "type": "move", + "option": [ + true, + true + ] + } + ] + }, + "initStat": { + "lBar": [ + { + "value": 2, + "valueMax": 5, + "color": 16711680, + "colorMin": 16711680 + }, + { + "value": 3, + "valueMax": 5, + "color": 8323327, + "colorMin": 8323327 + }, + { + "value": 3, + "valueMax": 5, + "color": 255, + "colorMin": 255 + }, + { + "value": 2, + "valueMax": 5, + "color": 32768, + "colorMin": 32768 + } + ], + "lText": [ + [ + "DAMAGE", + "DEGATS" + ], + [ + "R.S", + "RECHARGEMENT" + ], + [ + "SPEED", + "VITESSE" + ], + [ + "RANGE", + "PORTEE" + ] + ] + } +} \ No newline at end of file diff --git a/Code/src/json/level2.json b/Code/src/json/level2.json new file mode 100644 index 0000000..b1396fa --- /dev/null +++ b/Code/src/json/level2.json @@ -0,0 +1,98 @@ +{ + "tree": { + "type": "waria", + "lRect": [ + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "move", + "option": [ + true, + false + ] + }, + { + "type": "condition", + "option": [ + true, + true, + false, + 0.3333333333333333, + 0 + ], + "lRect": [ + { + "type": "move", + "option": [ + false, + true + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + } + ] + }, + { + "type": "move", + "option": [ + true, + true + ] + } + ] + }, + "initStat": { + "lBar": [ + { + "value": 3, + "valueMax": 5, + "color": 16711680, + "colorMin": 16711680 + }, + { + "value": 2, + "valueMax": 5, + "color": 8323327, + "colorMin": 8323327 + }, + { + "value": 0, + "valueMax": 5, + "color": 255, + "colorMin": 255 + }, + { + "value": 5, + "valueMax": 5, + "color": 32768, + "colorMin": 32768 + } + ], + "lText": [ + [ + "DAMAGE", + "DEGATS" + ], + [ + "R.S", + "RECHARGEMENT" + ], + [ + "SPEED", + "VITESSE" + ], + [ + "RANGE", + "PORTEE" + ] + ] + } +} \ No newline at end of file diff --git a/Code/src/json/level3.json b/Code/src/json/level3.json new file mode 100644 index 0000000..d03af5f --- /dev/null +++ b/Code/src/json/level3.json @@ -0,0 +1,98 @@ +{ + "tree": { + "type": "waria", + "lRect": [ + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "condition", + "option": [ + false, + false, + true, + 0.3333333333333333, + 1 + ], + "lRect": [ + { + "type": "move", + "option": [ + false, + true + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + } + ] + }, + { + "type": "move", + "option": [ + true, + false + ] + }, + { + "type": "move", + "option": [ + true, + true + ] + } + ] + }, + "initStat": { + "lBar": [ + { + "value": 5, + "valueMax": 5, + "color": 16711680, + "colorMin": 16711680 + }, + { + "value": 0, + "valueMax": 5, + "color": 8323327, + "colorMin": 8323327 + }, + { + "value": 0, + "valueMax": 5, + "color": 255, + "colorMin": 255 + }, + { + "value": 5, + "valueMax": 5, + "color": 32768, + "colorMin": 32768 + } + ], + "lText": [ + [ + "DAMAGE", + "DEGATS" + ], + [ + "R.S", + "RECHARGEMENT" + ], + [ + "SPEED", + "VITESSE" + ], + [ + "RANGE", + "PORTEE" + ] + ] + } +} \ No newline at end of file diff --git a/Code/src/json/level4.json b/Code/src/json/level4.json new file mode 100644 index 0000000..708f86f --- /dev/null +++ b/Code/src/json/level4.json @@ -0,0 +1,98 @@ +{ + "tree": { + "type": "waria", + "lRect": [ + { + "type": "condition", + "option": [ + false, + false, + true, + 0.3333333333333333, + 1 + ], + "lRect": [ + { + "type": "move", + "option": [ + false, + true + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + } + ] + }, + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "move", + "option": [ + true, + false + ] + }, + { + "type": "move", + "option": [ + true, + true + ] + } + ] + }, + "initStat": { + "lBar": [ + { + "value": 5, + "valueMax": 5, + "color": 16711680, + "colorMin": 16711680 + }, + { + "value": 5, + "valueMax": 5, + "color": 8323327, + "colorMin": 8323327 + }, + { + "value": 0, + "valueMax": 5, + "color": 255, + "colorMin": 255 + }, + { + "value": 0, + "valueMax": 5, + "color": 32768, + "colorMin": 32768 + } + ], + "lText": [ + [ + "DAMAGE", + "DEGATS" + ], + [ + "R.S", + "RECHARGEMENT" + ], + [ + "SPEED", + "VITESSE" + ], + [ + "RANGE", + "PORTEE" + ] + ] + } +} \ No newline at end of file diff --git a/Code/src/json/level5.json b/Code/src/json/level5.json new file mode 100644 index 0000000..e5f93d0 --- /dev/null +++ b/Code/src/json/level5.json @@ -0,0 +1,79 @@ +{ + "tree": { + "type": "waria", + "lRect": [ + { + "type": "attack", + "option": [ + 0.3333333333333333 + ] + }, + { + "type": "attack", + "option": [ + 1 + ] + }, + { + "type": "move", + "option": [ + true, + false + ] + }, + { + "type": "move", + "option": [ + true, + true + ] + } + ] + }, + "initStat": { + "lBar": [ + { + "value": 0, + "valueMax": 5, + "color": 16711680, + "colorMin": 16711680 + }, + { + "value": 0, + "valueMax": 5, + "color": 8323327, + "colorMin": 8323327 + }, + { + "value": 5, + "valueMax": 5, + "color": 255, + "colorMin": 255 + }, + { + "value": 5, + "valueMax": 5, + "color": 32768, + "colorMin": 32768 + } + ], + "lText": [ + [ + "DAMAGE", + "DEGATS" + ], + [ + "R.S", + "RECHARGEMENT" + ], + [ + "SPEED", + "VITESSE" + ], + [ + "RANGE", + "PORTEE" + ] + ] + } +} \ No newline at end of file