From d451659c978f5f23931dba93d5de9dcb5f050e65 Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Mon, 22 Jun 2020 23:17:11 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20possibilit=C3=A9=20de=20chang?= =?UTF-8?q?er=20de=20langue=20sur=20la=20page=20de=20d=C3=A9marrage=20du?= =?UTF-8?q?=20jeux=20-=20Ajout=20de=20la=20fl=C3=A8che=20de=20retour=20sur?= =?UTF-8?q?=20le=20jeu=20pour=20revenir=20aux=20choix=20des=20types=20de?= =?UTF-8?q?=20jeux=20-=20Cr=C3=A9ation=20des=20cat=C3=A9gories=20lors=20de?= =?UTF-8?q?=20la=20cr=C3=A9ation=20d'une=20action=20dans=20le=20but=20de?= =?UTF-8?q?=20s=C3=A9lectionner=20les=20boutons=20:=20par=20exemple,=20on?= =?UTF-8?q?=20peut=20s=C3=A9lectionner=20les=20boutons=20avancer=20et=20en?= =?UTF-8?q?nemi.=20Alors=20que=20si=20le=20bouton=20avancer=20est=20s?= =?UTF-8?q?=C3=A9lectionn=C3=A9=20et=20qu'on=20clique=20sur=20reculer,=20l?= =?UTF-8?q?e=20bouton=20avancer=20va=20se=20d=C3=A9selectionner=20car=20il?= =?UTF-8?q?s=20appartiennt=20=C3=A0=20la=20meme=20categorie=20-=20Les=20bo?= =?UTF-8?q?utons=20s=C3=A9lectionn=C3=A9s=20apparaissent=20avec=20une=20te?= =?UTF-8?q?inte=20jaune.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/assets/en/buttons/back.png | Bin 0 -> 7531 bytes Code/assets/flags/en.png | Bin 0 -> 3140 bytes Code/assets/flags/fr.png | Bin 0 -> 1017 bytes Code/assets/fr/buttons/back.png | Bin 0 -> 7531 bytes Code/public/js/AddNode.js | 12 ++++- Code/public/js/app.min.js | 2 +- Code/public/js/class.min.js | 2 +- Code/src/js/Init.js | 12 ++--- Code/src/js/classes/AddCondition.js | 5 +- Code/src/js/classes/AddMove.js | 5 +- Code/src/js/classes/Boot.js | 67 +++++++++++++++++++++++---- Code/src/js/classes/Category.js | 23 +++++++++ Code/src/js/classes/Game.js | 19 ++++++-- Code/src/js/classes/RectangleNode.js | 2 +- 14 files changed, 122 insertions(+), 27 deletions(-) create mode 100644 Code/assets/en/buttons/back.png create mode 100644 Code/assets/flags/en.png create mode 100644 Code/assets/flags/fr.png create mode 100644 Code/assets/fr/buttons/back.png create mode 100644 Code/src/js/classes/Category.js diff --git a/Code/assets/en/buttons/back.png b/Code/assets/en/buttons/back.png new file mode 100644 index 0000000000000000000000000000000000000000..4886094dfe8a0da85f3d0b3484cc3537485921f9 GIT binary patch literal 7531 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 literal 0 HcmV?d00001 diff --git a/Code/assets/flags/en.png b/Code/assets/flags/en.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5a085a4dbebb5ffbc3c5ebc9ae3bbab0ac542d GIT binary patch literal 3140 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 literal 0 HcmV?d00001 diff --git a/Code/assets/flags/fr.png b/Code/assets/flags/fr.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ae3a1eed379e386b2f2d611643b4399b1d3709 GIT binary patch literal 1017 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 literal 0 HcmV?d00001 diff --git a/Code/public/js/AddNode.js b/Code/public/js/AddNode.js index b92c512..5ac3dc4 100644 --- a/Code/public/js/AddNode.js +++ b/Code/public/js/AddNode.js @@ -14,10 +14,12 @@ class AddNode extends Phaser.Scene { } - addButton(x, y, width, height, texture) { + addButton(x, y, width, height, texture, category = new Category()) { 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) { btn.scaleX = btn.scaleY; @@ -27,6 +29,14 @@ class AddNode extends Phaser.Scene { return btn; } + click(btn, category) { + if (btn.isTinted) { + category.remove(btn); + } else { + category.add(btn); + } + } + addTitle(x, y, title) { let sizeText = HEIGHT_WINDOW / 12; let style = {font: sizeText.toString() + 'px stencil', fill: "#e2e2e2"}; diff --git a/Code/public/js/app.min.js b/Code/public/js/app.min.js index ac2a412..4146eae 100644 --- a/Code/public/js/app.min.js +++ b/Code/public/js/app.min.js @@ -1 +1 @@ -function selectWord(e,a){switch(LANG){case"fr":return a;default:return e}}const LANG=navigator.language.substr(0,2).toLowerCase(),SHIELD_PER_SECOND=5,COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,WIDTH_WINDOW=$(document).width()-20,HEIGHT_WINDOW=$(document).height()-20,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")}loadSprite(t,e,i,s=""){this.load.spritesheet(t,"assets/"+LANG+"/"+s+t+".png",{frameWidth:e,frameHeight:i})}loadImage(t,e=""){this.load.image(t,"assets/"+LANG+"/"+e+t+".png")}}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.game.scene.add("PlusNode",new PlusNode(this.game,this.selected)),this.scene.launch("PlusNode"),this.changeFrame(this.plus,0),this.scene.pause("Game")}}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){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 diff --git a/Code/src/js/Init.js b/Code/src/js/Init.js index 6ad4c8f..9654bd2 100644 --- a/Code/src/js/Init.js +++ b/Code/src/js/Init.js @@ -7,7 +7,7 @@ function selectWord(en, fr) { } } -const LANG = navigator.language.substr(0, 2).toLowerCase(); +var LANG = navigator.language.substr(0, 2).toLowerCase(); const SHIELD_PER_SECOND = 5; const COLOR_ATTACK = 0xff0000; const COLOR_MOVE = 0x0000ff; @@ -30,9 +30,9 @@ var config = { backgroundColor: '#35363A', }; -var game = new Phaser.Game(config); +let father = new Phaser.Game(config); -game.scene.add('Boot', Boot); -game.scene.add('Type', Type); -game.scene.add('Game', new Game(game)); -game.scene.start('Boot'); +father.scene.add('Boot', new Boot(father)); +father.scene.add('Type', Type); +father.scene.add('Game', new Game(father)); +father.scene.start('Boot'); diff --git a/Code/src/js/classes/AddCondition.js b/Code/src/js/classes/AddCondition.js index d22e9a3..1e597ca 100644 --- a/Code/src/js/classes/AddCondition.js +++ b/Code/src/js/classes/AddCondition.js @@ -10,8 +10,9 @@ class AddCondition extends AddNode { console.log("CONDITION"); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / 16, selectWord("ADD NODE : CONDITION", "AJOUTER ACTION : CONDITION")); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 3), selectWord("WHO ?", "QUI ?")); - super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'enemyBot'); - super.addButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'myself'); + 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); } diff --git a/Code/src/js/classes/AddMove.js b/Code/src/js/classes/AddMove.js index 1f98bad..a063a99 100644 --- a/Code/src/js/classes/AddMove.js +++ b/Code/src/js/classes/AddMove.js @@ -7,10 +7,11 @@ class AddMove extends AddNode { create() { console.log("MOVE"); super.create(); + 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 ?")); - super.addButton(WIDTH_WINDOW / 6, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'fleeFrom'); - super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'moveToward'); + super.addButton(WIDTH_WINDOW / 6, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'fleeFrom', c1); + super.addButton(WIDTH_WINDOW / 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'moveToward', c1); super.addTitle(WIDTH_WINDOW / 4 * 3, HEIGHT_WINDOW / (16 / 3), selectWord("WHO ?", "QUI ?")); super.addButton(WIDTH_WINDOW / 4 * 3, HEIGHT_WINDOW / (16 / 5), null, HEIGHT_WINDOW / 8, 'enemyBot'); } diff --git a/Code/src/js/classes/Boot.js b/Code/src/js/classes/Boot.js index 65b23e1..d4d4393 100644 --- a/Code/src/js/classes/Boot.js +++ b/Code/src/js/classes/Boot.js @@ -1,6 +1,7 @@ class Boot extends Phaser.Scene { - constructor() { + constructor(father) { super('Boot'); + this.father = father; } preload() { @@ -23,6 +24,9 @@ class Boot extends Phaser.Scene { progressBox.destroy(); }); + this.loadImage('en', 'flags/', true); + this.loadImage('fr', 'flags/', true); + this.loadSprite('playLetter', 550, 150, 'buttons/'); this.loadSprite('cancel', 550, 150, 'buttons/'); this.loadSprite('add', 550, 150, 'buttons/'); @@ -31,12 +35,13 @@ class Boot extends Phaser.Scene { 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/'); @@ -74,6 +79,31 @@ class Boot extends Phaser.Scene { btn.on('pointerout', () => btn.setFrame(0)); btn.on('pointerover', () => btn.setFrame(1)); btn.on('pointerdown', () => this.clickPlay(btn)); + + this.createFlags(); + } + + createFlags() { + this.diffXFlag = 0; + this.createFlag('fr'); + this.createFlag('en'); + } + + createFlag(name) { + let flag = this.add.image(WIDTH_WINDOW - 10 - this.diffXFlag, 10, name).setOrigin(1, 0).setInteractive(); + flag.displayHeight = 40; + flag.scaleX = flag.scaleY; + this.diffXFlag = this.diffXFlag + flag.displayWidth + 10; + flag.on('pointerdown', () => this.setLang(name)); + } + + setLang(lang) { + if (lang !== LANG) { + LANG = lang; + console.log('Set Lang : ' + lang); + + this.scene.restart(); + } } clickPlay(btn) { @@ -82,14 +112,33 @@ class Boot extends Phaser.Scene { this.scene.start('Type'); } - loadSprite(name, width, height, folder = '') { - this.load.spritesheet(name, 'assets/' + LANG + '/' + folder + name + '.png', { - frameWidth: width, - frameHeight: height - }); + loadSprite(name, width, height, folder = '', force = false) { + this.deleteLoad(name); + if (force) { + this.load.spritesheet(name, 'assets/' + folder + name + '.png', { + frameWidth: width, + frameHeight: height + }); + } else { + this.load.spritesheet(name, 'assets/' + LANG + '/' + folder + name + '.png', { + frameWidth: width, + frameHeight: height + }); + } + } + + loadImage(name, folder = '', force = false) { + this.deleteLoad(name); + if (force) { + this.load.image(name, 'assets/' + folder + name + '.png'); + } else { + this.load.image(name, 'assets/' + LANG + '/' + folder + name + '.png'); + } } - loadImage(name, folder = '') { - this.load.image(name, 'assets/' + LANG + '/' + folder + name + '.png'); + deleteLoad(name) { + if (this.textures.exists(name)) { + this.textures.remove(name); + } } } \ No newline at end of file diff --git a/Code/src/js/classes/Category.js b/Code/src/js/classes/Category.js new file mode 100644 index 0000000..ce666af --- /dev/null +++ b/Code/src/js/classes/Category.js @@ -0,0 +1,23 @@ +class Category { + constructor(name = 'undefined', single = true) { + this.name = name; + this.single = single; + this.lBtn = []; + } + + add(btn) { + if (this.lBtn.length !== 0 && this.single) { + this.lBtn[0].clearTint(); + this.lBtn = []; + } + this.lBtn.push(btn); + btn.tint = 0xEFD807; + } + + remove(btn) { + if (this.lBtn.indexOf(btn) !== -1) { + this.lBtn.splice(this.lBtn.indexOf(btn), 1); + } + btn.clearTint(); + } +} \ No newline at end of file diff --git a/Code/src/js/classes/Game.js b/Code/src/js/classes/Game.js index fb0ab86..c754504 100644 --- a/Code/src/js/classes/Game.js +++ b/Code/src/js/classes/Game.js @@ -1,12 +1,12 @@ class Game extends Phaser.Scene { - constructor(game) { + constructor(father) { super('Game'); - this.game = game; + this.father = father; } preload() { this.gm = new GamingBoard(); - this.game.scene.add('GamingBoard', this.gm); + this.father.scene.add('GamingBoard', this.gm); } create() { @@ -96,6 +96,7 @@ class Game extends Phaser.Scene { let diffX = (HEIGHT_WINDOW / 10); let width = HEIGHT_WINDOW / 15; let play = this.add.sprite(x, y, 'play').setOrigin(1, 0).setInteractive(); + let back = this.add.sprite(10, 10, 'back').setOrigin(0, 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); @@ -103,16 +104,19 @@ class Game extends Phaser.Scene { this.line = 0; play.displayHeight = play.displayWidth = width; + back.displayHeight = back.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(back); this.creatBtnOutAndOver(this.pencil); this.creatBtnOutAndOver(this.bin); this.creatBtnOutAndOver(this.plus); play.on('pointerdown', () => this.clickPlay(play)); + back.on('pointerdown', () => this.clickBack()); this.pencil.on('pointerdown', () => this.clickPencil()); this.bin.on('pointerdown', () => this.clickBin()); this.plus.on('pointerdown', () => this.clickPlus()); @@ -153,7 +157,7 @@ class Game extends Phaser.Scene { clickPlus() { console.log("PLUS"); - this.game.scene.add('PlusNode', new PlusNode(this.game, this.selected)); + this.father.scene.add('PlusNode', new PlusNode(this.father, this.selected)); this.scene.launch('PlusNode'); @@ -162,5 +166,12 @@ class Game extends Phaser.Scene { 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'); + } } \ No newline at end of file diff --git a/Code/src/js/classes/RectangleNode.js b/Code/src/js/classes/RectangleNode.js index e123295..b25e8ae 100644 --- a/Code/src/js/classes/RectangleNode.js +++ b/Code/src/js/classes/RectangleNode.js @@ -81,7 +81,7 @@ class RectangleNode { this.rect.tint = 0xEFD807; } if (this.canAddNode === true) { - console.log("MAIS"); + console.log("THIS CAN ADD NODE"); } }