From 7cc554b7d3778ffdec4190f12b3a96b7cb462a78 Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Fri, 12 Jun 2020 01:10:37 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ations=20d'image=20pour=20les=20actions?= =?UTF-8?q?=20-=20cr=C3=A9ation=20de=20l'action=20condition=20-=20meilleur?= =?UTF-8?q?=20gestion=20des=20lignes=20entre=20les=20actions=20-=20Suppres?= =?UTF-8?q?sion=20de=20la=20page=20Tree=20(je=20l'ai=20regroup=C3=A9=20ave?= =?UTF-8?q?c=20RectangleNode)=20-=20Refonte=20complete=20sur=20la=20classe?= =?UTF-8?q?=20RectangleNode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/assets/nodes/attackNode.png | Bin 0 -> 4512 bytes Code/assets/nodes/conditionNode.png | Bin 0 -> 8023 bytes Code/assets/nodes/moveNode.png | Bin 0 -> 4715 bytes Code/public/js/app.min.js | 2 +- Code/public/js/class.min.js | 2 +- Code/src/js/Init.js | 1 + Code/src/js/classes/AttackRectangle.js | 28 ------- Code/src/js/classes/Boot.js | 3 + Code/src/js/classes/Condition.js | 4 + Code/src/js/classes/Game.js | 31 ++++++-- Code/src/js/classes/GamingBoard.js | 10 +-- Code/src/js/classes/MoveRectangle.js | 28 ------- Code/src/js/classes/RectangleNode.js | 98 +++++++++++++++++++++++++ Code/src/js/classes/Tree.js | 21 ------ 14 files changed, 138 insertions(+), 90 deletions(-) create mode 100644 Code/assets/nodes/attackNode.png create mode 100644 Code/assets/nodes/conditionNode.png create mode 100644 Code/assets/nodes/moveNode.png delete mode 100644 Code/src/js/classes/AttackRectangle.js delete mode 100644 Code/src/js/classes/MoveRectangle.js create mode 100644 Code/src/js/classes/RectangleNode.js delete mode 100644 Code/src/js/classes/Tree.js diff --git a/Code/assets/nodes/attackNode.png b/Code/assets/nodes/attackNode.png new file mode 100644 index 0000000000000000000000000000000000000000..33db8bf58df8a8b24d135222250395d384796984 GIT binary patch literal 4512 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 literal 0 HcmV?d00001 diff --git a/Code/assets/nodes/moveNode.png b/Code/assets/nodes/moveNode.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2364071c80bce49f03f19621fddc3065566c9d GIT binary patch literal 4715 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 NyU4{p&35(re*xufT_pej literal 0 HcmV?d00001 diff --git a/Code/public/js/app.min.js b/Code/public/js/app.min.js index bbe6588..751a78e 100644 --- a/Code/public/js/app.min.js +++ b/Code/public/js/app.min.js @@ -1 +1 @@ -const COLOR_ATTACK=16711680,COLOR_MOVE=255,WIDTH_WINDOW=$(document).width()-30,HEIGHT_WINDOW=$(document).height()-30,WIDTH_MAP=WIDTH_WINDOWt.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(t){t.setFrame(2),console.log("Play"),this.scene.start("Type")}}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.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t)),this.scene.launch("GamingBoard"),this.scene.pause("GamingBoard"),this.tree=new Tree(WIDTH_WINDOW/1.5,100,this),this.tree.addNode(new MoveRectangle(!0,WIDTH_WINDOW/1.2,400,100,100,this)),this.tree.addNode(new AttackRectangle(WIDTH_WINDOW/1.5,400,100,100,this)),this.input.on("drag",this.doDrag)}update(t,e){super.update(t,e),this.tree.updateLines()}doDrag(t,e,i,s){e.setX(i),e.setY(s)}clickPlay(t){t.setFrame(2),this.scene.isPaused("GamingBoard")?this.resume():this.scene.pause("GamingBoard")}resume(){this.tree.lNode.sort((t,e)=>t.getX()-e.getX()),this.gm.modifyNodes(this.tree.lNode),this.scene.resume("GamingBoard")}}class GamingBoard extends Phaser.Scene{constructor(){super("GamingBoard")}preload(){this.cameras.main.setViewport(WIDTH_WINDOW/10,HEIGHT_WINDOW/10,WIDTH_MAP,WIDTH_MAP)}create(){this.add.image(0,0,"background").alpha=.1,this.listRobot=[],this.listRobot.push(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,6711039,this)),this.listRobot.push(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,16724940,this)),this.listRobot.push(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,16777215,this));for(let t=0;tthis.resume())}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])}}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}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<.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 MoveRectangle extends Move{constructor(t,e,i,s,h,a){super(t),this.color=COLOR_MOVE,this.rect=new Phaser.GameObjects.Rectangle(a,e,i,s,h,this.color),this.line=a.add.graphics()}getX(){return this.rect.x}addLine(t,e){this.xOrigin=t,this.yOrigin=e,this.updateLine()}updateLine(){this.xLine===this.rect.x&&this.yLine===this.rect.y||(this.xLine=this.rect.x,this.yLine=this.rect.y,this.line.clear(),this.line.lineStyle(10,16777215,1),this.line.lineBetween(this.xOrigin,this.yOrigin,this.rect.x,this.rect.y))}}class Robot{constructor(t,e,i,s,h,a){this.height=t,this.width=e,this.x=i,this.y=s,this.color=h,this.range=WIDTH_MAP/2,this.damage=DAMAGE,this.life=new HealthBar(a,2*this.width,this.width/3,this.x,this.y-this.width,LIFE,32768),this.shield=new HealthBar(a,2*this.width,this.width/3,this.x,this.y-1.5*this.width,SHIELD,255),this.canAttack=!0,this.missile=new Missile(a,"bullet",this.width/5,this.width/4),a.add.existing(this.missile),this.addScene(a),this.lNode=[];let r=new Condition(this,!0,!1,.5,0);r.addNode(new Move(!1)),this.addNode(r),this.addNode(new Attack),this.addNode(new Move(!0))}addScene(t){this.scene=t,this.circle=this.scene.add.circle(this.x,this.y,this.width/2,this.color)}setX(t){this.x=t,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x)}setY(t){this.y=t,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y)}setTarget(t){this.target=t,this.updateTarget()}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(t,e){let i=this.target.x-this.x,s=this.target.y-this.y,h=Math.hypot(i,s);this.velocityX=i/h*WIDTH_MAP/1e3*SPEED,this.velocityY=s/h*WIDTH_MAP/1e3*SPEED}advanceToTarget(){return!!this.verifyTarget()&&(this.velocityX>=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.updateLine())}}class Type extends Phaser.Scene{constructor(){super("Type")}preload(){}create(){this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/4,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,1);let t=this.add.sprite(WIDTH_WINDOW/8*3,HEIGHT_WINDOW/4*2,"btn_duel").setInteractive();this.createbutton(t);let e=this.add.sprite(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/4*2,"btn_last").setInteractive();this.createbutton(e);let i=this.add.sprite(WIDTH_WINDOW/8*2,HEIGHT_WINDOW/4*3,"btn_team").setInteractive();this.createbutton(i);let s=this.add.sprite(WIDTH_WINDOW/8*4,HEIGHT_WINDOW/4*3,"btn_flag").setInteractive();this.createbutton(s);let h=this.add.sprite(WIDTH_WINDOW/8*6,HEIGHT_WINDOW/4*3,"btn_map").setInteractive();this.createbutton(h)}createbutton(t){t.displayHeight=HEIGHT_WINDOW/4,t.scaleX=t.scaleY,t.on("pointerout",()=>t.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 Attack{constructor(){}do(t){return!(!t.haveTarget()||!t.isTargetInRange())&&t.attackTarget()}}class Boot extends Phaser.Scene{constructor(){super("Boot")}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.load.spritesheet("btn_play","assets/btnPlay.png",{frameWidth:650,frameHeight:170}),this.load.spritesheet("btn_duel","assets/btnDuel.png",{frameWidth:269,frameHeight:262}),this.load.spritesheet("btn_last","assets/btnLast.png",{frameWidth:269,frameHeight:262}),this.load.spritesheet("btn_team","assets/btnTeam.png",{frameWidth:269,frameHeight:262}),this.load.spritesheet("btn_flag","assets/btnFlag.png",{frameWidth:269,frameHeight:262}),this.load.spritesheet("btn_map","assets/btnMap.png",{frameWidth:269,frameHeight:262}),this.load.image("background","assets/background.png"),this.load.image("bullet","assets/bullet.png"),this.load.image("logoWaria","assets/logoWaria.png"),this.load.image("attackN","assets/nodes/attackNode.png"),this.load.image("moveN","assets/nodes/moveNode.png"),this.load.image("conditionN","assets/nodes/conditionNode.png")}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,"btn_play").setInteractive();t.on("pointerout",()=>t.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t))}clickPlay(t){t.setFrame(2),console.log("Play"),this.scene.start("Type")}}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.setFrame(0)),t.on("pointerover",()=>t.setFrame(1)),t.on("pointerdown",()=>this.clickPlay(t)),this.scene.launch("GamingBoard"),this.scene.pause("GamingBoard"),this.tree=new RectangleNode(WIDTH_WINDOW/1.5,100,this,"waria"),this.tree.addRect(new RectangleNode(WIDTH_WINDOW/1.2,400,this,"move",!0)),this.tree.addRect(new RectangleNode(WIDTH_WINDOW/1.5,400,this,"attack"));let e=new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,6711039,this.gm),i=new RectangleNode(WIDTH_WINDOW/1.7,400,this,"condition",e,!0,!1,.5,0);i.addRect(new RectangleNode(WIDTH_WINDOW/1.2,600,this,"move",!1)),i.addRect(new RectangleNode(WIDTH_WINDOW/1.5,600,this,"attack")),this.tree.addRect(i),this.gm.addRobot(e),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,16724940,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,16777215,this.gm)),this.input.on("drag",this.doDrag)}update(t,e){super.update(t,e),this.tree.updateLine()}doDrag(t,e,i,s){e.setX(i),e.setY(s)}clickPlay(t){t.setFrame(2),this.scene.isPaused("GamingBoard")?this.resume():this.scene.pause("GamingBoard")}resume(){const t=(t,e)=>t.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")}}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())}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])}}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}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<.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 RectangleNode{constructor(t,e,i,s,...h){switch(s.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(i,t,e,"attackN"),this.node=new Attack,this.canAddNode=!1,this.line=i.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(i,t,e,"moveN"),this.node=new Move(h[0]),this.canAddNode=!1,this.line=i.add.graphics();break;case"condition":this.rect=new Phaser.GameObjects.Image(i,t,e,"conditionN"),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();break;case"waria":this.rect=new Phaser.GameObjects.Image(i,t,e,"logoWaria"),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.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_WINDOW/6,this.rect.scaleX=this.rect.scaleY}getX(){return this.rect.x}addRect(t){if(!0===this.canAddNode){this.lRect.push(t),this.addLine(t);let e=this.scene.add.existing(t.rect);e.setInteractive(),this.scene.input.setDraggable(e),void 0!==this.node&&this.node.addNode(t.node)}}setLine(t,e){this.xOrigin=t,this.yOrigin=e,this.updateLine(!0)}updateLine(t){!0!==t&&this.xLine===this.rect.x&&this.yLine===this.rect.y||void 0===this.line||(this.xLine=this.rect.x,this.yLine=this.rect.y,this.line.clear(),this.line.lineStyle(10,16777215,1),this.line.lineBetween(this.xOrigin,this.yOrigin,this.rect.x,this.rect.y+this.rect.displayHeight/10)),!0===this.canAddNode&&this.lRect.forEach(t=>this.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}}}class Robot{constructor(t,e,i,s,h,a){this.height=t,this.width=e,this.x=i,this.y=s,this.color=h,this.range=WIDTH_MAP/2,this.damage=DAMAGE,this.life=new HealthBar(a,2*this.width,this.width/3,this.x,this.y-this.width,LIFE,32768),this.shield=new HealthBar(a,2*this.width,this.width/3,this.x,this.y-1.5*this.width,SHIELD,255),this.canAttack=!0,this.missile=new Missile(a,"bullet",this.width/5,this.width/4),a.add.existing(this.missile),this.addScene(a),this.lNode=[];let r=new Condition(this,!0,!1,.5,0);r.addNode(new Move(!1)),this.addNode(r),this.addNode(new Attack),this.addNode(new Move(!0))}addScene(t){this.scene=t,this.circle=this.scene.add.circle(this.x,this.y,this.width/2,this.color)}setX(t){this.x=t,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x)}setY(t){this.y=t,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y)}setTarget(t){this.target=t,this.updateTarget()}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(t,e){let i=this.target.x-this.x,s=this.target.y-this.y,h=Math.hypot(i,s);this.velocityX=i/h*WIDTH_MAP/1e3*SPEED,this.velocityY=s/h*WIDTH_MAP/1e3*SPEED}advanceToTarget(){return!!this.verifyTarget()&&(this.velocityX>=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.updateLine())}getNodes(){let t=[];return this.lRect.forEach(function(e){void 0!==e.node&&t.push(e.node)}),t}}class Type extends Phaser.Scene{constructor(){super("Type")}preload(){}create(){this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/4,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,1);let t=this.add.sprite(WIDTH_WINDOW/8*3,HEIGHT_WINDOW/4*2,"btn_duel").setInteractive();this.createbutton(t);let e=this.add.sprite(WIDTH_WINDOW/8*5,HEIGHT_WINDOW/4*2,"btn_last").setInteractive();this.createbutton(e);let i=this.add.sprite(WIDTH_WINDOW/8*2,HEIGHT_WINDOW/4*3,"btn_team").setInteractive();this.createbutton(i);let s=this.add.sprite(WIDTH_WINDOW/8*4,HEIGHT_WINDOW/4*3,"btn_flag").setInteractive();this.createbutton(s);let h=this.add.sprite(WIDTH_WINDOW/8*6,HEIGHT_WINDOW/4*3,"btn_map").setInteractive();this.createbutton(h)}createbutton(t){t.displayHeight=HEIGHT_WINDOW/4,t.scaleX=t.scaleY,t.on("pointerout",()=>t.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/Init.js b/Code/src/js/Init.js index ea547d0..b1acf02 100644 --- a/Code/src/js/Init.js +++ b/Code/src/js/Init.js @@ -6,6 +6,7 @@ console.log(myself.height); const COLOR_ATTACK = 0xff0000; const COLOR_MOVE = 0x0000ff; +const COLOR_CONDITION = 0x0e0e0e; const WIDTH_WINDOW = $(document).width() - 30; const HEIGHT_WINDOW = $(document).height() - 30; const WIDTH_MAP = WIDTH_WINDOW < HEIGHT_WINDOW ? WIDTH_WINDOW * 0.8 : HEIGHT_WINDOW * 0.8; diff --git a/Code/src/js/classes/AttackRectangle.js b/Code/src/js/classes/AttackRectangle.js deleted file mode 100644 index e07db1e..0000000 --- a/Code/src/js/classes/AttackRectangle.js +++ /dev/null @@ -1,28 +0,0 @@ -class AttackRectangle extends Attack { - constructor(x, y, width, height, scene) { - super(); - this.color = COLOR_ATTACK; - this.rect = new Phaser.GameObjects.Rectangle(scene, x, y, width, height, this.color); - this.line = scene.add.graphics(); - } - - getX() { - return this.rect.x; - } - - addLine(x, y) { - this.xOrigin = x; - this.yOrigin = y; - this.updateLine(); - } - - updateLine() { - if (this.xLine !== this.rect.x || this.yLine !== this.rect.y) { - this.xLine = this.rect.x; - this.yLine = this.rect.y; - this.line.clear(); - this.line.lineStyle(10, 0xffffff, 1); - this.line.lineBetween(this.xOrigin, this.yOrigin, this.rect.x, this.rect.y); - } - } -} \ No newline at end of file diff --git a/Code/src/js/classes/Boot.js b/Code/src/js/classes/Boot.js index f207b5f..eae8cbf 100644 --- a/Code/src/js/classes/Boot.js +++ b/Code/src/js/classes/Boot.js @@ -33,6 +33,9 @@ class Boot extends Phaser.Scene { this.load.image('background', 'assets/background.png'); this.load.image('bullet', 'assets/bullet.png'); this.load.image('logoWaria', 'assets/logoWaria.png'); + this.load.image('attackN','assets/nodes/attackNode.png'); + this.load.image('moveN','assets/nodes/moveNode.png'); + this.load.image('conditionN','assets/nodes/conditionNode.png'); } create() { diff --git a/Code/src/js/classes/Condition.js b/Code/src/js/classes/Condition.js index ec25823..dd15106 100644 --- a/Code/src/js/classes/Condition.js +++ b/Code/src/js/classes/Condition.js @@ -49,6 +49,10 @@ class Condition { return false; } + clearNodes() { + this.lNode = []; + } + moveToward(robot) { return robot.advanceToTarget(); diff --git a/Code/src/js/classes/Game.js b/Code/src/js/classes/Game.js index 3ee48bd..1e3851e 100644 --- a/Code/src/js/classes/Game.js +++ b/Code/src/js/classes/Game.js @@ -19,15 +19,29 @@ class Game extends Phaser.Scene { btn.on('pointerdown', () => this.clickPlay(btn)); this.scene.launch('GamingBoard'); this.scene.pause('GamingBoard'); - this.tree = new Tree(WIDTH_WINDOW / 1.5, 100, this); - this.tree.addNode(new MoveRectangle(true, WIDTH_WINDOW/1.2, 400, 100, 100, this)) - this.tree.addNode(new AttackRectangle(WIDTH_WINDOW/1.5, 400, 100, 100, this)); + + + this.tree = new RectangleNode(WIDTH_WINDOW / 1.5, 100, this, 'waria'); + this.tree.addRect(new RectangleNode(WIDTH_WINDOW / 1.2, 400, this, 'move', true)) + this.tree.addRect(new RectangleNode(WIDTH_WINDOW / 1.5, 400, this, 'attack')); + + + let robot = new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, WIDTH_MAP * 0.9, 0x6666ff, this.gm); + let condition = new RectangleNode(WIDTH_WINDOW / 1.7, 400, this, 'condition', robot, true, false, 0.5, 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); + + this.gm.addRobot(robot); + this.gm.addRobot(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.2, WIDTH_MAP * 0.1, 0xff33cc, this.gm)); + this.gm.addRobot(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, 0xffffff, this.gm)); + this.input.on('drag', this.doDrag); } update(time, delta) { super.update(time, delta); - this.tree.updateLines(); + this.tree.updateLine(); } doDrag(pointer, target, dragX, dragY) { @@ -45,8 +59,13 @@ class Game extends Phaser.Scene { resume() { const sortDesc = (a, b) => a.getX() - b.getX(); - this.tree.lNode.sort(sortDesc); - this.gm.modifyNodes(this.tree.lNode); + this.tree.lRect.sort(sortDesc); + this.tree.lRect.forEach(function (element) { + if (element.lRect !== undefined) { + element.lRect.sort(sortDesc); + } + }) + this.gm.modifyNodes(this.tree.getNodes()); this.scene.resume('GamingBoard'); } } \ No newline at end of file diff --git a/Code/src/js/classes/GamingBoard.js b/Code/src/js/classes/GamingBoard.js index 433b26a..0635249 100644 --- a/Code/src/js/classes/GamingBoard.js +++ b/Code/src/js/classes/GamingBoard.js @@ -1,6 +1,7 @@ class GamingBoard extends Phaser.Scene { constructor() { super('GamingBoard'); + this.listRobot = []; } preload() { @@ -10,11 +11,6 @@ class GamingBoard extends Phaser.Scene { create() { this.add.image(0, 0, 'background').alpha = 0.1; - this.listRobot = []; - this.listRobot.push(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, WIDTH_MAP * 0.9, 0x6666ff, this)); - this.listRobot.push(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.2, WIDTH_MAP * 0.1, 0xff33cc, this)); - this.listRobot.push(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, 0xffffff, this)); - for (let i = 0; i < this.listRobot.length; i++) { this.chooseTarget(this.listRobot[i]); } @@ -46,6 +42,10 @@ class GamingBoard extends Phaser.Scene { resume() { } + addRobot(robot){ + this.listRobot.push(robot); + } + modifyNodes(lNodes) { this.listRobot[0].cleanNodes(); lNodes.forEach(element => this.listRobot[0].addNode(element)); diff --git a/Code/src/js/classes/MoveRectangle.js b/Code/src/js/classes/MoveRectangle.js deleted file mode 100644 index d6b6627..0000000 --- a/Code/src/js/classes/MoveRectangle.js +++ /dev/null @@ -1,28 +0,0 @@ -class MoveRectangle extends Move { - constructor(toward, x, y, width, height, scene) { - super(toward); - this.color = COLOR_MOVE; - this.rect = new Phaser.GameObjects.Rectangle(scene, x, y, width, height, this.color); - this.line = scene.add.graphics(); - } - - getX() { - return this.rect.x; - } - - addLine(x, y) { - this.xOrigin = x; - this.yOrigin = y; - this.updateLine(); - } - - updateLine() { - if (this.xLine !== this.rect.x || this.yLine !== this.rect.y) { - this.xLine = this.rect.x; - this.yLine = this.rect.y; - this.line.clear(); - this.line.lineStyle(10, 0xffffff, 1); - this.line.lineBetween(this.xOrigin, this.yOrigin, this.rect.x, this.rect.y); - } - } -} \ No newline at end of file diff --git a/Code/src/js/classes/RectangleNode.js b/Code/src/js/classes/RectangleNode.js new file mode 100644 index 0000000..82d00af --- /dev/null +++ b/Code/src/js/classes/RectangleNode.js @@ -0,0 +1,98 @@ +class RectangleNode { + constructor(x, y, scene, type, ...option) { + switch (type.toString().toLowerCase()) { + case 'attack': + this.rect = new Phaser.GameObjects.Image(scene, x, y, 'attackN'); + this.node = new Attack(); + this.canAddNode = false; + this.line = scene.add.graphics(); + break; + case 'move' : + this.rect = new Phaser.GameObjects.Image(scene, x, y, 'moveN'); + this.node = new Move(option[0]); + this.canAddNode = false; + this.line = scene.add.graphics(); + break; + case 'condition': + this.rect = new Phaser.GameObjects.Image(scene, x, y, 'conditionN'); + this.node = new Condition(option[0], option[1], option[2], option[3], option[4]); + this.canAddNode = true; + this.lRect = []; + this.scene = scene; + this.line = scene.add.graphics(); + break; + case 'waria': + this.rect = new Phaser.GameObjects.Image(scene, x, y, 'logoWaria'); + this.canAddNode = true; + this.lRect = []; + this.scene = scene; + this.scene.add.existing(this.rect); + break; + default: + console.log("Création d'un node echoué"); + return; + } + if (type.toString().toLowerCase() !== 'waria') { + } + this.rect.setOrigin(0.5, 0); + this.rect.displayHeight = HEIGHT_WINDOW / 6; + this.rect.scaleX = this.rect.scaleY; + } + + getX() { + return this.rect.x; + } + + addRect(node) { + if (this.canAddNode === true) { + this.lRect.push(node); + this.addLine(node); + let rect = this.scene.add.existing(node.rect); + rect.setInteractive(); + this.scene.input.setDraggable(rect); + if (this.node !== undefined) { + this.node.addNode(node.node); + } + } + } + + setLine(x, y) { + this.xOrigin = x; + this.yOrigin = y; + this.updateLine(true); + } + + updateLine(force) { + if ((force === true || this.xLine !== this.rect.x || this.yLine !== this.rect.y) && this.line !== undefined) { + this.xLine = this.rect.x; + this.yLine = this.rect.y; + this.line.clear(); + this.line.lineStyle(10, 0xffffff, 1); + this.line.lineBetween(this.xOrigin, this.yOrigin, this.rect.x, this.rect.y + this.rect.displayHeight / 10); + } + if (this.canAddNode === true) { + this.lRect.forEach(node => this.addLine(node)); + } + } + + addLine(node) { + node.setLine(this.rect.x, this.rect.y + this.rect.displayHeight * 0.9); + } + + getNodes() { + if (this.node === undefined) { + let lNodes = []; + this.lRect.forEach(function (element) { + if (element.node !== undefined) { + if (element.lRect !== undefined) { + element.node.clearNodes(); + element.lRect.forEach(rect => element.node.addNode(rect.node)); + } + lNodes.push(element.node); + } + }); + return lNodes; + } + + } +} \ No newline at end of file diff --git a/Code/src/js/classes/Tree.js b/Code/src/js/classes/Tree.js deleted file mode 100644 index 96c74d1..0000000 --- a/Code/src/js/classes/Tree.js +++ /dev/null @@ -1,21 +0,0 @@ -class Tree { - constructor(x, y, scene) { - this.lNode = []; - this.scene = scene; - this.head = this.scene.add.image(x, y, 'logoWaria').setOrigin(0.5, 0.5); - this.head.displayHeight = HEIGHT_WINDOW / 4; - this.head.scaleX = this.head.scaleY; - } - - addNode(node) { - this.lNode.push(node); - node.addLine(this.head.x, this.head.y + this.head.displayHeight / 2.2); - let rect = this.scene.add.existing(node.rect); - rect.setInteractive(); - this.scene.input.setDraggable(rect); - } - - updateLines() { - this.lNode.forEach(node => node.updateLine()); - } -} \ No newline at end of file