diff --git a/Code/assets/en/buttons/back.png b/Code/assets/buttons/back.png similarity index 100% rename from Code/assets/en/buttons/back.png rename to Code/assets/buttons/back.png diff --git a/Code/assets/en/buttons/bin.png b/Code/assets/buttons/bin.png similarity index 100% rename from Code/assets/en/buttons/bin.png rename to Code/assets/buttons/bin.png diff --git a/Code/assets/buttons/bonusBtn.png b/Code/assets/buttons/bonusBtn.png new file mode 100644 index 0000000..dda348b Binary files /dev/null and b/Code/assets/buttons/bonusBtn.png differ diff --git a/Code/assets/en/buttons/mute.png b/Code/assets/buttons/mute.png similarity index 100% rename from Code/assets/en/buttons/mute.png rename to Code/assets/buttons/mute.png diff --git a/Code/assets/en/buttons/pencil.png b/Code/assets/buttons/pencil.png similarity index 100% rename from Code/assets/en/buttons/pencil.png rename to Code/assets/buttons/pencil.png diff --git a/Code/assets/en/buttons/play.png b/Code/assets/buttons/play.png similarity index 100% rename from Code/assets/en/buttons/play.png rename to Code/assets/buttons/play.png diff --git a/Code/assets/en/buttons/plus.png b/Code/assets/buttons/plus.png similarity index 100% rename from Code/assets/en/buttons/plus.png rename to Code/assets/buttons/plus.png diff --git a/Code/assets/en/buttons/save.png b/Code/assets/buttons/save.png similarity index 100% rename from Code/assets/en/buttons/save.png rename to Code/assets/buttons/save.png diff --git a/Code/assets/en/buttons/speed.png b/Code/assets/buttons/speed.png similarity index 100% rename from Code/assets/en/buttons/speed.png rename to Code/assets/buttons/speed.png diff --git a/Code/assets/fr/buttons/back.png b/Code/assets/fr/buttons/back.png deleted file mode 100644 index 4886094..0000000 Binary files a/Code/assets/fr/buttons/back.png and /dev/null differ diff --git a/Code/assets/fr/buttons/bin.png b/Code/assets/fr/buttons/bin.png deleted file mode 100644 index 04fbb4f..0000000 Binary files a/Code/assets/fr/buttons/bin.png and /dev/null differ diff --git a/Code/assets/fr/buttons/mute.png b/Code/assets/fr/buttons/mute.png deleted file mode 100644 index 6bc1960..0000000 Binary files a/Code/assets/fr/buttons/mute.png and /dev/null differ diff --git a/Code/assets/fr/buttons/pencil.png b/Code/assets/fr/buttons/pencil.png deleted file mode 100644 index dd071f0..0000000 Binary files a/Code/assets/fr/buttons/pencil.png and /dev/null differ diff --git a/Code/assets/fr/buttons/play.png b/Code/assets/fr/buttons/play.png deleted file mode 100644 index 7a3a706..0000000 Binary files a/Code/assets/fr/buttons/play.png and /dev/null differ diff --git a/Code/assets/fr/buttons/plus.png b/Code/assets/fr/buttons/plus.png deleted file mode 100644 index c8d9500..0000000 Binary files a/Code/assets/fr/buttons/plus.png and /dev/null differ diff --git a/Code/assets/fr/buttons/save.png b/Code/assets/fr/buttons/save.png deleted file mode 100644 index 6b3e7d8..0000000 Binary files a/Code/assets/fr/buttons/save.png and /dev/null differ diff --git a/Code/assets/fr/buttons/speed.png b/Code/assets/fr/buttons/speed.png deleted file mode 100644 index 90e43c6..0000000 Binary files a/Code/assets/fr/buttons/speed.png and /dev/null differ diff --git a/Code/assets/en/buttons/add.png b/Code/assets/lang/en/buttons/add.png similarity index 100% rename from Code/assets/en/buttons/add.png rename to Code/assets/lang/en/buttons/add.png diff --git a/Code/assets/en/buttons/bonus.png b/Code/assets/lang/en/buttons/bonus.png similarity index 100% rename from Code/assets/en/buttons/bonus.png rename to Code/assets/lang/en/buttons/bonus.png diff --git a/Code/assets/lang/en/buttons/bonusAttack.png b/Code/assets/lang/en/buttons/bonusAttack.png new file mode 100644 index 0000000..ba46723 Binary files /dev/null and b/Code/assets/lang/en/buttons/bonusAttack.png differ diff --git a/Code/assets/lang/en/buttons/bonusShield.png b/Code/assets/lang/en/buttons/bonusShield.png new file mode 100644 index 0000000..3034fd4 Binary files /dev/null and b/Code/assets/lang/en/buttons/bonusShield.png differ diff --git a/Code/assets/lang/en/buttons/bonusSpeed.png b/Code/assets/lang/en/buttons/bonusSpeed.png new file mode 100644 index 0000000..ece6b37 Binary files /dev/null and b/Code/assets/lang/en/buttons/bonusSpeed.png differ diff --git a/Code/assets/en/buttons/cancel.png b/Code/assets/lang/en/buttons/cancel.png similarity index 100% rename from Code/assets/en/buttons/cancel.png rename to Code/assets/lang/en/buttons/cancel.png diff --git a/Code/assets/en/buttons/duel.png b/Code/assets/lang/en/buttons/duel.png similarity index 100% rename from Code/assets/en/buttons/duel.png rename to Code/assets/lang/en/buttons/duel.png diff --git a/Code/assets/en/buttons/enemyBot.png b/Code/assets/lang/en/buttons/enemyBot.png similarity index 100% rename from Code/assets/en/buttons/enemyBot.png rename to Code/assets/lang/en/buttons/enemyBot.png diff --git a/Code/assets/en/buttons/flag.png b/Code/assets/lang/en/buttons/flag.png similarity index 100% rename from Code/assets/en/buttons/flag.png rename to Code/assets/lang/en/buttons/flag.png diff --git a/Code/assets/en/buttons/fleeFrom.png b/Code/assets/lang/en/buttons/fleeFrom.png similarity index 100% rename from Code/assets/en/buttons/fleeFrom.png rename to Code/assets/lang/en/buttons/fleeFrom.png diff --git a/Code/assets/en/buttons/home.png b/Code/assets/lang/en/buttons/home.png similarity index 100% rename from Code/assets/en/buttons/home.png rename to Code/assets/lang/en/buttons/home.png diff --git a/Code/assets/en/buttons/last.png b/Code/assets/lang/en/buttons/last.png similarity index 100% rename from Code/assets/en/buttons/last.png rename to Code/assets/lang/en/buttons/last.png diff --git a/Code/assets/en/buttons/longRange.png b/Code/assets/lang/en/buttons/longRange.png similarity index 100% rename from Code/assets/en/buttons/longRange.png rename to Code/assets/lang/en/buttons/longRange.png diff --git a/Code/assets/en/buttons/map.png b/Code/assets/lang/en/buttons/map.png similarity index 100% rename from Code/assets/en/buttons/map.png rename to Code/assets/lang/en/buttons/map.png diff --git a/Code/assets/en/buttons/mediumRange.png b/Code/assets/lang/en/buttons/mediumRange.png similarity index 100% rename from Code/assets/en/buttons/mediumRange.png rename to Code/assets/lang/en/buttons/mediumRange.png diff --git a/Code/assets/en/buttons/modify.png b/Code/assets/lang/en/buttons/modify.png similarity index 100% rename from Code/assets/en/buttons/modify.png rename to Code/assets/lang/en/buttons/modify.png diff --git a/Code/assets/en/buttons/moveToward.png b/Code/assets/lang/en/buttons/moveToward.png similarity index 100% rename from Code/assets/en/buttons/moveToward.png rename to Code/assets/lang/en/buttons/moveToward.png diff --git a/Code/assets/en/buttons/myself.png b/Code/assets/lang/en/buttons/myself.png similarity index 100% rename from Code/assets/en/buttons/myself.png rename to Code/assets/lang/en/buttons/myself.png diff --git a/Code/assets/en/buttons/next.png b/Code/assets/lang/en/buttons/next.png similarity index 100% rename from Code/assets/en/buttons/next.png rename to Code/assets/lang/en/buttons/next.png diff --git a/Code/assets/en/buttons/playLetter.png b/Code/assets/lang/en/buttons/playLetter.png similarity index 100% rename from Code/assets/en/buttons/playLetter.png rename to Code/assets/lang/en/buttons/playLetter.png diff --git a/Code/assets/en/buttons/retry.png b/Code/assets/lang/en/buttons/retry.png similarity index 100% rename from Code/assets/en/buttons/retry.png rename to Code/assets/lang/en/buttons/retry.png diff --git a/Code/assets/en/buttons/shield0.png b/Code/assets/lang/en/buttons/shield0.png similarity index 100% rename from Code/assets/en/buttons/shield0.png rename to Code/assets/lang/en/buttons/shield0.png diff --git a/Code/assets/en/buttons/shield100.png b/Code/assets/lang/en/buttons/shield100.png similarity index 100% rename from Code/assets/en/buttons/shield100.png rename to Code/assets/lang/en/buttons/shield100.png diff --git a/Code/assets/en/buttons/shield33.png b/Code/assets/lang/en/buttons/shield33.png similarity index 100% rename from Code/assets/en/buttons/shield33.png rename to Code/assets/lang/en/buttons/shield33.png diff --git a/Code/assets/en/buttons/shield66.png b/Code/assets/lang/en/buttons/shield66.png similarity index 100% rename from Code/assets/en/buttons/shield66.png rename to Code/assets/lang/en/buttons/shield66.png diff --git a/Code/assets/en/buttons/shortRange.png b/Code/assets/lang/en/buttons/shortRange.png similarity index 100% rename from Code/assets/en/buttons/shortRange.png rename to Code/assets/lang/en/buttons/shortRange.png diff --git a/Code/assets/en/buttons/team.png b/Code/assets/lang/en/buttons/team.png similarity index 100% rename from Code/assets/en/buttons/team.png rename to Code/assets/lang/en/buttons/team.png diff --git a/Code/assets/en/robots/enemy.png b/Code/assets/lang/en/robots/enemy.png similarity index 100% rename from Code/assets/en/robots/enemy.png rename to Code/assets/lang/en/robots/enemy.png diff --git a/Code/assets/fr/buttons/add.png b/Code/assets/lang/fr/buttons/add.png similarity index 100% rename from Code/assets/fr/buttons/add.png rename to Code/assets/lang/fr/buttons/add.png diff --git a/Code/assets/fr/buttons/bonus.png b/Code/assets/lang/fr/buttons/bonus.png similarity index 100% rename from Code/assets/fr/buttons/bonus.png rename to Code/assets/lang/fr/buttons/bonus.png diff --git a/Code/assets/lang/fr/buttons/bonusAttack.png b/Code/assets/lang/fr/buttons/bonusAttack.png new file mode 100644 index 0000000..536f6a8 Binary files /dev/null and b/Code/assets/lang/fr/buttons/bonusAttack.png differ diff --git a/Code/assets/lang/fr/buttons/bonusShield.png b/Code/assets/lang/fr/buttons/bonusShield.png new file mode 100644 index 0000000..7204f6a Binary files /dev/null and b/Code/assets/lang/fr/buttons/bonusShield.png differ diff --git a/Code/assets/lang/fr/buttons/bonusSpeed.png b/Code/assets/lang/fr/buttons/bonusSpeed.png new file mode 100644 index 0000000..89ff8b5 Binary files /dev/null and b/Code/assets/lang/fr/buttons/bonusSpeed.png differ diff --git a/Code/assets/fr/buttons/cancel.png b/Code/assets/lang/fr/buttons/cancel.png similarity index 100% rename from Code/assets/fr/buttons/cancel.png rename to Code/assets/lang/fr/buttons/cancel.png diff --git a/Code/assets/fr/buttons/duel.png b/Code/assets/lang/fr/buttons/duel.png similarity index 100% rename from Code/assets/fr/buttons/duel.png rename to Code/assets/lang/fr/buttons/duel.png diff --git a/Code/assets/fr/buttons/enemyBot.png b/Code/assets/lang/fr/buttons/enemyBot.png similarity index 100% rename from Code/assets/fr/buttons/enemyBot.png rename to Code/assets/lang/fr/buttons/enemyBot.png diff --git a/Code/assets/fr/buttons/flag.png b/Code/assets/lang/fr/buttons/flag.png similarity index 100% rename from Code/assets/fr/buttons/flag.png rename to Code/assets/lang/fr/buttons/flag.png diff --git a/Code/assets/fr/buttons/fleeFrom.png b/Code/assets/lang/fr/buttons/fleeFrom.png similarity index 100% rename from Code/assets/fr/buttons/fleeFrom.png rename to Code/assets/lang/fr/buttons/fleeFrom.png diff --git a/Code/assets/fr/buttons/home.png b/Code/assets/lang/fr/buttons/home.png similarity index 100% rename from Code/assets/fr/buttons/home.png rename to Code/assets/lang/fr/buttons/home.png diff --git a/Code/assets/fr/buttons/last.png b/Code/assets/lang/fr/buttons/last.png similarity index 100% rename from Code/assets/fr/buttons/last.png rename to Code/assets/lang/fr/buttons/last.png diff --git a/Code/assets/fr/buttons/longRange.png b/Code/assets/lang/fr/buttons/longRange.png similarity index 100% rename from Code/assets/fr/buttons/longRange.png rename to Code/assets/lang/fr/buttons/longRange.png diff --git a/Code/assets/fr/buttons/map.png b/Code/assets/lang/fr/buttons/map.png similarity index 100% rename from Code/assets/fr/buttons/map.png rename to Code/assets/lang/fr/buttons/map.png diff --git a/Code/assets/fr/buttons/mediumRange.png b/Code/assets/lang/fr/buttons/mediumRange.png similarity index 100% rename from Code/assets/fr/buttons/mediumRange.png rename to Code/assets/lang/fr/buttons/mediumRange.png diff --git a/Code/assets/fr/buttons/modify.png b/Code/assets/lang/fr/buttons/modify.png similarity index 100% rename from Code/assets/fr/buttons/modify.png rename to Code/assets/lang/fr/buttons/modify.png diff --git a/Code/assets/fr/buttons/moveToward.png b/Code/assets/lang/fr/buttons/moveToward.png similarity index 100% rename from Code/assets/fr/buttons/moveToward.png rename to Code/assets/lang/fr/buttons/moveToward.png diff --git a/Code/assets/fr/buttons/myself.png b/Code/assets/lang/fr/buttons/myself.png similarity index 100% rename from Code/assets/fr/buttons/myself.png rename to Code/assets/lang/fr/buttons/myself.png diff --git a/Code/assets/fr/buttons/next.png b/Code/assets/lang/fr/buttons/next.png similarity index 100% rename from Code/assets/fr/buttons/next.png rename to Code/assets/lang/fr/buttons/next.png diff --git a/Code/assets/fr/buttons/playLetter.png b/Code/assets/lang/fr/buttons/playLetter.png similarity index 100% rename from Code/assets/fr/buttons/playLetter.png rename to Code/assets/lang/fr/buttons/playLetter.png diff --git a/Code/assets/fr/buttons/retry.png b/Code/assets/lang/fr/buttons/retry.png similarity index 100% rename from Code/assets/fr/buttons/retry.png rename to Code/assets/lang/fr/buttons/retry.png diff --git a/Code/assets/fr/buttons/shield0.png b/Code/assets/lang/fr/buttons/shield0.png similarity index 100% rename from Code/assets/fr/buttons/shield0.png rename to Code/assets/lang/fr/buttons/shield0.png diff --git a/Code/assets/fr/buttons/shield100.png b/Code/assets/lang/fr/buttons/shield100.png similarity index 100% rename from Code/assets/fr/buttons/shield100.png rename to Code/assets/lang/fr/buttons/shield100.png diff --git a/Code/assets/fr/buttons/shield33.png b/Code/assets/lang/fr/buttons/shield33.png similarity index 100% rename from Code/assets/fr/buttons/shield33.png rename to Code/assets/lang/fr/buttons/shield33.png diff --git a/Code/assets/fr/buttons/shield66.png b/Code/assets/lang/fr/buttons/shield66.png similarity index 100% rename from Code/assets/fr/buttons/shield66.png rename to Code/assets/lang/fr/buttons/shield66.png diff --git a/Code/assets/fr/buttons/shortRange.png b/Code/assets/lang/fr/buttons/shortRange.png similarity index 100% rename from Code/assets/fr/buttons/shortRange.png rename to Code/assets/lang/fr/buttons/shortRange.png diff --git a/Code/assets/fr/buttons/team.png b/Code/assets/lang/fr/buttons/team.png similarity index 100% rename from Code/assets/fr/buttons/team.png rename to Code/assets/lang/fr/buttons/team.png diff --git a/Code/assets/fr/robots/enemy.png b/Code/assets/lang/fr/robots/enemy.png similarity index 100% rename from Code/assets/fr/robots/enemy.png rename to Code/assets/lang/fr/robots/enemy.png diff --git a/Code/assets/nodes/moveNode.png b/Code/assets/nodes/moveNode.png index 9a62eb8..223c440 100644 Binary files a/Code/assets/nodes/moveNode.png and b/Code/assets/nodes/moveNode.png differ diff --git a/Code/public/js/level2.min.js b/Code/public/js/level2.min.js index c903e38..8062f5e 100644 --- a/Code/public/js/level2.min.js +++ b/Code/public/js/level2.min.js @@ -1 +1 @@ -class AddAttack extends AddNode{constructor(e,t,s,...i){super(e,t,s,i)}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 (OPTIONAL)","FILTRES CIBLES (FACULTATIF)")),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(){super.verifyCategory()&&(this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"attack",[this.lCategory[1].getValue()])),super.cancel())}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){super(e,t,s,i)}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 (OPTIONAL)","FILTRES CIBLES (FACULTATIF)"));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(){super.verifyCategory()&&("range"===this.lCategory[1].getValue()[1]?this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"condition",[this.lCategory[0].getValue(),!1,!0,0,this.lCategory[1].getValue()[0]])):this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"condition",[this.lCategory[0].getValue(),!0,!1,this.lCategory[1].getValue()[0],0])),super.cancel())}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){super(e,t,s,i)}create(){console.log("MOVE"),super.create(),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : MOVE","AJOUTER ACTION : DEPLACEMENT")),super.addTitle(WIDTH_WINDOW/4,HEIGHT_WINDOW/(16/3),selectWord("FLEE OR MOVE ?","RECULER OU AVANCER ?"));let e=super.newCategory("direction",!0,!0);super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,"fleeFrom",e,!1),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"moveToward",e,!0),super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?"));let t=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/6*4,HEIGHT_WINDOW/3.2,"enemyBot",t,!0),super.addButton(WIDTH_WINDOW/6*5,HEIGHT_WINDOW/3.2,"bonus",t,!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()])),super.cancel())}modifyNode(){super.verifyCategory()&&(this.selected.node.toward=this.lCategory[0].getValue(),this.selected.node.enemyBot=this.lCategory[1].getValue(),this.selected.rect.setFrame(this.selected.node.getFrame()),super.cancel())}}class Attack{constructor(e=1){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}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,n,o=new CategoryBar,r=1,d){super(e,t,s,i,h,a,void 0!==d?d:o.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=o,this.setValue(0),this.categoryBar.setValueOf(this,r)}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){super(e,t,s)}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),this.time=i,this.color=h}useOn(e,t){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),this.time=i}useOn(e,t){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();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;ts.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(){this.width=WIDTH_WINDOW/3-20,this.height=HEIGHT_WINDOW/4;let e=0;this.createList(lShieldBonus,e,!0),e=WIDTH_WINDOW/3,this.createList(lSpeedBonus,e,!1),e=WIDTH_WINDOW/1.5,this.createList(lAttackBonus,e,!1)}createList(e,t,s=!0){let i=50;this.createCategoryBonus(t,i,this.width,this.height*e.length),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";s&&(t="+"),a="BONUS : "+t+e.value}this.createBonusDescription(t,i,this.width,this.height,e.texture,e.name,a+h),i+=this.height})}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,n){e+=20,t+=20,s-=20,i-=20,this.add.rectangle(e,t,s,i,16777215).setOrigin(0,0);let o=this.add.image(e+5,t+5,h).setOrigin(0,0);o.displayHeight=100,o.scaleX=o.scaleY;let r={font:o.displayHeight/2-a.length+"px stencil",fill:"#000000"};this.add.text(e+o.displayWidth+10,t+5+o.displayHeight/2,a.toString(),r).setOrigin(0,.5),r.font=i/6+"px stencil",this.add.text(e+5,t+o.displayHeight+(i-o.displayHeight)/2,n.toString(),r).setOrigin(0,.5)}return(){this.father.scene.start("Game"),this.father.scene.remove("Description")}}function selectWord(e,t){switch(LANG){case"fr":return t;default:return e}}function newGame(e,t,s=new Game(e,t)){-1!==e.scene.getIndex("Game")&&e.scene.remove("Game"),e.scene.add("Game",s)}function chooseTarget(e,t){let s=2*WIDTH_MAP,i=[];return t.forEach(function(t){if(t!==e){let h=Math.hypot(t.x-e.x,t.y-e.y);s>=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}class Game extends ManageLang{constructor(e,t="level1"){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,this.level=t,this.listPositionRobotInit=[]}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"),this.createGamingBoard()}create(){super.create();let e=this.cache.json.get("level");if(void 0!==e){if(void 0!==this.tree&&void 0!==this.initStat){let t=this.tree.getJson(!0);e.tree=JSON.parse(t);let s=this.initStat.getJson(!0);e.initStat=JSON.parse(s)}this.loadSave(e.tree,e.initStat,e.robots,e.lBonus,e.robotRandomPosition),this.gm.setEnemyRobotVisible(e.enemyVisible),this.gm.setBonusVisible(e.bonusVisible),this.doLine=!1,this.createButton(),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")}else console.log("ERROR : LEVEL UNDEFINED")}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.scene.pause("GamingBoard")}loadSave(e,t,s,i,h){this.loadBonus(i),this.loadRobot(s,h),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;s{let i=[];e.lNode.forEach(e=>i.push(this.loadNode(e))),t&&(void 0===this.listPositionRobotInit[s]?(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[s]=new Position(e.x,e.y)):(e.x=this.listPositionRobotInit[s].x,e.y=this.listPositionRobotInit[s].y)),this.gm.addRobot(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,i)),s+=1})}loadNode(e){let t;switch(e.name){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):new Looser(this.father,this),this.father.scene.add("Finish",e),this.scene.pause("Game"),this.scene.launch("Finish")}clickNode(){this.tryClick(),this.selected=this.tree.getSelected(),void 0!==this.selected&&(this.selected!==this.tree&&(this.pencil.setVisible(!0),this.bin.setVisible(!0)),this.selected.canAddNode&&this.plus.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.doLine=!1}pauseScene(){this.linePlay=0,this.changeFrame(this.play,0),this.gm.pause()}resume(){this.linePlay=1;this.tree.sort((e,t)=>e.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=WIDTH_BUTTON,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 o=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(o,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,o.displayHeight=o.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)),o.on("pointerout",()=>this.changeFrame(o,0,this.lineMute)),o.on("pointerover",()=>this.changeFrame(o,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()),o.on("pointerdown",()=>this.clickMute(o)),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.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.add("Description",new Description(this.father,this)),this.scene.start("Description")}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(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,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(){void 0!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,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.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),void 0!=this.selected&&(this.selected.deselect(),this.selected=void 0)}}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"),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){if(super.update(e,t),!this.end){this.listRobot.forEach(function(e){e.read()});for(let e=0;et.setVisible(e))}setEnemyRobotVisible(e=!0){let t=this.getMyRobot();this.listRobot.forEach(s=>{s!==t&&s.setVisible(e)})}setBonusVisible(e=!0){listBonus.forEach(t=>t.setVisible(e))}finish(){this.pause(),this.father.finish()}winner(){return void 0!==this.getMyRobot()}pause(){this.scene.pause("GamingBoard"),this.sound.pauseAll()}resume(){this.scene.resume("GamingBoard"),this.sound.resumeAll(),this.setRobotVisible(!0),this.setBonusVisible(!0)}addRobot(e){this.listRobot.push(e)}addBonus(e){listBonus.push(e)}modifyNodes(e){let t=this.getMyRobot();return void 0!==t&&(t.cleanNodes(),e.forEach(e=>t.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()}),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.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","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.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),e.target=null),!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 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]),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",n=SPEED_BEGIN,o=SPEED_RELOAD_BEGIN,r=RANGE_BEGIN,d=DAMAGE_BEGIN,l=[]){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=l;let c=new Condition(!0,!0,!1,.5,0);c.addNode(new Move(!1)),this.addNode(c),this.addNode(new Attack),this.addNode(new Move(!0)),this.setSpeed(n),this.setSpeedReload(o),this.setRange(r),this.setDamage(d),this.setX(this.x),this.setY(this.y)}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(){void 0===this.circleRange?this.drawRange():this.eraseRange()}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()}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,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*this.attackBonus*DAMAGE*t)&&this.setTarget(null),this.missile.setVisible(!1),1!==this.attackBonus&&this.setAttackBonus(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&&(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;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,lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[];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_WINDOWthis.clickBonus(s,i,a,n,o)),this.clickBonus(s,i,a,n,o)}clickBonus(t,...e){t.isTinted?e.forEach(t=>t.setVisible(!0)):e.forEach(t=>t.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{constructor(t=1){t>1/3?t>2/3?(t=1,this.percentBonus=1):(t=2/3,this.percentBonus=1.5):(t=1/3,this.percentBonus=2),this.percentRange=t}do(t){return!(!t.haveTarget()||!t.isTargetInRange(this.percentRange))&&t.attackTarget(this.percentBonus)}getFrame(){return 3*this.percentRange-1}getOptionJson(){return this.percentRange}}class Bar extends HealthBar{constructor(t,e="",s,i,h,a,n,o=new CategoryBar,r=1,l){super(t,e,s,i,h,a,void 0!==l?l:o.valueMax,n,n,!1),this.name=e,this.scene=t,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=o,this.setValue(0),this.categoryBar.setValueOf(this,r)}doDrag(){let t=this.scene.input;t.x>=this.bar.x-10&&t.x<=this.bar.x+this.width+10&&t.y>=this.bar.y&&t.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(t){this.categoryBar.setValueOf(this,Math.round((t-this.bar.x)/this.width*this.valueMax))}draw(){super.draw();let t=this.value/this.valueMax*this.width-5;this.bar.fillStyle(9868950),this.bar.fillRect(t,0,10,this.height),void 0!==this.text&&this.text.setText(this.value+1)}}class BonusAttack extends Bonus{constructor(t,e,s){super(t,e,s,"attack")}useOn(t){t.setAttackBonus(this.value)}}class BonusHealth{constructor(t,e){this.value=t,this.color=e}decrease(t){this.value-=t;let e=0;return this.value<0&&(e=-this.value,this.value=0),e}}class BonusShield extends Bonus{constructor(t,e,s,i,h){super(t,e,s,"shield"),this.time=i,this.color=h}useOn(t,e){let s=new BonusHealth(this.value,this.color);t.shield.addBonus(s),e.time.addEvent({delay:this.time,callback:()=>t.shield.removeBonus(s)})}}class BonusSpeed extends Bonus{constructor(t="",e,s,i){super(t,e,s,"speed"),this.time=i}useOn(t,e){t.increaseSpeedBonus(this.value-1),e.time.addEvent({delay:this.time,callback:()=>t.decreaseSpeedBonus(this.value-1)})}}class BonusView extends Phaser.GameObjects.Image{constructor(t,e,s,i){super(t,e,s,i.texture),this.setOrigin(.5,.5),this.displayHeight=HEIGHT_BONUS,this.scaleX=this.scaleY,t.add.existing(this),this.bonus=i}useOn(t){this.bonus.useOn(t,this.scene),this.destroy()}}class Boot extends ManageLang{constructor(t){super("Boot",t)}create(){super.create();this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,.5);let t=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();t.on("pointerout",()=>t.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(t){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Button extends Phaser.GameObjects.Sprite{constructor(t,e,s,i,h,a,n,o=0,r=!0){super(t,e,s,a),this.name=a,this.setInteractive().setVisible(r),this.displayHeight=h,this.displayWidth=i,this.line=o,this.on("pointerout",()=>this.changeFrame(0)),this.on("pointerover",()=>this.changeFrame(1)),this.on("pointerdown",n),this.changeFrame(0),t.add.existing(this)}changeFrame(t=0){this.setFrame(t+2*this.line)}}class Category{constructor(t="undefined",e=!0,s=!0){this.name=t,this.single=e,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(t){this.event=t}add(t,e){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lValue=[],this.lBtn=[]),this.lValue.push(e),this.lBtn.push(t),t.tint=15718407,this.oneChange()}remove(t){let e=this.lBtn.indexOf(t);-1!==e&&(this.lBtn.splice(e,1),this.lValue.splice(e,1)),t.clearTint(),this.oneChange()}oneChange(){void 0!==this.event&&this.event()}}class CategoryBar{constructor(t=VALUE_MAX_BAR,e=1){this.startValue=e,this.valueMax=t,this.point=this.valueMax}addPoint(t){if(this.point+=t,this.point<0){let t=this.point;return this.point=0,t}return this.point>this.valueMax&&(this.point=this.valueMax),0}setValueOf(t,e){let s=e-t.value,i=t.value;this.point>=s?t.setValue(e):t.setValue(t.value+this.point),this.addPoint(i-t.value),this.draw()}addText(t,e,s,i,h){this.text=e;let a={font:h.toString()+"px stencil",fill:"#e2e2e2"};this.textScene=t.add.text(s,i,this.text,a).setOrigin(0,0),this.draw()}setTextPos(t,e){this.textScene.setX(t),this.textScene.setY(e)}setText(t){this.text=t,this.draw()}draw(){this.textScene.setText(this.text+this.point)}}class Condition{constructor(t,e=!1,s=!1,i,h){this.shieldFilter=e,this.rangeFilter=s,this.shield=i,this.range=h,this.myself=t,this.lNode=[]}addNode(t){this.lNode.push(t)}do(t){if(this.doCondition(t))for(let e=0;es.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(){this.width=WIDTH_WINDOW/3-20,this.height=HEIGHT_WINDOW/4;let t=0;this.createList(lShieldBonus,t,!0),t=WIDTH_WINDOW/3,this.createList(lSpeedBonus,t,!1),t=WIDTH_WINDOW/1.5,this.createList(lAttackBonus,t,!1)}createList(t,e,s=!0){let i=50;this.createCategoryBonus(e,i,this.width,this.height*t.length),t.forEach(t=>{let h="";void 0!==t.time&&(h=" - "+selectWord("TIME","TEMPS")+" : "+t.time/1e3);let a="";if(void 0!==t.value){let e="x";s&&(e="+"),a="BONUS : "+e+t.value}this.createBonusDescription(e,i,this.width,this.height,t.texture,t.name,a+h),i+=this.height})}createCategoryBonus(t,e,s,i){t+=10,e+=10,this.add.rectangle(t,e,s,i,8816262).setOrigin(0,0)}createBonusDescription(t,e,s,i,h,a,n){t+=20,e+=20,s-=20,i-=20,this.add.rectangle(t,e,s,i,16777215).setOrigin(0,0);let o=this.add.image(t+5,e+5,h).setOrigin(0,0);o.displayHeight=100,o.scaleX=o.scaleY;let r={font:o.displayHeight/2-a.length+"px stencil",fill:"#000000"};this.add.text(t+o.displayWidth+10,e+5+o.displayHeight/2,a.toString(),r).setOrigin(0,.5),r.font=i/6+"px stencil",this.add.text(t+5,e+o.displayHeight+(i-o.displayHeight)/2,n.toString(),r).setOrigin(0,.5)}return(){this.father.scene.start("Game"),this.father.scene.remove("Description")}}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 h=Math.hypot(e.x-t.x,e.y-t.y);s>=h&&(s>h&&(s=h,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}class Game extends ManageLang{constructor(t,e="level1"){super("Game",t),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,this.level=e,this.listPositionRobotInit=[]}preload(){let t,e={font:"100px stencil",fill:"#e2e2e2"};this.load.on("start",()=>{(t=this.add.text(.5*WIDTH_WINDOW,.5*HEIGHT_WINDOW,selectWord("LEVEL LOADING ...","CHARGEMENT DU NIVEAU ..."),e).setOrigin(.5,.5)).alpha=.5}),this.load.on("complete",()=>{t.destroy()}),this.cache.json.exists("level")&&this.cache.json.remove("level"),this.load.json("level","public/json/"+this.level+".json"),this.createGamingBoard()}create(){super.create();let t=this.cache.json.get("level");if(void 0!==t){if(void 0!==this.tree&&void 0!==this.initStat){let e=this.tree.getJson(!0);t.tree=JSON.parse(e);let s=this.initStat.getJson(!0);t.initStat=JSON.parse(s)}this.loadSave(t.tree,t.initStat,t.robots,t.lBonus,t.robotRandomPosition),this.gm.setEnemyRobotVisible(t.enemyVisible),this.gm.setBonusVisible(t.bonusVisible),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")}else console.log("ERROR : LEVEL UNDEFINED")}update(t,e){super.update(t,e),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.scene.pause("GamingBoard")}loadSave(t,e,s,i,h){this.loadBonus(i),this.loadRobot(s,h),this.initStat=this.loadInitSave(e),this.tree=this.loadTree(t)}loadTree(t,e=CENTERX_TREE,s=OFFY_TREE/2){let i;if(void 0!==t.x&&void 0!==t.y)i=new RectangleNode(t.x,t.y,this,t.type,t.option),void 0!==t.lRect&&t.lRect.length>0&&t.lRect.forEach(t=>i.addRect(this.loadTree(t)));else if(i=new RectangleNode(e,s,this,t.type,t.option),void 0!==t.lRect&&t.lRect.length>0){let h=t.lRect.length,a=e-OFFX_TREE/2*(h-1),n=s+OFFY_TREE;t.lRect.forEach(t=>{i.addRect(this.loadTree(t,a,n)),a+=OFFX_TREE})}return i}loadInitSave(t){let e=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10);for(let s=0;s{let i=[];t.lNode.forEach(t=>i.push(this.loadNode(t))),e&&(void 0===this.listPositionRobotInit[s]?(t.x=Math.random()*(1-t.width/2-t.width/2)+t.width/2,t.y=Math.random()*(1-t.height/2-t.height/2)+t.height/2,this.listPositionRobotInit[s]=new Position(t.x,t.y)):(t.x=this.listPositionRobotInit[s].x,t.y=this.listPositionRobotInit[s].y)),this.gm.addRobot(new Robot(WIDTH_MAP*t.height,WIDTH_MAP*t.width,WIDTH_MAP*t.x,WIDTH_MAP*t.y,this.gm,t.name,t.speed,t.speedReload,t.range,t.damage,i)),s+=1})}loadNode(t){let e;switch(t.name){case"condition":e=new Condition(t.option[0],t.option[1],t.option[2],t.option[3],t.option[4]);break;case"move":e=new Move(t.option[0],t.option[1]);break;case"attack":e=new Attack(t.option[0]);break;default:return}return void 0!==t.lNode&&t.lNode.forEach(t=>e.addNode(this.loadNode(t))),e}loadBonus(t=[]){t.forEach(t=>{this.gm.addBonus(this.loadB(t))})}loadB(t){let e;switch(t.style){case"speed":e=lSpeedBonus[t.number];break;case"attack":e=lAttackBonus[t.number];break;case"shield":e=lShieldBonus[t.number];break;default:return null}return new BonusView(this.gm,t.x*WIDTH_MAP,t.y*WIDTH_MAP,e)}finish(){let t;console.log("FINISH"),t=this.gm.winner()?new Winner(this.father,this):new Looser(this.father,this),this.father.scene.add("Finish",t),this.scene.pause("Game"),this.scene.launch("Finish")}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(t,e,s,i){e.setX(s),e.setY(i)}dragStart(){console.log("START DRAG"),this.doLine=!0,this.pauseScene()}dragEnd(){console.log("END DRAG"),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.tree.sort(),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()}createButtons(){let t=WIDTH_MAP+OFFX_MAP,e=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,e,s,s,"bonusBtn",()=>this.clickBonus()).setOrigin(1,0),new Button(this,WIDTH_WINDOW,e,s,s,"save",()=>this.clickSave()).setOrigin(1,0),this.playBtn=new Button(this,t,e,s,s,"play",()=>this.clickPlay()).setOrigin(1,0),h=1===SPEED_GAME?0:1,this.speedBtn=new Button(this,t-i,e,s,s,"speed",()=>this.clickSpeed(),h).setOrigin(1,0),this.pencilBtn=new Button(this,t-2*i,e,s,s,"pencil",()=>this.clickPencil(),0,!1).setOrigin(1,0),this.binBtn=new Button(this,t-3*i,e,s,s,"bin",()=>this.clickBin(),0,!1).setOrigin(1,0),this.plusBtn=new Button(this,t-4*i,e,s,s,"plus",()=>this.clickPlus(),0,!1).setOrigin(1,0),h=this.father.sound.mute?1:0,this.muteBtn=new Button(this,t-5*i,e,s,s,"mute",()=>this.clickMute(),h).setOrigin(1,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())}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(){this.tree.sort((t,e)=>t.getX()-e.getX());let t='{"tree":'+this.tree.getJson()+',"initStat":'+this.initStat.getJson()+"}";console.log(t)}clickPlay(){this.scene.isPaused("GamingBoard")?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.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,this.selected.node.myself,!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)}}class GamingBoard extends Phaser.Scene{constructor(t){super("GamingBoard"),this.listRobot=[],listBonus=[],this.father=t,this.end=!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 t=this.add.image(0,0,"background").setOrigin(0,0);t.alpha=.3,t.displayWidth=WIDTH_MAP,t.displayHeight=WIDTH_MAP,this.time.addEvent({delay:2e3,callback:this.upShield,callbackScope:this})}update(t,e){if(super.update(t,e),!this.end){this.listRobot.forEach(function(t){t.read()});for(let t=0;te.setVisible(t))}setEnemyRobotVisible(t=!0){let e=this.getMyRobot();this.listRobot.forEach(s=>{s!==e&&s.setVisible(t)})}setBonusVisible(t=!0){listBonus.forEach(e=>e.setVisible(t))}finish(){this.pause(),this.father.finish()}winner(){return void 0!==this.getMyRobot()}pause(){this.scene.pause("GamingBoard"),this.sound.pauseAll()}resume(){this.scene.resume("GamingBoard"),this.sound.resumeAll(),this.setRobotVisible(!0),this.setBonusVisible(!0)}addRobot(t){this.listRobot.push(t)}addBonus(t){listBonus.push(t)}modifyNodes(t){let e=this.getMyRobot();return void 0!==e&&(e.cleanNodes(),t.forEach(t=>e.addNode(t)),!0)}modifyValue(t,e,s,i){let h=this.getMyRobot();return void 0!==h&&(h.setSpeed(s),h.setRange(i),h.setSpeedReload(e),h.setDamage(t),!0)}getMyRobot(){for(let t=0;tt.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3/SPEED_GAME,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(t,e,s,i,h,a){this.scene=t,this.posX=e,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(t,e,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,t,e)),this.posY+=1.5*this.height,this.category.setTextPos(this.posX,this.posY)}getJson(){let t="{";return t+='"lBar":[',this.lBar.forEach(e=>t+=e.getJson()+","),t=endLineJson(t)+"],",t+='"lText":[',this.lText.forEach(e=>{t+="[",e.forEach(e=>{t+='"'+e+'",'}),t=endLineJson(t),t+="],"}),t=endLineJson(t),t+="]",t+="}"}}class LoadFile extends Phaser.Scene{constructor(t,e,s){super("LoadFile"),this.father=t,this.son=s,this.nameSon=e,this.father.scene.pause(this.nameSon),this.father.scene.stop(this.nameSon),this.father.scene.remove("LoadFile")}preload(){let t=this.add.graphics(),e=this.add.graphics(),s=WIDTH_WINDOW/2-160,i=HEIGHT_WINDOW/2-25;e.fillStyle(2236962,.8),e.fillRect(s,i,320,50),this.load.on("progress",function(e){t.clear(),t.fillStyle(16777215,1),t.fillRect(s+10,i+10,300*e,30)}),this.load.on("complete",()=>{t.destroy(),e.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.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.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 t=this.cache.json.get("listBonus");void 0!==t&&(t.lSpeedBonus.forEach(t=>lSpeedBonus.push(new BonusSpeed(selectWord(t.name.en,t.name.fr),t.texture,t.value,t.time))),t.lShieldBonus.forEach(t=>lShieldBonus.push(new BonusShield(selectWord(t.name.en,t.name.fr),t.texture,t.value,t.time,t.color))),t.lAttackBonus.forEach(t=>lAttackBonus.push(new BonusAttack(selectWord(t.name.en,t.name.fr),t.texture,t.value))))}loadSprite(t,e,s,i="",h=!1){this.textures.exists(t)&&h||(this.deleteLoad(t),h?this.load.spritesheet(t,"assets/"+i+t+".png",{frameWidth:e,frameHeight:s}):this.load.spritesheet(t,"assets/lang/"+LANG+"/"+i+t+".png",{frameWidth:e,frameHeight:s}))}loadImage(t,e="",s=!1){this.textures.exists(t)&&s||(this.deleteLoad(t),s?this.load.image(t,"assets/"+e+t+".png"):this.load.image(t,"assets/lang/"+LANG+"/"+e+t+".png"))}deleteLoad(t){this.textures.exists(t)&&this.textures.remove(t)}}class Looser extends Finish{constructor(t,e){super(t,e)}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(t,e,s,i){super(t,0,0,e),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move{constructor(t,e=!0,s){this.toward=t,this.enemyBot=e,this.typeBonus=s}do(t){if(this.enemyBot){if(t.verifyTarget())return!0===this.toward?this.moveToward(t):this.fleeFrom(t)}else{let e=chooseTarget(t,this.getListBonus());if(void 0!==e){let s;return(s=!0===this.toward?this.moveToward(t,e):this.fleeFrom(t,e))||(e.useOn(t),listBonus.splice(listBonus.indexOf(e),1),t.target=null),!0}}return!1}getListBonus(){if(void 0!==this.typeBonus){let t=[];return listBonus.forEach(e=>{e.bonus.type===this.typeBonus&&t.push(e)}),t}return listBonus}moveToward(t,e=t.target){return t.advanceTo(e)}fleeFrom(t,e=t.target){return t.fleeFrom(e)}getFrame(){let t;if(t=this.toward?0:5,!this.enemyBot)switch(this.typeBonus){case"speed":t+=2;break;case"attack":t+=3;break;case"shield":t+=4;break;default:t+=1}return t}getOptionJson(){let t=this.toward+","+this.enemyBot;return void 0!==this.typeBonus&&(t+=',"'+this.typeBonus+'"'),t}}class PlusNode extends Phaser.Scene{constructor(t,e,s){super("PlusNode"),this.father=t,this.gameR=e,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 t=WIDTH_WINDOW/2,e=HEIGHT_WINDOW/2,s=WIDTH_WINDOW/3,i=HEIGHT_WINDOW/10,h={font:(i/1.5).toString()+"px stencil",fill:"#e2e2e2"};this.add.text(t-s,e-i,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(t,e-i,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(t+s,e-i,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(t-s,e+i,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(t,e+i,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(t+s,e+i,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*i,a.scaleX=a.scaleY}click(t){switch(t.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 t=WIDTH_WINDOW/2,e=HEIGHT_WINDOW-100,s=this.add.image(t,e,"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(t,e){this.x=t,this.y=e}}class RectangleNode{constructor(t,e,s,i,h=[]){switch(i.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(s,t,e,"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,t,e,"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,t,e,"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,t,e,"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 t=0;tthis.addLine(t))}addLine(t){t.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNode(){if(void 0===this.node){let t=[];return this.lRect.forEach(function(e){t.push(e.getNode())}),t}return this.canAddNode&&(this.node.clearNodes(),this.lRect.forEach(t=>this.node.addNode(t.getNode()))),this.node}sort(t=((t,e)=>t.getX()-e.getX())){this.canAddNode&&(this.lRect.sort(t),this.lRect.forEach(function(e){e.canAddNode&&e.sort(t)}))}destroy(){this.line.destroy(),this.rect.destroy(),void 0!==this.lRect&&this.lRect.forEach(t=>t.destroy())}delete(t){let e=this.lRect.indexOf(t);if(-1!==e)return this.lRect.splice(e,1),t.destroy(),!0;for(let e=0;ee+=s.getJson(t)+","),e=endLineJson(e)+"]"),e=endLineJson(e),e+="}"}}class Robot{constructor(t,e,s,i,h,a="enemy",n=SPEED_BEGIN,o=SPEED_RELOAD_BEGIN,r=RANGE_BEGIN,l=DAMAGE_BEGIN,d=[]){this.speedBonus=1,this.attackBonus=1,this.name=a,this.height=t,this.width=e,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;let c=new Condition(!0,!0,!1,.5,0);c.addNode(new Move(!1)),this.addNode(c),this.addNode(new Attack),this.addNode(new Move(!0)),this.setSpeed(n),this.setSpeedReload(o),this.setRange(r),this.setDamage(l),this.setX(this.x),this.setY(this.y)}addScene(t){this.scene=t,"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(){void 0===this.circleRange?this.drawRange():this.eraseRange()}addShield(t){this.shield.increase(t)}setX(t){this.x=t,this.life.setX(this.x),this.shield.setX(this.x),this.circle.setX(this.x),this.drawCircleRange()}setY(t){this.y=t;let e=this.y-this.width,s=this.y-1.5*this.width;e<0?(s=this.y+this.width-this.shield.height,e=this.y+1.5*this.width-this.shield.height):s<0&&(s=e,e=this.y+this.width-this.shield.height),this.life.setY(e),this.shield.setY(s),this.circle.setY(this.y),this.drawCircleRange()}setTarget(t){this.target=t}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(t,e){}setDamage(t=this.damage){this.damage=t+DAMAGE_BASE}setRange(t=this.range){this.range=t+RANGE_BASE,this.drawCircleRange()}setSpeed(t=this.speed){this.speed=t+SPEED_BASE}setSpeedReload(t=this.speedReload){this.speedReload=t+SPEED_RELOAD_BASE}setAttackBonus(t){this.attackBonus=t}increaseSpeedBonus(t){this.speedBonus+=t}decreaseSpeedBonus(t){this.speedBonus-=t,console.log(this.speed)}advanceToTarget(){return this.verifyTarget()&&this.advanceTo(this.target),!1}advanceTo(t){if(t.x!==this.x||t.y!==this.y){let e=!1,s=!1,i=this.getVelocity(t),h=i[0]+this.x,a=i[1]+this.y;return i[0]>=0&&h>=t.x||i[0]<=0&&h<=t.x?(this.setX(t.x),e=!0):this.setX(this.x+i[0]),i[1]>=0&&a>=t.y||i[1]<=0&&a<=t.y?(this.setY(t.y),s=!0):this.setY(this.y+i[1]),!(e&&s)}return!1}fleeFromTarget(){return!!this.verifyTarget()&&this.fleeFrom(this.target)}fleeFrom(t){if(this.target.x!==this.x||this.target.y!==this.y){let e=this.getVelocity(t,!0);return e[0]>=0&&this.x-this.width/2<=0?this.setX(this.width/2):e[0]<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-e[0]),e[1]>=0&&this.y-this.width/2<=0?this.setY(this.height/2):e[1]<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-e[1]),!0}return!1}getVelocity(t,e=!1){let s=[],i=t.x-this.x,h=t.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,e&&(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(t=0){return!!this.verifyTarget()&&(this.canAttack&&this.attack(this.target,t),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(t,e){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:t.x,y:t.y,ease:"Linear",duration:s,onComplete:()=>this.finishAttack(t,e)}),this.scene.time.addEvent({delay:SPEED_RELOAD/this.speedReload/SPEED_GAME,callback:this.reload,callbackScope:this})}finishAttack(t,e){t.beAttack(this.damage*this.attackBonus*DAMAGE*e)&&this.setTarget(null),this.missile.setVisible(!1),1!==this.attackBonus&&this.setAttackBonus(1)}reload(){this.canAttack=!0}beAttack(t){let e=this.shield.decrease(t),s={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},i=this.scene.add.text(this.x,this.y,t.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"),e>0&&(console.log("Shield Broken"),this.life.decrease(e)),this.die()}isTargetInRange(t=1){return!!this.haveTarget()&&this.calcDistance(this.target)<=this.range*RANGE*t}calcDistance(t){return Math.hypot(t.x-this.x,t.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 t=0;tt.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(e))}clickPlay(t){newGame(this.father,t),this.scene.start("Game")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1,lSpeedBonus=[],lShieldBonus=[],lAttackBonus=[];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_WINDOW0?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||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=this.heightButton,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){this.add.text(t,e,s,this.style).setOrigin(.5,.5)}createButtonCancel(){this.createButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/15),"cancel",HEIGHT_WINDOW/9).on("pointerdown",()=>this.cancel())}createButtonAdd(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"add",HEIGHT_WINDOW/9).on("pointerdown",()=>this.addNode())}createButtonModify(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"modify",HEIGHT_WINDOW/9).on("pointerdown",()=>this.modifyNode())}verifyCategory(){for(let t=0;ts.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.displayHeight=HEIGHT_WINDOW/9,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")}close(){this.sound.stopAll(),this.father.scene.remove("GamingBoard"),this.father.scene.remove("Finish")}}class HealthBar{constructor(t,e="",s,i,a,h,n,o,r=COLOR_RED,l=!0){this.bar=new Phaser.GameObjects.Graphics(t),this.width=Math.floor(s),this.height=Math.floor(i),this.valueMax=n,this.value=n,this.color=o,this.colorMin=r,this.bonus=[],this.draw(),t.add.existing(this.bar);let c={font:(i-=4).toString()+"px stencil",fill:"#000000"};this.nameText=t.add.text(a,h,e,c).setOrigin(0,0),this.nameText.alpha=.5,this.setX(a,l),this.setY(h)}addBonus(t){t.value>0&&this.bonus.push(t),console.log(this.bonus),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+=toJson("value",this.value)+toJson("valueMax",this.valueMax)+toJson("color",this.color)+toJson("colorMin",this.colorMin),t=endLineJson(t),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=40,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)))}} \ 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 h=HEIGHT_WINDOW/14;this.style={font:h.toString()+"px stencil",fill:"#e2e2e2"},this.heightButton=HEIGHT_WINDOW/8,this.lastCategory=null,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,h){let a=this.createButton(t,e,s);return a.on("pointerdown",()=>this.click(a,i,h)),i!==this.lastCategory&&this.option.length>0&&(this.option[0]===h||void 0!==this.option[0]&&this.option[0].length>0&&this.option[0][0]===h[0]&&this.option[0][1]===h[1])&&(this.option.splice(0,1),this.lastCategory=i,this.click(a,i,h)),a}createButton(t,e,s,i=this.heightButton,h=null){let a=this.add.image(t,e,s).setOrigin(.5,.5).setInteractive();return a.on("pointerover",()=>a.setFrame(1)),a.on("pointerout",()=>a.setFrame(0)),a.displayHeight=i,null===h?a.scaleX=a.scaleY:a.displayWidth=h,a}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){return this.add.text(t,e,s,this.style).setOrigin(.5,.5)}createButtonCancel(){this.createButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/15),"cancel",HEIGHT_WINDOW/9).on("pointerdown",()=>this.cancel())}createButtonAdd(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"add",HEIGHT_WINDOW/9).on("pointerdown",()=>this.addNode())}createButtonModify(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"modify",HEIGHT_WINDOW/9).on("pointerdown",()=>this.modifyNode())}verifyCategory(){for(let t=0;ts.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.displayHeight=HEIGHT_WINDOW/9,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")}close(){this.sound.stopAll(),this.father.scene.remove("GamingBoard"),this.father.scene.remove("Finish")}}class HealthBar{constructor(t,e="",s,i,h,a,n,o,r=COLOR_RED,l=!0){this.bar=new Phaser.GameObjects.Graphics(t),this.width=Math.floor(s),this.height=Math.floor(i),this.valueMax=n,this.value=n,this.color=o,this.colorMin=r,this.bonus=[],this.draw(),t.add.existing(this.bar);let c={font:(i-=4).toString()+"px stencil",fill:"#000000"};this.nameText=t.add.text(h,a,e,c).setOrigin(0,0),this.nameText.alpha=.5,this.setX(h,l),this.setY(a)}addBonus(t){t.value>0&&this.bonus.push(t),console.log(this.bonus),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 h=s*(this.width-4);this.bar.fillRect(i,2,h,this.height-4),i+=h})}destroy(){this.bar.destroy(),this.nameText.destroy()}getJson(){let t="{";return t+=toJson("value",this.value)+toJson("valueMax",this.valueMax)+toJson("color",this.color)+toJson("colorMin",this.colorMin),t=endLineJson(t),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=40,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)))}} \ No newline at end of file diff --git a/Code/public/json/level2.json b/Code/public/json/level2.json index f919c1b..b0d19b1 100644 --- a/Code/public/json/level2.json +++ b/Code/public/json/level2.json @@ -1 +1 @@ -{"enemyVisible":false,"bonusVisible":true,"robotRandomPosition":true,"tree":{"type":"waria","lRect":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lRect":[{"type":"move","option":[true,false]}]},{"type":"attack","option":[0.3333333333333333]},{"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"]]},"robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[]},{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.3,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.7,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.5,"y":0.4,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.1,"y":0.9,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.3,"y":0.7,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.9,"y":0.2,"name":"enemy","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]}],"lBonus":[{"style":"speed","number":0,"x":0.5,"y":0.5},{"style":"attack","number":2,"x":0.7,"y":0.7},{"style":"shield","number":0,"x":0.2,"y":0.9},{"style":"shield","number":1,"x":0.8,"y":0.4},{"style":"shield","number":2,"x":0.2,"y":0.2}]} \ No newline at end of file +{"enemyVisible":false,"bonusVisible":true,"robotRandomPosition":true,"tree":{"type":"waria","lRect":[{"type":"condition","option":[true,true,false,0.3333333333333333,0],"lRect":[{"type":"move","option":[true,false,"speed"]}]},{"type":"attack","option":[0.3333333333333333]},{"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"]]},"robots":[{"height":0.1,"width":0.1,"x":0.9,"y":0.9,"name":"myself","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[]},{"height":0.1,"width":0.1,"x":0.1,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.3,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.7,"y":0.1,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.5,"y":0.4,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.1,"y":0.9,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.3,"y":0.7,"name":"enemy","speed":1,"speedReload":1,"range":5,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]},{"height":0.1,"width":0.1,"x":0.9,"y":0.2,"name":"enemy","speed":3,"speedReload":1,"range":3,"damage":5,"lNode":[{"name":"condition","option":[true,true,false,0.5,0],"lNode":[{"name":"move","option":[false]}]},{"name":"attack","option":[]},{"name":"move","option":[true]}]}],"lBonus":[{"style":"speed","number":0,"x":0.5,"y":0.5},{"style":"attack","number":2,"x":0.7,"y":0.7},{"style":"shield","number":0,"x":0.2,"y":0.9},{"style":"shield","number":1,"x":0.8,"y":0.4},{"style":"shield","number":2,"x":0.2,"y":0.2}]} \ No newline at end of file diff --git a/Code/src/js/level2/AddAttack.js b/Code/src/js/level2/AddAttack.js index 04703df..ebf3aa2 100644 --- a/Code/src/js/level2/AddAttack.js +++ b/Code/src/js/level2/AddAttack.js @@ -1,6 +1,11 @@ class AddAttack extends AddNode { - constructor(father, game, selected, ...option) { - super(father, game, selected, option); + constructor(father, game, selected, add = true) { + if (!add) { + super(father, game, selected, [false, selected.node.percentRange]); + } else { + super(father, game, selected); + } + } create() { @@ -8,7 +13,7 @@ class AddAttack extends AddNode { 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 (OPTIONAL)", "FILTRES CIBLES (FACULTATIF)")); + super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 7), selectWord("TARGET FILTERS", "FILTRES CIBLES")); super.addButton(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 5), 'enemyBot', super.newCategory('target', true, true), false); let c2 = super.newCategory('range', true, true); diff --git a/Code/src/js/level2/AddCondition.js b/Code/src/js/level2/AddCondition.js index 9737c04..80ed8b6 100644 --- a/Code/src/js/level2/AddCondition.js +++ b/Code/src/js/level2/AddCondition.js @@ -1,6 +1,15 @@ class AddCondition extends AddNode { - constructor(father, game, selected, ...option) { - super(father, game, selected, option); + constructor(father, game, selected, add = true) { + if (!add) { + if (selected.node.shieldFilter) { + super(father, game, selected, [selected.node.shield, 'shield']); + } else { + super(father, game, selected, [selected.node.shield, 'range']); + } + } else { + super(father, game, selected); + } + } create() { @@ -8,7 +17,7 @@ class AddCondition extends AddNode { 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 (OPTIONAL)", "FILTRES CIBLES (FACULTATIF)")); + super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 7), selectWord("TARGET FILTERS", "FILTRES CIBLES")); let c1 = super.newCategory('target', true, true); super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), 'enemyBot', c1, false); super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 5), 'myself', c1, true); diff --git a/Code/src/js/level2/AddMove.js b/Code/src/js/level2/AddMove.js index fba7c55..c2db2db 100644 --- a/Code/src/js/level2/AddMove.js +++ b/Code/src/js/level2/AddMove.js @@ -1,6 +1,10 @@ class AddMove extends AddNode { - constructor(father, game, selected, ...option) { - super(father, game, selected, option); + constructor(father, game, selected, add = true) { + if (!add) { + super(father, game, selected, [selected.node.toward, selected.node.enemyBot, selected.node.typeBonus]); + } else { + super(father, game, selected); + } } create() { @@ -14,12 +18,27 @@ class AddMove extends AddNode { super.addTitle(WIDTH_WINDOW / 4 * 3, HEIGHT_WINDOW / (16 / 3), selectWord("WHO ?", "QUI ?")); let c2 = super.newCategory('target', true, true); super.addButton(WIDTH_WINDOW / 6 * 4, HEIGHT_WINDOW / (16 / 5), 'enemyBot', c2, true); - super.addButton(WIDTH_WINDOW / 6 * 5, HEIGHT_WINDOW / (16 / 5), 'bonus', c2, false); + let btn = super.addButton(WIDTH_WINDOW / 6 * 5, HEIGHT_WINDOW / (16 / 5), 'bonus', c2, false); + let title = super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 7), selectWord("WHAT BONUS ? (OPTIONAL)", "QUEL BONUS ? (FACULTATIF)")); + let c3 = super.newCategory('target', true, false); + let speed = super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 9), 'bonusSpeed', c3, "speed"); + let attack = super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 9), 'bonusAttack', c3, "attack"); + let shield = super.addButton(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 12), 'bonusShield', c3, "shield"); + c2.addEvent(() => this.clickBonus(btn, title, speed, attack, shield)); + this.clickBonus(btn, title, speed, attack, shield); + } + + clickBonus(btn, ...others) { + if (btn.isTinted) { + others.forEach(other => other.setVisible(true)); + } else { + others.forEach(other => other.setVisible(false)); + } } 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.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(); } } @@ -28,6 +47,7 @@ class AddMove extends AddNode { if (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(); } diff --git a/Code/src/js/level2/BonusAttack.js b/Code/src/js/level2/BonusAttack.js index beb82d3..854c73a 100644 --- a/Code/src/js/level2/BonusAttack.js +++ b/Code/src/js/level2/BonusAttack.js @@ -1,6 +1,6 @@ class BonusAttack extends Bonus { constructor(name, texture, value) { - super(name, texture, value); + super(name, texture, value, "attack"); } useOn(robot) { diff --git a/Code/src/js/level2/BonusShield.js b/Code/src/js/level2/BonusShield.js index 2ac3e36..d5d8ef0 100644 --- a/Code/src/js/level2/BonusShield.js +++ b/Code/src/js/level2/BonusShield.js @@ -1,6 +1,6 @@ class BonusShield extends Bonus { constructor(name, texture, value, time, color) { - super(name, texture, value); + super(name, texture, value, "shield"); this.time = time; this.color = color; } diff --git a/Code/src/js/level2/BonusSpeed.js b/Code/src/js/level2/BonusSpeed.js index 040060b..d100db0 100644 --- a/Code/src/js/level2/BonusSpeed.js +++ b/Code/src/js/level2/BonusSpeed.js @@ -1,6 +1,6 @@ class BonusSpeed extends Bonus { constructor(name = "", texture, value, time) { - super(name, texture, value); + super(name, texture, value, "speed"); this.time = time; } diff --git a/Code/src/js/level2/Button.js b/Code/src/js/level2/Button.js new file mode 100644 index 0000000..afc1d00 --- /dev/null +++ b/Code/src/js/level2/Button.js @@ -0,0 +1,20 @@ +class Button extends Phaser.GameObjects.Sprite { + constructor(scene, x, y, width, height, texture, fn, line = 0, visible = true) { + super(scene, x, y, texture); + this.name = texture; + this.setInteractive().setVisible(visible); + this.displayHeight = height; + this.displayWidth = width; + this.line = line; + this.on('pointerout', () => this.changeFrame(0)); + this.on('pointerover', () => this.changeFrame(1)); + this.on('pointerdown', fn); + this.changeFrame(0); + scene.add.existing(this); + } + + + changeFrame(column = 0) { + this.setFrame(column + this.line * 2); + } +} \ No newline at end of file diff --git a/Code/src/js/level2/Category.js b/Code/src/js/level2/Category.js index 7da817a..8683ac0 100644 --- a/Code/src/js/level2/Category.js +++ b/Code/src/js/level2/Category.js @@ -7,17 +7,6 @@ class Category { this.obligatory = obligatory; } - add(btn, value) { - if (this.lBtn.length !== 0 && this.single) { - this.lBtn[0].clearTint(); - this.lValue = []; - this.lBtn = []; - } - this.lValue.push(value); - this.lBtn.push(btn); - btn.tint = 0xEFD807; - } - getValue() { if (this.single) { return this.lValue[0]; @@ -29,6 +18,22 @@ class Category { return !(this.lBtn.length === 0 && this.obligatory); } + addEvent(fn) { + this.event = fn; + } + + add(btn, value) { + if (this.lBtn.length !== 0 && this.single) { + this.lBtn[0].clearTint(); + this.lValue = []; + this.lBtn = []; + } + this.lValue.push(value); + this.lBtn.push(btn); + btn.tint = 0xEFD807; + this.oneChange(); + } + remove(btn) { let id = this.lBtn.indexOf(btn); if (id !== -1) { @@ -36,5 +41,12 @@ class Category { this.lValue.splice(id, 1); } btn.clearTint(); + this.oneChange(); + } + + oneChange() { + if (this.event !== undefined) { + this.event(); + } } } \ No newline at end of file diff --git a/Code/src/js/level2/Game.js b/Code/src/js/level2/Game.js index 03436f0..2ec2aa6 100644 --- a/Code/src/js/level2/Game.js +++ b/Code/src/js/level2/Game.js @@ -50,7 +50,7 @@ class Game extends ManageLang { this.doLine = false; - this.createButton(); + this.createButtons(); this.input.keyboard.on('keydown-DELETE', () => { this.clickBin(); @@ -90,14 +90,14 @@ class Game extends ManageLang { } loadTree(element, posX = CENTERX_TREE, posY = OFFY_TREE / 2) { + let tree; if (element.x !== undefined && element.y !== undefined) { - let tree = new RectangleNode(element.x, element.y, this, element.type, element.option); + 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); + 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); @@ -107,8 +107,8 @@ class Game extends ManageLang { x += OFFX_TREE; }); } - return tree; } + return tree; } loadInitSave(element) { @@ -213,11 +213,11 @@ class Game extends ManageLang { return; if (this.selected !== this.tree) { - this.pencil.setVisible(true); - this.bin.setVisible(true); + this.pencilBtn.setVisible(true); + this.binBtn.setVisible(true); } if (this.selected.canAddNode) { - this.plus.setVisible(true); + this.plusBtn.setVisible(true); } } @@ -241,90 +241,48 @@ class Game extends ManageLang { pauseScene() { - this.linePlay = 0; - this.changeFrame(this.play, 0); + this.playBtn.line = 0; + this.playBtn.changeFrame(0); this.gm.pause(); } resume() { - this.linePlay = 1; + this.playBtn.line = 1; + this.playBtn.changeFrame(0); - let sortDesc = (a, b) => a.getX() - b.getX(); - this.tree.sort(sortDesc); + this.tree.sort(); 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(btn, column = 0, line = 0) { - btn.setFrame(column + line * 2); - } - - createButton() { + createButtons() { let x = WIDTH_MAP + OFFX_MAP; let y = WIDTH_MAP + OFFY_MAP + 5; let width = WIDTH_BUTTON; let diffX = width * 1.1; - - let back = this.add.sprite(10, 10, 'back').setOrigin(0, 0).setInteractive(); - - 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); - - let mute = this.add.sprite(x - diffX * 5, y, 'mute').setOrigin(1, 0).setInteractive(); - - this.linePlay = 0; + let line = 0; + new Button(this, 10, 10, width, width, 'back', () => this.clickBack()).setOrigin(0, 0); + new Button(this, WIDTH_WINDOW - diffX, y, width, width, 'bonusBtn', () => this.clickBonus()).setOrigin(1, 0); + new Button(this, WIDTH_WINDOW, y, width, width, 'save', () => this.clickSave()).setOrigin(1, 0); + this.playBtn = new Button(this, x, y, width, width, 'play', () => this.clickPlay()).setOrigin(1, 0); if (SPEED_GAME === 1) { - this.lineSpeed = 0; + line = 0; } else { - this.lineSpeed = 1; + line = 1; } - this.changeFrame(speed, 0, this.lineSpeed); + this.speedBtn = new Button(this, x - diffX, y, width, width, 'speed', () => this.clickSpeed(), line).setOrigin(1, 0); + this.pencilBtn = new Button(this, x - diffX * 2, y, width, width, 'pencil', () => this.clickPencil(), 0, false).setOrigin(1, 0); + this.binBtn = new Button(this, x - diffX * 3, y, width, width, 'bin', () => this.clickBin(), 0, false).setOrigin(1, 0); + this.plusBtn = new Button(this, x - diffX * 4, y, width, width, 'plus', () => this.clickPlus(), 0, false).setOrigin(1, 0); if (this.father.sound.mute) { - this.lineMute = 1; + line = 1; } else { - this.lineMute = 0; + line = 0; } - 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; - this.pencil.displayHeight = this.pencil.displayWidth = width; - this.bin.displayHeight = this.bin.displayWidth = width; - this.plus.displayHeight = this.plus.displayWidth = width; - - this.play.on('pointerout', () => this.changeFrame(this.play, 0, this.linePlay)); - this.play.on('pointerover', () => this.changeFrame(this.play, 1, this.linePlay)); - speed.on('pointerout', () => this.changeFrame(speed, 0, this.lineSpeed)); - 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); - this.creatBtnOutAndOver(this.plus); - - this.play.on('pointerdown', () => this.clickPlay()); - 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()); + this.muteBtn = new Button(this, x - diffX * 5, y, width, width, 'mute', () => this.clickMute(), line).setOrigin(1, 0); this.input.on('pointerdown', () => this.clickNode()); this.input.on('drag', this.doDrag); @@ -332,26 +290,22 @@ class Game extends ManageLang { this.input.on('dragend', () => this.dragEnd()); } - creatBtnOutAndOver(btn) { - btn.on('pointerout', () => this.changeFrame(btn, 0)); - btn.on('pointerover', () => this.changeFrame(btn, 1)); - } - - clickSave() { + 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 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() { @@ -360,19 +314,19 @@ class Game extends ManageLang { else this.pauseScene(); - this.changeFrame(this.play, 1, this.linePlay); + this.playBtn.changeFrame(1); } - clickSpeed(btn) { + clickSpeed() { if (SPEED_GAME === 1) { SPEED_GAME = 2; - this.lineSpeed = 1; + this.speedBtn.line = 1; } else { SPEED_GAME = 1; - this.lineSpeed = 0; + this.speedBtn.line = 0; } - this.changeFrame(btn, 1, this.lineSpeed); + this.speedBtn.changeFrame(1); } clickPencil() { @@ -380,17 +334,13 @@ class Game extends ManageLang { console.log("PENCIL"); switch (this.selected.type) { case 'attack': - this.father.scene.add('AddNode', new AddAttack(this.father, this, this.selected, false, this.selected.node.percentRange)); + this.father.scene.add('AddNode', new AddAttack(this.father, this, this.selected, false)); break; case 'move': - this.father.scene.add('AddNode', new AddMove(this.father, this, this.selected, this.selected.node.toward, this.selected.node.enemyBot)); + this.father.scene.add('AddNode', new AddMove(this.father, this, this.selected, false)); break; case 'condition': - if (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'])); - } else { - this.father.scene.add('AddNode', new AddCondition(this.father, this, this.selected, this.selected.node.myself, [this.selected.node.range, 'range'])); - } + this.father.scene.add('AddNode', new AddCondition(this.father, this, this.selected, this.selected.node.myself, false)); break; default: return; @@ -405,7 +355,7 @@ class Game extends ManageLang { console.log("BIN"); this.tree.delete(this.selected); - this.changeFrame(this.bin, 0); + this.binBtn.changeFrame(0); this.tryClick(); } } @@ -418,7 +368,7 @@ class Game extends ManageLang { this.scene.launch('PlusNode'); - this.changeFrame(this.plus, 0); + this.plusBtn.changeFrame(0); this.scene.pause('Game'); } @@ -433,23 +383,22 @@ class Game extends ManageLang { this.father.scene.start('Type'); } - clickMute(btn) { + clickMute() { console.log("MUTE"); - if (this.father.sound.mute) { this.father.sound.mute = false; - this.lineMute = 0; + this.muteBtn.line = 0 } else { this.father.sound.mute = true; - this.lineMute = 1; + this.muteBtn.line = 1; } - this.changeFrame(btn, 1, this.lineMute); + this.muteBtn.changeFrame(1); } tryClick() { - this.pencil.setVisible(false); - this.bin.setVisible(false); - this.plus.setVisible(false); + this.pencilBtn.setVisible(false); + this.binBtn.setVisible(false); + this.plusBtn.setVisible(false); if (this.selected != undefined) { this.selected.deselect(); this.selected = undefined; diff --git a/Code/src/js/level2/LoadFile.js b/Code/src/js/level2/LoadFile.js index 3069240..3a4367b 100644 --- a/Code/src/js/level2/LoadFile.js +++ b/Code/src/js/level2/LoadFile.js @@ -62,14 +62,15 @@ class LoadFile extends Phaser.Scene { 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('play', 100, 100, 'buttons/', true); + this.loadSprite('bin', 100, 100, 'buttons/', true); + this.loadSprite('plus', 100, 100, 'buttons/', true); + this.loadSprite('pencil', 100, 100, 'buttons/', true); + this.loadSprite('speed', 100, 100, 'buttons/', true); + this.loadSprite('mute', 100, 100, 'buttons/', true); + this.loadSprite('save', 100, 100, 'buttons/', true); + this.loadSprite('bonusBtn', 100, 100, 'buttons/', true); + this.loadSprite('back', 200, 200, 'buttons/', true); this.loadSprite('shortRange', 300, 150, 'buttons/'); this.loadSprite('mediumRange', 300, 150, 'buttons/'); @@ -80,6 +81,11 @@ class LoadFile extends Phaser.Scene { 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/'); @@ -126,6 +132,9 @@ class LoadFile extends Phaser.Scene { } loadSprite(name, width, height, folder = '', force = false) { + if (this.textures.exists(name) && force) { + return; + } this.deleteLoad(name); if (force) { this.load.spritesheet(name, 'assets/' + folder + name + '.png', { @@ -133,7 +142,7 @@ class LoadFile extends Phaser.Scene { frameHeight: height }); } else { - this.load.spritesheet(name, 'assets/' + LANG + '/' + folder + name + '.png', { + this.load.spritesheet(name, 'assets/lang/' + LANG + '/' + folder + name + '.png', { frameWidth: width, frameHeight: height }); @@ -141,11 +150,14 @@ class LoadFile extends Phaser.Scene { } loadImage(name, folder = '', force = false) { + if (this.textures.exists(name) && force) { + return; + } this.deleteLoad(name); if (force) { this.load.image(name, 'assets/' + folder + name + '.png'); } else { - this.load.image(name, 'assets/' + LANG + '/' + folder + name + '.png'); + this.load.image(name, 'assets/lang/' + LANG + '/' + folder + name + '.png'); } } diff --git a/Code/src/js/level2/Move.js b/Code/src/js/level2/Move.js index c97e7dc..0c6edc6 100644 --- a/Code/src/js/level2/Move.js +++ b/Code/src/js/level2/Move.js @@ -1,7 +1,8 @@ class Move { - constructor(toward, enemyBot = true) { //true = move toward / false = flee from + constructor(toward, enemyBot = true, typeBonus) { //true = move toward / false = flee from this.toward = toward; this.enemyBot = enemyBot; + this.typeBonus = typeBonus; } do(robot) { @@ -14,7 +15,8 @@ class Move { } } } else { - let bonusTarget = chooseTarget(robot, listBonus); + + let bonusTarget = chooseTarget(robot, this.getListBonus()); if (bonusTarget !== undefined) { let ret; if (this.toward === true) { @@ -33,9 +35,21 @@ class Move { return false; } + getListBonus() { + if (this.typeBonus !== undefined) { + let l = []; + listBonus.forEach(bonusView => { + if (bonusView.bonus.type === this.typeBonus) { + l.push(bonusView); + } + }); + return l; + } + return listBonus; + } + moveToward(robot, target = robot.target) { return robot.advanceTo(target); - } fleeFrom(robot, target = robot.target) { @@ -47,13 +61,29 @@ class Move { if (this.toward) frame = 0; else - frame = 2; + frame = 5; if (!this.enemyBot) - frame += 1; + switch (this.typeBonus) { + case "speed": + frame += 2; + break; + case "attack": + frame += 3; + break; + case "shield": + frame += 4; + break; + default: + frame += 1; + } return frame; } getOptionJson() { - return this.toward + ',' + this.enemyBot; + let json = this.toward + ',' + this.enemyBot + ''; + if (this.typeBonus !== undefined) { + json += ',"' + this.typeBonus + '"'; + } + return json; } } \ No newline at end of file diff --git a/Code/src/js/level2/RectangleNode.js b/Code/src/js/level2/RectangleNode.js index 9c85b7a..0ad5e20 100644 --- a/Code/src/js/level2/RectangleNode.js +++ b/Code/src/js/level2/RectangleNode.js @@ -9,7 +9,7 @@ class RectangleNode { break; case 'move' : this.rect = new Phaser.GameObjects.Image(scene, x, y, 'moveNode'); - this.node = new Move(option[0], option[1]); + this.node = new Move(option[0], option[1], option[2]); this.canAddNode = false; this.line = scene.add.graphics(); break; @@ -132,7 +132,7 @@ class RectangleNode { return this.node; } - sort(sortDesc) { + sort(sortDesc = (a, b) => a.getX() - b.getX()) { if (this.canAddNode) { this.lRect.sort(sortDesc); this.lRect.forEach(function (element) { diff --git a/Code/src/js/level3/AddNode.js b/Code/src/js/level3/AddNode.js index 37edae8..a3d3736 100644 --- a/Code/src/js/level3/AddNode.js +++ b/Code/src/js/level3/AddNode.js @@ -28,7 +28,7 @@ class AddNode extends Phaser.Scene { addButton(x, y, texture, category = new Category(), value) { let btn = this.createButton(x, y, texture); btn.on('pointerdown', () => this.click(btn, category, value)); - if (category !== this.lastCategory && this.option.length > 0 && (this.option[0] === value || (this.option[0].length > 0 && this.option[0][0] === value[0] && this.option[0][1] === value [1]))) { + if (category !== this.lastCategory && this.option.length > 0 && (this.option[0] === value || (this.option[0] !== undefined && this.option[0].length > 0 && this.option[0][0] === value[0] && this.option[0][1] === value [1]))) { this.option.splice(0, 1); this.lastCategory = category; this.click(btn, category, value); @@ -65,7 +65,7 @@ class AddNode extends Phaser.Scene { } addTitle(x, y, title) { - this.add.text(x, y, title, this.style).setOrigin(0.5, 0.5); + return this.add.text(x, y, title, this.style).setOrigin(0.5, 0.5); } createButtonCancel() { diff --git a/Code/src/js/level3/Bonus.js b/Code/src/js/level3/Bonus.js index a8dcd88..e40af96 100644 --- a/Code/src/js/level3/Bonus.js +++ b/Code/src/js/level3/Bonus.js @@ -1,7 +1,8 @@ class Bonus { - constructor(name, texture, value) { + constructor(name, texture, value, type) { this.texture = texture; this.name = name; this.value = value; + this.type = type; } } \ No newline at end of file diff --git a/Code/src/json/level2.json b/Code/src/json/level2.json index 901c758..32102bd 100644 --- a/Code/src/json/level2.json +++ b/Code/src/json/level2.json @@ -19,7 +19,8 @@ "type": "move", "option": [ true, - false + false, + "speed" ] } ]