diff --git a/Code/assets/buttons/bin.png b/Code/assets/buttons/bin.png new file mode 100644 index 0000000..04fbb4f Binary files /dev/null and b/Code/assets/buttons/bin.png differ diff --git a/Code/assets/buttons/pencil.png b/Code/assets/buttons/pencil.png new file mode 100644 index 0000000..dd071f0 Binary files /dev/null and b/Code/assets/buttons/pencil.png differ diff --git a/Code/assets/buttons/plus.png b/Code/assets/buttons/plus.png new file mode 100644 index 0000000..c8d9500 Binary files /dev/null and b/Code/assets/buttons/plus.png differ diff --git a/Code/public/js/app.min.js b/Code/public/js/app.min.js index 751a78e..1f84513 100644 --- a/Code/public/js/app.min.js +++ b/Code/public/js/app.min.js @@ -1 +1 @@ -const COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,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;ethis.changeFrame(t,0)),t.on("pointerover",()=>this.changeFrame(t,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,"myself"),i=new RectangleNode(WIDTH_WINDOW/1.7,400,this,"condition",e,!0,!1,1/3,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,16711680,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,16711680,this.gm)),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.pauseScene(t))}update(t,e){super.update(t,e),this.tree.updateLine()}doDrag(t,e,i,s){e.setX(i),e.setY(s)}pauseScene(t){this.line=0,this.scene.pause("GamingBoard"),this.changeFrame(t,0)}clickPlay(t){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(),this.changeFrame(t,1)}changeFrame(t,e){t.setFrame(2*this.line+e)}resume(){this.line=1;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(),!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,"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(),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"),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,r="enemy"){this.name=r,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 o=new Condition(this,!0,!1,.5,0);o.addNode(new Move(!1)),this.addNode(o),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.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.spritesheet("play","assets/play.png",{frameWidth:100,frameHeight:100}),this.load.image("background","assets/background.png"),this.load.image("bullet","assets/bullet.png"),this.load.image("logoWaria","assets/logoWaria.png"),this.load.spritesheet("attackN","assets/nodes/attackNode.png",{frameWidth:180,frameHeight:190}),this.load.spritesheet("moveN","assets/nodes/moveNode.png",{frameWidth:180,frameHeight:190}),this.load.spritesheet("conditionN","assets/nodes/conditionNode.png",{frameWidth:180,frameHeight:190}),this.load.spritesheet("bin","assets/buttons/bin.png",{frameWidth:100,frameHeight:100}),this.load.spritesheet("plus","assets/buttons/plus.png",{frameWidth:100,frameHeight:100}),this.load.spritesheet("pencil","assets/buttons/pencil.png",{frameWidth:100,frameHeight:100})}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.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();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,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(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),h.on("pointerdown",()=>this.clickPlay(h)),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.changeFrame(this.plus,0)}}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(),!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,"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(),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 diff --git a/Code/src/js/Init.js b/Code/src/js/Init.js index b1acf02..fab8a46 100644 --- a/Code/src/js/Init.js +++ b/Code/src/js/Init.js @@ -7,8 +7,8 @@ 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_WINDOW = $(document).width() - 20; +const HEIGHT_WINDOW = $(document).height() - 20; const WIDTH_MAP = WIDTH_WINDOW < HEIGHT_WINDOW ? WIDTH_WINDOW * 0.8 : HEIGHT_WINDOW * 0.8; const SPEED = 2; const LIFE = 100; diff --git a/Code/src/js/classes/Boot.js b/Code/src/js/classes/Boot.js index cbd0040..64d6252 100644 --- a/Code/src/js/classes/Boot.js +++ b/Code/src/js/classes/Boot.js @@ -37,6 +37,10 @@ class Boot extends Phaser.Scene { this.load.spritesheet('attackN','assets/nodes/attackNode.png', {frameWidth: 180, frameHeight: 190}); this.load.spritesheet('moveN','assets/nodes/moveNode.png', {frameWidth: 180, frameHeight: 190}); this.load.spritesheet('conditionN','assets/nodes/conditionNode.png', {frameWidth: 180, frameHeight: 190}); + + this.load.spritesheet('bin', 'assets/buttons/bin.png', {frameWidth: 100, frameHeight: 100}); + this.load.spritesheet('plus', 'assets/buttons/plus.png', {frameWidth: 100, frameHeight: 100}); + this.load.spritesheet('pencil', 'assets/buttons/pencil.png', {frameWidth: 100, frameHeight: 100}); } create() { diff --git a/Code/src/js/classes/Game.js b/Code/src/js/classes/Game.js index 6cc81cb..e3851dd 100644 --- a/Code/src/js/classes/Game.js +++ b/Code/src/js/classes/Game.js @@ -10,15 +10,10 @@ class Game extends Phaser.Scene { } create() { - //this.add.image(0,0,'background').alpha = 0.1; + this.selected = null; + + this.createButton(); - let btn = this.add.sprite(WIDTH_MAP + WIDTH_WINDOW / 10, WIDTH_MAP + HEIGHT_WINDOW / 10 + 5, 'play').setOrigin(1, 0).setInteractive(); - this.line = 0; - btn.displayHeight = HEIGHT_WINDOW / 15; - btn.scaleX = btn.scaleY; - btn.on('pointerout', () => this.changeFrame(btn, 0)); - btn.on('pointerover', () => this.changeFrame(btn, 1)); - btn.on('pointerdown', () => this.clickPlay(btn)); this.scene.launch('GamingBoard'); this.scene.pause('GamingBoard'); @@ -37,9 +32,6 @@ class Game extends Phaser.Scene { 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, 0xff0000, this.gm)); this.gm.addRobot(new Robot(WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.1, WIDTH_MAP * 0.9, 0xff0000, this.gm)); - - this.input.on('drag', this.doDrag); - this.input.on('dragstart', () => this.pauseScene(btn)); } update(time, delta) { @@ -47,6 +39,28 @@ class Game extends Phaser.Scene { this.tree.updateLine(); } + + OK() { + this.pencil.setVisible(false); + this.bin.setVisible(false); + this.plus.setVisible(false); + if (this.selected != null) { + this.selected.deselect(); + } + this.selected = this.tree.getSelected(); + + if (this.selected == null) + return; + + if (this.selected !== this.tree) { + this.pencil.setVisible(true); + this.bin.setVisible(true); + } + if (this.selected.canAddNode) { + this.plus.setVisible(true); + } + } + doDrag(pointer, target, dragX, dragY) { target.setX(dragX); target.setY(dragY); @@ -58,14 +72,6 @@ class Game extends Phaser.Scene { this.changeFrame(btn, 0); } - clickPlay(btn) { - if (this.scene.isPaused('GamingBoard')) - this.resume(); - else - this.pauseScene(); - - this.changeFrame(btn, 1); - } changeFrame(btn, bonus) { btn.setFrame(this.line * 2 + bonus); @@ -83,4 +89,72 @@ class Game extends Phaser.Scene { this.gm.modifyNodes(this.tree.getNodes()); this.scene.resume('GamingBoard'); } + + createButton() { + let x = WIDTH_MAP + WIDTH_WINDOW / 10; + let y = WIDTH_MAP + HEIGHT_WINDOW / 10 + 5; + let diffX = (HEIGHT_WINDOW / 10); + let width = HEIGHT_WINDOW / 15; + let play = this.add.sprite(x, y, 'play').setOrigin(1, 0).setInteractive(); + + this.pencil = this.add.sprite(x - diffX, y, 'pencil').setOrigin(1, 0).setInteractive().setVisible(false); + this.bin = this.add.sprite(x - diffX * 2, y, 'bin').setOrigin(1, 0).setInteractive().setVisible(false); + this.plus = this.add.sprite(x - diffX * 3, y, 'plus').setOrigin(1, 0).setInteractive().setVisible(false); + + this.line = 0; + play.displayHeight = play.displayWidth = width; + this.pencil.displayHeight = this.pencil.displayWidth = width; + this.bin.displayHeight = this.bin.displayWidth = width; + this.plus.displayHeight = this.plus.displayWidth = width; + + this.creatBtnOutAndOver(play); + this.creatBtnOutAndOver(this.pencil); + this.creatBtnOutAndOver(this.bin); + this.creatBtnOutAndOver(this.plus); + + play.on('pointerdown', () => this.clickPlay(play)); + 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(play)); + } + + creatBtnOutAndOver(btn) { + btn.on('pointerout', () => this.changeFrame(btn, 0)); + btn.on('pointerover', () => this.changeFrame(btn, 1)); + } + + clickPlay(btn) { + if (this.scene.isPaused('GamingBoard')) + this.resume(); + else + this.pauseScene(btn); + + this.changeFrame(btn, 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.changeFrame(this.plus, 0); + } + + } \ No newline at end of file diff --git a/Code/src/js/classes/RectangleNode.js b/Code/src/js/classes/RectangleNode.js index bd75711..51de1da 100644 --- a/Code/src/js/classes/RectangleNode.js +++ b/Code/src/js/classes/RectangleNode.js @@ -41,7 +41,7 @@ class RectangleNode { this.rect.setFrame(line * 4 + shield); break; case 'waria': - this.rect = new Phaser.GameObjects.Image(scene, x, y, 'logoWaria'); + this.rect = new Phaser.GameObjects.Image(scene, x, y, 'logoWaria').setInteractive(); this.canAddNode = true; this.lRect = []; this.scene = scene; @@ -53,11 +53,42 @@ class RectangleNode { } if (type.toString().toLowerCase() !== 'waria') { } + this.rect.on('pointerdown', () => this.click()); this.rect.setOrigin(0.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 i = 0; i < this.lRect.length; i++) { + let rep = this.lRect[i].getSelected(); + if (rep != null) { + return rep; + } + } + } + return null; + } + + click() { + if (this.rect.isTinted) { + this.deselect(); + } else { + this.rect.tint = 0xEFD807; + } + if (this.canAddNode === true) { + console.log("MAIS"); + } + } + + deselect() { + this.rect.clearTint(); + } + getX() { return this.rect.x; } @@ -114,4 +145,28 @@ class RectangleNode { } } + + destroy() { + this.line.destroy(); + this.rect.destroy(); + if (this.lRect !== undefined) { + this.lRect.forEach(rect => rect.destroy()); + } + } + + delete(rect) { + let id = this.lRect.indexOf(rect); + if (id === -1) { + for (let i = 0; i < this.lRect.length; i++) { + if (this.lRect[i].canAddNode) + if (this.lRect[i].delete(rect)) + return true; + } + } else { + this.lRect.splice(id, 1); + rect.destroy(); + return true; + } + return false; + } } \ No newline at end of file diff --git a/Image/plus.png b/Image/plus.png new file mode 100644 index 0000000..e034ff2 Binary files /dev/null and b/Image/plus.png differ