From 8169ee92ae00b6b7ca584c4aef85a7b842d1656f Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Wed, 24 Jun 2020 01:01:42 +0200 Subject: [PATCH] =?UTF-8?q?On=20peut=20ajouter=20une=20condition=20=C3=A0?= =?UTF-8?q?=20notre=20arbre=20d'action=20(uniquement=20une=20condition=20s?= =?UTF-8?q?ur=20le=20bouclier=20pour=20le=20moment)=20-=20Modification=20d?= =?UTF-8?q?e=20la=20classe=20Condition=20pour=20g=C3=A9rer=20les=20conditi?= =?UTF-8?q?ons=20sur=20les=20robots=20ennemis=20-=20On=20peut=20d=C3=A9sor?= =?UTF-8?q?mais=20ajouter=20une=20condition=20uniquement=20sur=20les=20act?= =?UTF-8?q?ions=20qui=20acceptent=20les=20liens=20avec=20d'autres=20action?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/public/js/AddNode.js | 49 +++++++++++++++++++--------- Code/public/js/class.min.js | 2 +- Code/src/js/classes/AddAttack.js | 7 ++-- Code/src/js/classes/AddCondition.js | 27 ++++++++++----- Code/src/js/classes/AddMove.js | 7 ++-- Code/src/js/classes/Category.js | 25 +++++++++++--- Code/src/js/classes/Condition.js | 25 +++++++++----- Code/src/js/classes/Game.js | 4 +-- Code/src/js/classes/PlusNode.js | 17 ++++++---- Code/src/js/classes/RectangleNode.js | 6 +++- Code/src/js/classes/Robot.js | 2 +- 11 files changed, 116 insertions(+), 55 deletions(-) diff --git a/Code/public/js/AddNode.js b/Code/public/js/AddNode.js index 5ac3dc4..371f57e 100644 --- a/Code/public/js/AddNode.js +++ b/Code/public/js/AddNode.js @@ -1,24 +1,32 @@ class AddNode extends Phaser.Scene { - constructor(game, selected) { + constructor(father, game, selected) { super('AddNode'); - this.game = game; + this.father = father; + this.gameR = game; this.selected = selected; + this.lCategory = []; } - create() { + create(son) { let height = HEIGHT_WINDOW / (4 / 3); this.add.rectangle(0, 0, WIDTH_WINDOW, HEIGHT_WINDOW, 0x000000).setOrigin(0, 0).setAlpha(0.5); this.add.rectangle(0, HEIGHT_WINDOW / 2, WIDTH_WINDOW, height, 0x35363A).setOrigin(0, 0.5); this.createButtonCancel(); - this.createButtonAdd(); + console.log(son); + this.createButtonAdd(son); } - addButton(x, y, width, height, texture, category = new Category()) { + addButton(x, y, width, height, texture, category = new Category(), value) { + let btn = this.createButton(x, y, width, height, texture); + btn.on('pointerdown', () => this.click(btn, category, value)); + return btn; + } + + createButton(x, y, width, height, texture) { let btn = this.add.image(x, y, texture).setOrigin(0.5, 0.5).setInteractive(); btn.on('pointerover', () => btn.setFrame(1)); btn.on('pointerout', () => btn.setFrame(0)); - btn.on('pointerdown', () => this.click(btn, category)); btn.displayHeight = height; if (width === null) { @@ -29,14 +37,20 @@ class AddNode extends Phaser.Scene { return btn; } - click(btn, category) { + click(btn, category, value) { if (btn.isTinted) { category.remove(btn); } else { - category.add(btn); + category.add(btn, value); } } + newCategory(name, single, obligatory) { + let c = new Category(name, single, obligatory); + this.lCategory.push(c); + return c; + } + addTitle(x, y, title) { let sizeText = HEIGHT_WINDOW / 12; let style = {font: sizeText.toString() + 'px stencil', fill: "#e2e2e2"}; @@ -44,22 +58,27 @@ class AddNode extends Phaser.Scene { } createButtonCancel() { - this.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 15), null, HEIGHT_WINDOW / 9, 'cancel') + this.createButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 15), null, HEIGHT_WINDOW / 9, 'cancel') .on('pointerdown', () => this.cancel()); } - createButtonAdd() { - this.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 15), null, HEIGHT_WINDOW / 9, 'add') - .on('pointerdown', () => this.add()); + createButtonAdd(son) { + this.createButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 15), null, HEIGHT_WINDOW / 9, 'add') + .on('pointerdown', () => son.addNode()); } - add() { - + verifyCategory() { + for (let i = 0; i < this.lCategory.length; i++) { + if (!this.lCategory[i].validate()) { + return false; + } + } + return true; } cancel() { this.scene.resume('Game'); this.scene.stop('AddNode'); - this.game.scene.remove('AddNode'); + this.father.scene.remove('AddNode'); } } \ No newline at end of file diff --git a/Code/public/js/class.min.js b/Code/public/js/class.min.js index d12daee..23194d7 100644 --- a/Code/public/js/class.min.js +++ b/Code/public/js/class.min.js @@ -1 +1 @@ -class AddAttack extends AddNode{constructor(t,e){super(t,e),this.game=t}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.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot")}}class AddCondition extends AddNode{constructor(t,e){super(t,e),this.game=t,this.selected=e}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 ?"));let t=new Category("target",!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot",t),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"myself",t)}}class AddMove extends AddNode{constructor(t,e){super(t,e),this.game=t}create(){console.log("MOVE"),super.create();let t=new Category("direction",!0);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 ?")),super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"fleeFrom",t),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"moveToward",t),super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addButton(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot")}}class Attack{constructor(){}do(t){return!(!t.haveTarget()||!t.isTargetInRange())&&t.attackTarget()}}class Boot extends Phaser.Scene{constructor(t){super("Boot"),this.father=t}preload(){let t=this.add.graphics(),e=this.add.graphics(),i=WIDTH_WINDOW/2-160,s=HEIGHT_WINDOW/2-25;e.fillStyle(2236962,.8),e.fillRect(i,s,320,50),this.load.on("progress",function(e){t.clear(),t.fillStyle(16777215,1),t.fillRect(i+10,s+10,300*e,30)}),this.load.on("complete",function(){t.destroy(),e.destroy()}),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",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("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("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/"),this.loadSprite("moveNode",180,190,"nodes/"),this.loadSprite("conditionNode",180,190,"nodes/"),this.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/"),this.loadImage("move","nodes/"),this.loadImage("condition","nodes/")}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)),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,console.log("Set Lang : "+t),this.scene.restart())}clickPlay(t){t.setFrame(2),console.log("Play"),this.scene.start("Type")}loadSprite(t,e,i,s="",h=!1){this.deleteLoad(t),h?this.load.spritesheet(t,"assets/"+s+t+".png",{frameWidth:e,frameHeight:i}):this.load.spritesheet(t,"assets/"+LANG+"/"+s+t+".png",{frameWidth:e,frameHeight:i})}loadImage(t,e="",i=!1){this.deleteLoad(t),i?this.load.image(t,"assets/"+e+t+".png"):this.load.image(t,"assets/"+LANG+"/"+e+t+".png")}deleteLoad(t){this.textures.exists(t)&&this.textures.remove(t)}}class Category{constructor(t="undefined",e=!0){this.name=t,this.single=e,this.lBtn=[]}add(t){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lBtn=[]),this.lBtn.push(t),t.tint=15718407}remove(t){-1!==this.lBtn.indexOf(t)&&this.lBtn.splice(this.lBtn.indexOf(t),1),t.clearTint()}}class Condition{constructor(t,e=!1,i=!1,s,h){this.shieldFilter=e,this.rangeFilter=i,this.shield=s,this.range=h,this.target=t,this.lNode=[]}addNode(t){this.lNode.push(t)}do(t){if(this.doCondition(t))for(let e=0;et.getX()-e.getX();this.tree.lRect.sort(t),this.tree.lRect.forEach(function(e){void 0!==e.lRect&&e.lRect.sort(t)}),this.gm.modifyNodes(this.tree.getNodes()),this.scene.resume("GamingBoard")}createButton(){let t=WIDTH_MAP+WIDTH_WINDOW/10,e=WIDTH_MAP+HEIGHT_WINDOW/10+5,i=HEIGHT_WINDOW/10,s=HEIGHT_WINDOW/15,h=this.add.sprite(t,e,"play").setOrigin(1,0).setInteractive(),a=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.pencil=this.add.sprite(t-i,e,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(t-2*i,e,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(t-3*i,e,"plus").setOrigin(1,0).setInteractive().setVisible(!1),this.line=0,h.displayHeight=h.displayWidth=s,a.displayHeight=a.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(a),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),h.on("pointerdown",()=>this.clickPlay(h)),a.on("pointerdown",()=>this.clickBack()),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.OK()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.pauseScene(h))}creatBtnOutAndOver(t){t.on("pointerout",()=>this.changeFrame(t,0)),t.on("pointerover",()=>this.changeFrame(t,1))}clickPlay(t){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(t),this.changeFrame(t,1)}clickPencil(){console.log("PENCIL"),this.changeFrame(this.pencil,0)}clickBin(){console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0)}clickPlus(){console.log("PLUS"),this.father.scene.add("PlusNode",new PlusNode(this.father,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")}}class GamingBoard extends Phaser.Scene{constructor(){super("GamingBoard"),this.listRobot=[]}preload(){this.cameras.main.setViewport(WIDTH_WINDOW/10,HEIGHT_WINDOW/10,WIDTH_MAP,WIDTH_MAP)}create(){this.add.image(0,0,"background").alpha=.1;for(let t=0;tthis.resume()),this.time.addEvent({delay:2e3,callback:this.upShield,callbackScope:this})}update(t,e){super.update(t,e),this.listRobot.forEach(function(t){t.read()});for(let t=0;tthis.listRobot[0].addNode(t))}chooseTarget(t){let e=2*WIDTH_MAP,i=[];this.listRobot.forEach(function(s){if(s!==t&&s.isAlive()){let h=Math.hypot(s.x-t.x,s.y-t.y);e>=h&&(e>h&&(e=h,i=[]),i.push(s))}}),this.listRobot.length>1?t.setTarget(i[Math.floor(Math.random()*(i.length+1))]):t.setTarget(i[0])}upShield(){this.listRobot.forEach(t=>t.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3,callback:this.upShield,callbackScope:this})}}class HealthBar{constructor(t,e,i,s,h,a,r){this.bar=new Phaser.GameObjects.Graphics(t),this.width=e,this.height=i,this.valueMax=a,this.value=a,this.color=r,this.draw(),this.setX(s),this.setY(h),t.add.existing(this.bar)}decrease(t){this.value-=t;let e=0;return 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){this.bar.setX(t-this.width/2)}setY(t){this.bar.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.value/this.valueMax;t<1/3?this.bar.fillStyle(16711680):this.bar.fillStyle(this.color);let e=Math.floor(t*(this.width-4));this.bar.fillRect(2,2,e,this.height-4)}destroy(){this.bar.destroy()}}class Missile extends Phaser.GameObjects.Image{constructor(t,e,i,s){super(t,0,0,e),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move{constructor(t){this.toward=t}do(t){return!!t.haveTarget()&&(!0===this.toward?this.moveToward(t):this.fleeFrom(t))}moveToward(t){return t.advanceToTarget()}fleeFrom(t){return t.fleeFromTarget()}}class PlusNode extends Phaser.Scene{constructor(t,e){super("PlusNode"),this.game=t,this.selected=e}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,i=WIDTH_WINDOW/3,s=HEIGHT_WINDOW/10,h={font:s.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(t-i,e-s,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(t,e-s,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(t+i,e-s,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(t-i,e+s,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*s,a.scaleX=a.scaleY,(a=this.add.sprite(t,e+s,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*s,a.scaleX=a.scaleY,(a=this.add.sprite(t+i,e+s,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*s,a.scaleX=a.scaleY}click(t){switch(t.toString()){case"attack":this.game.scene.add("AddNode",new AddAttack(this.game,this.selected));break;case"move":this.game.scene.add("AddNode",new AddMove(this.game,this.selected));break;case"condition":this.game.scene.add("AddNode",new AddCondition(this.game,this.selected))}this.scene.launch("AddNode"),this.scene.stop("PlusNode"),this.game.scene.remove("PlusNode")}createButton(){let t=WIDTH_WINDOW/2,e=HEIGHT_WINDOW-100,i=this.add.image(t,e,"cancel").setOrigin(.5,.5).setInteractive();i.on("pointerover",()=>i.setFrame(1)),i.on("pointerout",()=>i.setFrame(0)),i.on("pointerdown",()=>this.cancel()),i.displayHeight=HEIGHT_WINDOW/10,i.scaleX=i.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.game.scene.remove("PlusNode")}}class RectangleNode{constructor(t,e,i,s,...h){switch(s.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(i,t,e,"attackNode"),this.node=new Attack,this.canAddNode=!1,this.line=i.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(i,t,e,"moveNode"),this.node=new Move(h[0]),this.canAddNode=!1,this.line=i.add.graphics(),!0===h[0]?this.rect.setFrame(0):this.rect.setFrame(2);break;case"condition":let a;this.rect=new Phaser.GameObjects.Image(i,t,e,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=i,this.line=i.add.graphics(),a="myself"===h[0].name.toString().toLowerCase()?0:1;let r=0;!0===h[1]&&(r=Math.floor(3*h[3])),h[2],this.rect.setFrame(4*a+r);break;case"waria":this.rect=new Phaser.GameObjects.Image(i,t,e,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=i,this.scene.add.existing(this.rect);break;default:return void console.log("Création d'un node echoué")}s.toString().toLowerCase(),this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_WINDOW/6,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let t=0;tthis.addLine(t))}addLine(t){t.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNodes(){if(void 0===this.node){let t=[];return this.lRect.forEach(function(e){void 0!==e.node&&(void 0!==e.lRect&&(e.node.clearNodes(),e.lRect.forEach(t=>e.node.addNode(t.node))),t.push(e.node))}),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;e=0&&this.x>=this.target.x||this.velocityX<=0&&this.x<=this.target.x?this.setX(this.target.x):this.setX(this.x+this.velocityX),this.velocityY>=0&&this.y>=this.target.y||this.velocityY<=0&&this.y<=this.target.y?this.setY(this.target.y):this.setY(this.y+this.velocityY),!0)}fleeFromTarget(){return!!this.verifyTarget()&&(this.velocityX>=0&&this.x-this.width/2<=0?this.setX(this.width/2):this.velocityX<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-this.velocityX),this.velocityY>=0&&this.y-this.width/2<=0?this.setY(this.height/2):this.velocityY<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-this.velocityY),!0)}attackTarget(){return!!(this.verifyTarget()&&this.target.isAlive()&&this.isTargetInRange())&&(this.canAttack&&this.attack(this.target),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(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.tweens.add({targets:this.missile,x:t.x,y:t.y,ease:"Linear",duration:200,onComplete:()=>this.finishAttack(t)}),this.scene.time.addEvent({delay:Phaser.Math.Between(1e3,3e3),callback:this.reload,callbackScope:this})}finishAttack(t){t.beAttack(this.damage)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(t){let e=this.shield.decrease(t);return e>0&&(console.log("Shield Broken"),this.life.decrease(e)),this.die()}isTargetInRange(){return!!this.verifyTarget()&&this.calcDistance(this.target)0}die(){return 0===this.life.value&&(this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){for(let t=0;tt.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(t){this.scene.start("Game")}} \ No newline at end of file +class AddAttack extends AddNode{constructor(t,e,i){super(t,e,i)}create(){console.log("ATTACK"),super.create(this),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.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot")}}class AddCondition extends AddNode{constructor(t,e,i){super(t,e,i)}create(){super.create(this),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 t=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot",t,!1),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"myself",t,!0);let e=super.newCategory("shield",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),null,HEIGHT_WINDOW/8,"shield0",e,0),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),null,HEIGHT_WINDOW/8,"shield33",e,1/3),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/12),null,HEIGHT_WINDOW/8,"shield66",e,2/3),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/12),null,HEIGHT_WINDOW/8,"shield100",e,1)}addNode(){super.verifyCategory()&&(console.log(this.lCategory[0].getValue()),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)),super.cancel())}}class AddMove extends AddNode{constructor(t,e,i){super(t,e,i)}create(){console.log("MOVE"),super.create(this);let t=new Category("direction",!0);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 ?")),super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"fleeFrom",t),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"moveToward",t),super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addButton(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/3.2,null,HEIGHT_WINDOW/8,"enemyBot")}}class Attack{constructor(){}do(t){return!(!t.haveTarget()||!t.isTargetInRange())&&t.attackTarget()}}class Boot extends Phaser.Scene{constructor(t){super("Boot"),this.father=t}preload(){let t=this.add.graphics(),e=this.add.graphics(),i=WIDTH_WINDOW/2-160,s=HEIGHT_WINDOW/2-25;e.fillStyle(2236962,.8),e.fillRect(i,s,320,50),this.load.on("progress",function(e){t.clear(),t.fillStyle(16777215,1),t.fillRect(i+10,s+10,300*e,30)}),this.load.on("complete",function(){t.destroy(),e.destroy()}),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",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("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("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/"),this.loadSprite("moveNode",180,190,"nodes/"),this.loadSprite("conditionNode",180,190,"nodes/"),this.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/"),this.loadImage("move","nodes/"),this.loadImage("condition","nodes/")}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)),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,console.log("Set Lang : "+t),this.scene.restart())}clickPlay(t){t.setFrame(2),console.log("Play"),this.scene.start("Type")}loadSprite(t,e,i,s="",h=!1){this.deleteLoad(t),h?this.load.spritesheet(t,"assets/"+s+t+".png",{frameWidth:e,frameHeight:i}):this.load.spritesheet(t,"assets/"+LANG+"/"+s+t+".png",{frameWidth:e,frameHeight:i})}loadImage(t,e="",i=!1){this.deleteLoad(t),i?this.load.image(t,"assets/"+e+t+".png"):this.load.image(t,"assets/"+LANG+"/"+e+t+".png")}deleteLoad(t){this.textures.exists(t)&&this.textures.remove(t)}}class Category{constructor(t="undefined",e=!0,i=!0){this.name=t,this.single=e,this.lBtn=[],this.lValue=[],this.obligatory=i}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}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}remove(t){let e=this.lBtn.indexOf(t);-1!==e&&(this.lBtn.splice(e,1),this.lValue.splice(e,1)),t.clearTint()}}class Condition{constructor(t,e=!1,i=!1,s,h){this.shieldFilter=e,this.rangeFilter=i,this.shield=s,this.range=h,this.myself=t,this.lNode=[]}addNode(t){this.lNode.push(t)}do(t){if(this.doCondition(t))for(let e=0;et.getX()-e.getX();this.tree.lRect.sort(t),this.tree.lRect.forEach(function(e){void 0!==e.lRect&&e.lRect.sort(t)}),this.gm.modifyNodes(this.tree.getNodes()),this.scene.resume("GamingBoard")}createButton(){let t=WIDTH_MAP+WIDTH_WINDOW/10,e=WIDTH_MAP+HEIGHT_WINDOW/10+5,i=HEIGHT_WINDOW/10,s=HEIGHT_WINDOW/15,h=this.add.sprite(t,e,"play").setOrigin(1,0).setInteractive(),a=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.pencil=this.add.sprite(t-i,e,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(t-2*i,e,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(t-3*i,e,"plus").setOrigin(1,0).setInteractive().setVisible(!1),this.line=0,h.displayHeight=h.displayWidth=s,a.displayHeight=a.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(a),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),h.on("pointerdown",()=>this.clickPlay(h)),a.on("pointerdown",()=>this.clickBack()),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.OK()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.pauseScene(h))}creatBtnOutAndOver(t){t.on("pointerout",()=>this.changeFrame(t,0)),t.on("pointerover",()=>this.changeFrame(t,1))}clickPlay(t){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(t),this.changeFrame(t,1)}clickPencil(){console.log("PENCIL"),this.changeFrame(this.pencil,0)}clickBin(){console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0)}clickPlus(){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")}}class GamingBoard extends Phaser.Scene{constructor(){super("GamingBoard"),this.listRobot=[]}preload(){this.cameras.main.setViewport(WIDTH_WINDOW/10,HEIGHT_WINDOW/10,WIDTH_MAP,WIDTH_MAP)}create(){this.add.image(0,0,"background").alpha=.1;for(let t=0;tthis.resume()),this.time.addEvent({delay:2e3,callback:this.upShield,callbackScope:this})}update(t,e){super.update(t,e),this.listRobot.forEach(function(t){t.read()});for(let t=0;tthis.listRobot[0].addNode(t))}chooseTarget(t){let e=2*WIDTH_MAP,i=[];this.listRobot.forEach(function(s){if(s!==t&&s.isAlive()){let h=Math.hypot(s.x-t.x,s.y-t.y);e>=h&&(e>h&&(e=h,i=[]),i.push(s))}}),this.listRobot.length>1?t.setTarget(i[Math.floor(Math.random()*(i.length+1))]):t.setTarget(i[0])}upShield(){this.listRobot.forEach(t=>t.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3,callback:this.upShield,callbackScope:this})}}class HealthBar{constructor(t,e,i,s,h,a,r){this.bar=new Phaser.GameObjects.Graphics(t),this.width=e,this.height=i,this.valueMax=a,this.value=a,this.color=r,this.draw(),this.setX(s),this.setY(h),t.add.existing(this.bar)}decrease(t){this.value-=t;let e=0;return 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){this.bar.setX(t-this.width/2)}setY(t){this.bar.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.value/this.valueMax;t<1/3?this.bar.fillStyle(16711680):this.bar.fillStyle(this.color);let e=Math.floor(t*(this.width-4));this.bar.fillRect(2,2,e,this.height-4)}destroy(){this.bar.destroy()}}class Missile extends Phaser.GameObjects.Image{constructor(t,e,i,s){super(t,0,0,e),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move{constructor(t){this.toward=t}do(t){return!!t.haveTarget()&&(!0===this.toward?this.moveToward(t):this.fleeFrom(t))}moveToward(t){return t.advanceToTarget()}fleeFrom(t){return t.fleeFromTarget()}}class PlusNode extends Phaser.Scene{constructor(t,e,i){super("PlusNode"),this.father=t,this.gameR=e,this.selected=i,console.log(this.gameR)}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,i=WIDTH_WINDOW/3,s=HEIGHT_WINDOW/10,h={font:s.toString()+"px stencil",fill:"#e2e2e2"};this.add.text(t-i,e-s,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(t,e-s,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(t+i,e-s,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(t-i,e+s,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*s,a.scaleX=a.scaleY,(a=this.add.sprite(t,e+s,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*s,a.scaleX=a.scaleY,(a=this.add.sprite(t+i,e+s,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*s,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,i=this.add.image(t,e,"cancel").setOrigin(.5,.5).setInteractive();i.on("pointerover",()=>i.setFrame(1)),i.on("pointerout",()=>i.setFrame(0)),i.on("pointerdown",()=>this.cancel()),i.displayHeight=HEIGHT_WINDOW/10,i.scaleX=i.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}}class RectangleNode{constructor(t,e,i,s,...h){switch(s.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(i,t,e,"attackNode"),this.node=new Attack,this.canAddNode=!1,this.line=i.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(i,t,e,"moveNode"),this.node=new Move(h[0]),this.canAddNode=!1,this.line=i.add.graphics(),!0===h[0]?this.rect.setFrame(0):this.rect.setFrame(2);break;case"condition":let a;this.rect=new Phaser.GameObjects.Image(i,t,e,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=i,this.line=i.add.graphics(),a=h[0]?0:1;let r=0;!0===h[1]&&(r=Math.floor(3*h[3])),h[2],this.rect.setFrame(4*a+r);break;case"waria":this.rect=new Phaser.GameObjects.Image(i,t,e,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=i,this.scene.add.existing(this.rect);break;default:return void console.log("Création d'un node echoué")}s.toString().toLowerCase(),this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_WINDOW/6,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let t=0;tthis.addLine(t))}addLine(t){t.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNodes(){if(void 0===this.node){let t=[];return this.lRect.forEach(function(e){void 0!==e.node&&(void 0!==e.lRect&&(e.node.clearNodes(),e.lRect.forEach(t=>e.node.addNode(t.node))),t.push(e.node))}),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;e=0&&this.x>=this.target.x||this.velocityX<=0&&this.x<=this.target.x?this.setX(this.target.x):this.setX(this.x+this.velocityX),this.velocityY>=0&&this.y>=this.target.y||this.velocityY<=0&&this.y<=this.target.y?this.setY(this.target.y):this.setY(this.y+this.velocityY),!0)}fleeFromTarget(){return!!this.verifyTarget()&&(this.velocityX>=0&&this.x-this.width/2<=0?this.setX(this.width/2):this.velocityX<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-this.velocityX),this.velocityY>=0&&this.y-this.width/2<=0?this.setY(this.height/2):this.velocityY<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-this.velocityY),!0)}attackTarget(){return!!(this.verifyTarget()&&this.target.isAlive()&&this.isTargetInRange())&&(this.canAttack&&this.attack(this.target),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(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.tweens.add({targets:this.missile,x:t.x,y:t.y,ease:"Linear",duration:200,onComplete:()=>this.finishAttack(t)}),this.scene.time.addEvent({delay:Phaser.Math.Between(1e3,3e3),callback:this.reload,callbackScope:this})}finishAttack(t){t.beAttack(this.damage)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(t){let e=this.shield.decrease(t);return e>0&&(console.log("Shield Broken"),this.life.decrease(e)),this.die()}isTargetInRange(){return!!this.verifyTarget()&&this.calcDistance(this.target)0}die(){return 0===this.life.value&&(this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){for(let t=0;tt.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(t){this.scene.start("Game")}} \ No newline at end of file diff --git a/Code/src/js/classes/AddAttack.js b/Code/src/js/classes/AddAttack.js index c1aee3d..aa007e5 100644 --- a/Code/src/js/classes/AddAttack.js +++ b/Code/src/js/classes/AddAttack.js @@ -1,12 +1,11 @@ class AddAttack extends AddNode { - constructor(game, selected) { - super(game, selected); - this.game = game; + constructor(father, game, selected) { + super(father, game, selected); } create() { console.log("ATTACK"); - super.create(); + super.create(this); 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.addButton(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'enemyBot'); diff --git a/Code/src/js/classes/AddCondition.js b/Code/src/js/classes/AddCondition.js index 1e597ca..25d91b8 100644 --- a/Code/src/js/classes/AddCondition.js +++ b/Code/src/js/classes/AddCondition.js @@ -1,19 +1,30 @@ class AddCondition extends AddNode { - constructor(game, selected) { - super(game, selected); - this.game = game; - this.selected = selected; + constructor(father, game, selected) { + super(father, game, selected); } create() { - super.create(); + super.create(this); 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 ?")); - let c1 = new Category('target', true); - super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'enemyBot', c1); - super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'myself', c1); + super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 7), selectWord("TARGET FILTERS (OPTIONAL)", "FILTRES CIBLES (FACULTATIF)")); + let c1 = super.newCategory('target', true, true); + super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'enemyBot', c1, false); + super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'myself', c1, true); + let c2 = super.newCategory('shield', true, true); + super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 9), null, HEIGHT_WINDOW / 8, 'shield0', c2, 0); + super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 9), null, HEIGHT_WINDOW / 8, 'shield33', c2, 1 / 3); + super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 12), null, HEIGHT_WINDOW / 8, 'shield66', c2, 2 / 3); + super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 12), null, HEIGHT_WINDOW / 8, 'shield100', c2, 1); } + addNode() { + if (super.verifyCategory()) { + console.log(this.lCategory[0].getValue()); + this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'condition', this.lCategory[0].getValue(), true, false, this.lCategory[1].getValue(), 0)); + super.cancel(); + } + } } \ No newline at end of file diff --git a/Code/src/js/classes/AddMove.js b/Code/src/js/classes/AddMove.js index a063a99..4fe8aa1 100644 --- a/Code/src/js/classes/AddMove.js +++ b/Code/src/js/classes/AddMove.js @@ -1,12 +1,11 @@ class AddMove extends AddNode { - constructor(game, selected) { - super(game, selected); - this.game = game; + constructor(father, game, selected) { + super(father, game, selected); } create() { console.log("MOVE"); - super.create(); + super.create(this); let c1 = new Category('direction', true); 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 ?")); diff --git a/Code/src/js/classes/Category.js b/Code/src/js/classes/Category.js index ce666af..7da817a 100644 --- a/Code/src/js/classes/Category.js +++ b/Code/src/js/classes/Category.js @@ -1,22 +1,39 @@ class Category { - constructor(name = 'undefined', single = true) { + constructor(name = 'undefined', single = true, obligatory = true) { this.name = name; this.single = single; this.lBtn = []; + this.lValue = []; + this.obligatory = obligatory; } - add(btn) { + 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]; + } + return this.lValue; + } + + validate() { + return !(this.lBtn.length === 0 && this.obligatory); + } + remove(btn) { - if (this.lBtn.indexOf(btn) !== -1) { - this.lBtn.splice(this.lBtn.indexOf(btn), 1); + let id = this.lBtn.indexOf(btn); + if (id !== -1) { + this.lBtn.splice(id, 1); + this.lValue.splice(id, 1); } btn.clearTint(); } diff --git a/Code/src/js/classes/Condition.js b/Code/src/js/classes/Condition.js index dd15106..7031dcc 100644 --- a/Code/src/js/classes/Condition.js +++ b/Code/src/js/classes/Condition.js @@ -1,10 +1,10 @@ class Condition { - constructor(target, shieldFilter = false, rangeFilter = false, shield, range) { //shieldFilter : true/false - rangeFilter : true/false + constructor(myself, shieldFilter = false, rangeFilter = false, shield, range) { //shieldFilter : true/false - rangeFilter : true/false this.shieldFilter = shieldFilter; this.rangeFilter = rangeFilter; this.shield = shield; this.range = range; - this.target = target; + this.myself = myself; //true = myself / false = enemyBot; this.lNode = []; } @@ -26,7 +26,7 @@ class Condition { doCondition(robot) { if (this.shieldFilter) { - if (this.shieldCondition()) { + if (this.shieldCondition(robot)) { if (this.rangeFilter) { return this.rangeCondition(robot); } @@ -39,14 +39,23 @@ class Condition { } rangeCondition(robot) { - return robot.calcDistance(this.target) <= this.range; + if (this.myself) { + return true; + } + return robot.calcDistance(robot.target) <= this.range; } - shieldCondition() { - if (this.target.shield.value / this.target.shield.valueMax <= this.shield) { - return true; + shieldCondition(robot) { + if (this.myself) { + return this.verifyShield(robot); + } else { + return this.verifyShield(robot.target); } - return false; + } + + verifyShield(target) { + return target.shield.value / target.shield.valueMax <= this.shield; + } clearNodes() { diff --git a/Code/src/js/classes/Game.js b/Code/src/js/classes/Game.js index c754504..e07bb62 100644 --- a/Code/src/js/classes/Game.js +++ b/Code/src/js/classes/Game.js @@ -24,7 +24,7 @@ class Game extends Phaser.Scene { let robot = new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, WIDTH_MAP * 0.9, 0x6666ff, this.gm, 'myself'); - let condition = new RectangleNode(WIDTH_WINDOW / 1.7, 400, this, 'condition', robot, true, false, 1 / 3, 0); + let condition = new RectangleNode(WIDTH_WINDOW / 1.7, 400, this, 'condition', true, true, false, 1 / 3, 0); condition.addRect(new RectangleNode(WIDTH_WINDOW / 1.2, 600, this, 'move', false)); condition.addRect(new RectangleNode(WIDTH_WINDOW / 1.5, 600, this, 'attack')) this.tree.addRect(condition); @@ -157,7 +157,7 @@ class Game extends Phaser.Scene { clickPlus() { console.log("PLUS"); - this.father.scene.add('PlusNode', new PlusNode(this.father, this.selected)); + this.father.scene.add('PlusNode', new PlusNode(this.father, this, this.selected)); this.scene.launch('PlusNode'); diff --git a/Code/src/js/classes/PlusNode.js b/Code/src/js/classes/PlusNode.js index e9a9c69..5b16d7c 100644 --- a/Code/src/js/classes/PlusNode.js +++ b/Code/src/js/classes/PlusNode.js @@ -1,8 +1,11 @@ class PlusNode extends Phaser.Scene { - constructor(game, selected) { + constructor(father, game, selected) { super('PlusNode'); - this.game = game; + this.father = father; + this.gameR = game; this.selected = selected; + + console.log(this.gameR); } create() { @@ -46,18 +49,18 @@ class PlusNode extends Phaser.Scene { click(action) { switch (action.toString()) { case 'attack': - this.game.scene.add('AddNode', new AddAttack(this.game, this.selected)) + this.father.scene.add('AddNode', new AddAttack(this.father, this.gameR, this.selected)) break; case 'move': - this.game.scene.add('AddNode', new AddMove(this.game, this.selected)) + this.father.scene.add('AddNode', new AddMove(this.father, this.gameR, this.selected)) break; case 'condition': - this.game.scene.add('AddNode', new AddCondition(this.game, this.selected)) + this.father.scene.add('AddNode', new AddCondition(this.father, this.gameR, this.selected)) break; } this.scene.launch('AddNode'); this.scene.stop('PlusNode'); - this.game.scene.remove('PlusNode'); + this.father.scene.remove('PlusNode'); } createButton() { @@ -74,6 +77,6 @@ class PlusNode extends Phaser.Scene { cancel() { this.scene.resume('Game'); this.scene.stop('PlusNode'); - this.game.scene.remove('PlusNode'); + this.father.scene.remove('PlusNode'); } } \ No newline at end of file diff --git a/Code/src/js/classes/RectangleNode.js b/Code/src/js/classes/RectangleNode.js index b25e8ae..fcfd225 100644 --- a/Code/src/js/classes/RectangleNode.js +++ b/Code/src/js/classes/RectangleNode.js @@ -26,7 +26,7 @@ class RectangleNode { this.scene = scene; this.line = scene.add.graphics(); let line; - if (option[0].name.toString().toLowerCase() === 'myself') { + if (option[0]) { line = 0; } else { line = 1; @@ -93,6 +93,10 @@ class RectangleNode { return this.rect.x; } + getY() { + return this.rect.y; + } + addRect(node) { if (this.canAddNode === true) { this.lRect.push(node); diff --git a/Code/src/js/classes/Robot.js b/Code/src/js/classes/Robot.js index 0d3b893..bfdf2df 100644 --- a/Code/src/js/classes/Robot.js +++ b/Code/src/js/classes/Robot.js @@ -20,7 +20,7 @@ class Robot { this.lNode = []; - let condition = new Condition(this, true, false, 0.5, 0); + let condition = new Condition(true, true, false, 0.5, 0); condition.addNode(new Move(false)); this.addNode(condition); this.addNode(new Attack());