From b10f8d90695cc14f3db2aff139d7b8f4c22bff91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Sun, 5 Apr 2020 16:20:53 +0200 Subject: [PATCH 1/6] Loading first sprite --- .../resources/characters/pipoya/Male 01-1.png | Bin 0 -> 3488 bytes front/src/GameScene.ts | 39 ++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 front/dist/resources/characters/pipoya/Male 01-1.png diff --git a/front/dist/resources/characters/pipoya/Male 01-1.png b/front/dist/resources/characters/pipoya/Male 01-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c12b28e9b1821c5dbad942c1d951c950ea6707 GIT binary patch literal 3488 zcmW-kc{tSF8^+JfFf(>)L>NX{voB#3O*08m*es-!UER;}#Bm48(7b!oe^@ijx26_iAJM*u@>pyb62%A{K3B4HJi+;^Gv7X) zQIQOE3PwJ{QRJO6`o%u(9Vh4O46}=4>pe=W?#L$Ug~;hIJ#KfC&;M8$$qwy_?CF}T z|8YdG9VTCsVhZoSsI>!S#eum){Hge#joi$vC3ni46*T;DY zRseUzhl1w$eEQnWL_UZHD7F%*`bZx=K`M!qCfp4#K!IPkyr1Q)OtVARixGL%z2A87 zPe@u^Lj-en`zT+?#;?GtUXSRgqwM`L!NvoOfx?2Kt!`M~7knmP;?khcqtWe@ux31R zvl!O52c%(m$MQX!s0u$S^4nhL+b#3x8a2@6OWv zPkMQ7l-Im5hz87_yv>gvKUUxDZKA|(f6NSCle-#Mr_361)#a&q(S!%3sIZr7?`OTK zB66lO!%bVQPUSK6!K~p>Zo}v5-|5}lpO@nFK-dAF^@xVJE0Q;r<2FXto0silQ~ZPC zBtSvlezL7kQ0&f>_P(>GjilA)MVa-oxnN-sHV|mKUto5$bIMY*%GPk&{3VSma!<=s z6AnGUyKJRCk^f**cVEEAhy2n0^bIb<IkR`kpeAS?z7wTU~o?SD?OEhj@RrlKwK5II>wemxr_1)!aK>N^5 zA@KQ_G7#)-HDuHoi?h|3*$gvQ_2Cks(Jh;`tSZT z7=Qte`B+i!Ch^t~N9{UHo1XOnI&gNE3|8!?e9~(b>-LvMx)_=_n{cjsAk3#Y>jH=t=nyZsc(x+FAI9})^7_BphOA4j1MPdhl3;WYQ+5pu_8b> z?~xV?lnY?Bb-cXH-*1%I6HV8M!U+sefU{ZL|HbSzgW9iXLW+7|7Woq}^TG1M=O zYDsoF)(*3exCpW|tfnu*|_&V%4KtDg+YOL0LeL-oL2ZCzC zDT!ti-!fnO7Aha)0TwCut+L;I?rBu1M+p(#YP5Z&A)bZLhq4&&esh;<3 z`d9ke3~z@UB>@f`D4I3nYW#TDe(9BrThIU~NPW_GAcuz#0J2DY#X9IJ>jb!o4EaiJ zyB|_P(Y!Qs>olxSZjcaT$8WSsjxt^#ZeJm4ahkUefXY2jg%?#u)mi*`ALU`o_8xq$ z!=8db4G$=o%QO*#5DipK)iG%xYgl-qG=}XKy{iWM^>yI+Kf_da;#7R&{uO=&N)Um> z)Xb*I>Ak!U+Pwg9tU8nWN?7Imj?U?hmiu6FR`S##wERUQpM#3m1rVY^F~>Jv2?oGN z@i-K^!}gp}$ymc1C^r;q^EOs9$3giqfb<~NH)kI}UwDw)>`%h<3xj$jb*QqhrpU`k8@&CO zWPE2Dvco|KDlGS$a`8cB2qxHo%Q%9FQDKR!AY^XObFi-8NAh83wI;5uKLnaW`)iTY z4(*M(xq1=_WxocVR6=)W`rpe1i7RU7g-~Q+@^rv?H;QJ5Z0gJNpny;Cpo$lztX4jk zf)}eSMp%FAU&;_EcqNAB5hR&mp(Wu4idz5V#WPI#tJ({pjX=gmDkjg*St)f&NZYLG zx~43zOzO;ko~IX02>K#rHNu7XV1DUX#j@0E+j!H`FitOw@z!1J z*y6yXYP|>~3vAMg#R`bC(Zq=P&7{8&1ri|Z%4nI#yPfzC;sGL`w~N7>%DX0SDYyRL zRR%<91$B+*Gc(WUeh33!oYsi7y!kapt|2c|+M5(}H7v^Gq(`{L{@XdoT{Bz_O1PIi zZC3q+c4v*l#@G9mN&yDY-VSx8C8Ju7XZxK>@Dk0qD2s?y+jUYVPMaZ}Z({tiJ)wn> z(Q5BH%-Y?AS(B>6fmS;av^##r_}FU8{R#K~aDm$y&>46XPqk_%p=fdfvDLewLSNcP z17z8ixXT8u{5&}HYx~18UfADvXCIgfDHmcsKoDrY>)&?8W!J%DB}-IG|4i6oSYObI ztZPm4zk5C`lhxYaa=A$^-LX@bpTPsbC?0C}ym078hs1ZI)qgUZ#FW;)bJa4>DHjZZ z%cA}X()@ZE)3o&4nPsCD7n^jmOxOX4Q9NPho0b3g(=-u0S$xBAxo39iYXH0;8t@2O zS?~0Rn^?9kT7h?(Z z2b)dxu(mV*I@>kY#9$ZF1?UoJ#W|>$qY*H;I9wwd!rY<#_F0$v@PS+#ev=~mTGLwQ#@`0 z%Jsx5niot>RG5G>WVb2=GZbJ(k3zY(Fp^0t2|9EdV(v(B>xz+^_t>SgA`u3t#1X4O zP2UfEbz${WD1U_vx8q+w@eN zl$5BO-c*GF8R8|wKOyV3r1UwW2OqtNGjiScOAMt;tG9we}{5 z-xwhjqW-*nZFcLDvBuyNIlL9Z4Q&nKv0+5ua0N{`@w`EWTvEP53 zw}RsylghU=L07)#IOG84m{lEQ-xa%G4T`BAZ2YIwlQZfZav`8aED&*GJ6f5 z6(PGedpL!sbG3X)rsD71XS;!b|K&ZqOe}CNz9(c`SV%R}i$B~>DSBMpbw}xdaNl2F zL&FKKf%(&64AjV7PO9jo%vuLCov-!n0BSrR)T)b4OVgY$?P?^Ul(X6L#!nHY*Z?hB zcws3Ad#MkuF4^Rd%7XJV^TvD{P{3X~%6GVEnT}z+Ymbx}o%c&u%b6dr>~V&8Q3U;D zUh4|%L(NF)p1RWknSo-rJ?l=0(aL(pR((b`PC0zTzS<+GQQK8Hb#44dU;-Wth754|+_Lj(DnvOQKb49puk0*pVBebwWae z)ayd(8~Ku6q~Etoy6uMQ>g0OBy|9&U($WJ*K0V1o5VPa$H=?5MI;A3tKiECt?y-Uq zBN?OmW$9&w*doVJC=&ZSQ6>3CSDW=uf^1|cw~}uQCRz3T8Nxw6*dHCvu%q&6AM;#! zQNyV|JjYF8OGVW4&nO}JEi3^sSXI`r=|VZv0r-#O462=nxN)HmD-rY;{Uy literal 0 HcmV?d00001 diff --git a/front/src/GameScene.ts b/front/src/GameScene.ts index 9a432449..b8723574 100644 --- a/front/src/GameScene.ts +++ b/front/src/GameScene.ts @@ -10,6 +10,10 @@ export class GameScene extends Phaser.Scene { preload(): void { this.load.image('tiles', 'maps/tiles.png'); this.load.tilemapTiledJSON('map', 'maps/map2.json'); + this.load.spritesheet('player', + 'resources/characters/pipoya/Male 01-1.png', + { frameWidth: 32, frameHeight: 32 } + ); } init(): void { @@ -22,6 +26,41 @@ export class GameScene extends Phaser.Scene { let bottomLayer = mappy.createStaticLayer("Calque 1", [terrain], 0, 0); let topLayer = mappy.createStaticLayer("Calque 2", [terrain], 0, 0); + // Let's manage animations of the player + this.anims.create({ + key: 'down', + frames: this.anims.generateFrameNumbers('player', { start: 0, end: 3 }), + frameRate: 10, + repeat: -1 + }); + + this.anims.create({ + key: 'left', + frames: this.anims.generateFrameNumbers('player', { start: 4, end: 8 }), + frameRate: 10, + repeat: -1 + }); + + this.anims.create({ + key: 'right', + frames: this.anims.generateFrameNumbers('player', { start: 9, end: 12 }), + frameRate: 10, + repeat: -1 + }); + + this.anims.create({ + key: 'up', + frames: this.anims.generateFrameNumbers('player', { start: 13, end: 16 }), + frameRate: 10, + repeat: -1 + }); + + //let player = this.add.sprite(450, 450, 'player'); + //player.anims.play('down'); + //player.setBounce(0.2); + //player.setCollideWorldBounds(true); + + } private angle: number = 0; From ded19549c78433463710f8dbbf8d0cfde9d9d3de Mon Sep 17 00:00:00 2001 From: kharhamel Date: Mon, 6 Apr 2020 15:48:19 +0200 Subject: [PATCH 2/6] added jasmine in the back --- .github/workflows/continuous_integration.yml | 4 +++ back/jasmine.json | 5 ++++ back/package.json | 5 +++- back/src/Model/Websocket/ExtRoom.ts | 10 +++---- back/src/Model/Websocket/Message.ts | 2 +- back/tests/MessageTest.ts | 31 ++++++++++++++++++++ back/yarn.lock | 20 ++++++++++++- 7 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 back/jasmine.json create mode 100644 back/tests/MessageTest.ts diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index f6f0ad7e..302e50b7 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -61,3 +61,7 @@ jobs: - name: "Lint" run: yarn run lint working-directory: "back" + + - name: "Jasmine" + run: yarn test + working-directory: "back" diff --git a/back/jasmine.json b/back/jasmine.json new file mode 100644 index 00000000..b51ed79d --- /dev/null +++ b/back/jasmine.json @@ -0,0 +1,5 @@ +{ + "spec_dir": "tests", + "spec_files": ["**/*[tT]est.ts"], + "stopSpecOnExpectationFailure": false +} \ No newline at end of file diff --git a/back/package.json b/back/package.json index 97d28968..4fe7681d 100644 --- a/back/package.json +++ b/back/package.json @@ -7,6 +7,7 @@ "tsc": "tsc", "dev": "ts-node-dev --respawn --transpileOnly ./server.ts", "prod": "tsc && node ./dist/server.js", + "test": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine.json", "lint": "node_modules/.bin/eslint src/ . --ext .ts" }, "repository": { @@ -33,8 +34,10 @@ "typescript": "^3.8.3" }, "devDependencies": { + "@types/jasmine": "^3.5.10", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", - "eslint": "^6.8.0" + "eslint": "^6.8.0", + "jasmine": "^3.5.0" } } diff --git a/back/src/Model/Websocket/ExtRoom.ts b/back/src/Model/Websocket/ExtRoom.ts index 03eb5e33..0cbe2f61 100644 --- a/back/src/Model/Websocket/ExtRoom.ts +++ b/back/src/Model/Websocket/ExtRoom.ts @@ -16,14 +16,14 @@ let RefreshUserPositionFunction = function(rooms : ExtRooms, Io: socketIO.Server //create mapping with all users in all rooms let mapPositionUserByRoom = new Map(); for(let i = 0; i < socketsKey.length; i++){ - let socket = clients.sockets[socketsKey[i]]; - if(!(socket as ExSocketInterface).position){ + let socket = clients.sockets[socketsKey[i]] as ExSocketInterface; + if(!socket.position){ continue; } let data = { - userId : (socket as ExSocketInterface).userId, - roomId : (socket as ExSocketInterface).roomId, - position : (socket as ExSocketInterface).position, + userId : socket.userId, + roomId : socket.roomId, + position : socket.position, }; let dataArray = []; if(mapPositionUserByRoom.get(data.roomId)){ diff --git a/back/src/Model/Websocket/Message.ts b/back/src/Model/Websocket/Message.ts index 3a53163f..8e6f2c9a 100644 --- a/back/src/Model/Websocket/Message.ts +++ b/back/src/Model/Websocket/Message.ts @@ -5,7 +5,7 @@ export class Message { constructor(message: string) { let data = JSON.parse(message); if(!data.userId || !data.roomId){ - throw Error("userId and roomId cannot be null"); + throw Error("userId or roomId cannot be null"); } this.userId = data.userId; this.roomId = data.roomId; diff --git a/back/tests/MessageTest.ts b/back/tests/MessageTest.ts new file mode 100644 index 00000000..69d57fce --- /dev/null +++ b/back/tests/MessageTest.ts @@ -0,0 +1,31 @@ +import "jasmine"; +import {Message} from "../src/Model/Websocket/Message"; + +describe("Message Model", () => { + it("should find userId and roomId", () => { + let message = JSON.stringify({userId: "test1", roomId: "test2"}); + let messageObject = new Message(message); + expect(messageObject.userId).toBe("test1"); + expect(messageObject.roomId).toBe("test2"); + }) + + it("should expose a toJson method", () => { + let message = JSON.stringify({userId: "test1", roomId: "test2"}); + let messageObject = new Message(message); + expect(messageObject.toJson()).toEqual({userId: "test1", roomId: "test2"}); + }) + + it("should find throw error when no userId", () => { + let message = JSON.stringify({roomId: "test2"}); + expect(() => { + let messageObject = new Message(message); + }).toThrow(new Error("userId or roomId cannot be null")); + }) + + it("should find throw error when no roomId", () => { + let message = JSON.stringify({userId: "test1"}); + expect(() => { + let messageObject = new Message(message); + }).toThrow(new Error("userId or roomId cannot be null")); + }) +}) \ No newline at end of file diff --git a/back/yarn.lock b/back/yarn.lock index 7ba7fbdc..27f4503e 100644 --- a/back/yarn.lock +++ b/back/yarn.lock @@ -73,6 +73,11 @@ dependencies: http-status-codes "*" +"@types/jasmine@^3.5.10": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.10.tgz#a1a41012012b5da9d4b205ba9eba58f6cce2ab7b" + integrity sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew== + "@types/json-schema@^7.0.3": version "7.0.4" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" @@ -915,7 +920,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob@^7.1.3, glob@^7.1.6: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1134,6 +1139,19 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +jasmine-core@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== + +jasmine@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" + integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== + dependencies: + glob "^7.1.4" + jasmine-core "~3.5.0" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" From 7146decb5ba3e9e594dee80d68af1321ed127bc9 Mon Sep 17 00:00:00 2001 From: kharhamel Date: Mon, 6 Apr 2020 16:52:18 +0200 Subject: [PATCH 3/6] added code to freely move the camera using the arrow keys or z,q,s,d --- front/src/GameScene.ts | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/front/src/GameScene.ts b/front/src/GameScene.ts index 9a432449..ac38b222 100644 --- a/front/src/GameScene.ts +++ b/front/src/GameScene.ts @@ -1,5 +1,13 @@ export class GameScene extends Phaser.Scene { + private keyZ: Phaser.Input.Keyboard.Key; + private keyQ: Phaser.Input.Keyboard.Key; + private keyS: Phaser.Input.Keyboard.Key; + private keyD: Phaser.Input.Keyboard.Key; + private keyRight: Phaser.Input.Keyboard.Key; + private keyLeft: Phaser.Input.Keyboard.Key; + private keyUp: Phaser.Input.Keyboard.Key; + private keyDown: Phaser.Input.Keyboard.Key; constructor() { super({ @@ -13,6 +21,20 @@ export class GameScene extends Phaser.Scene { } init(): void { + this.keyZ = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z); + this.keyQ = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q); + this.keyS = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S); + this.keyD = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.D); + + this.keyUp = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP); + this.keyLeft = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT); + this.keyDown = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN); + this.keyRight = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT); + } + + private moveCamera(x:number, y:number): void { + this.cameras.main.scrollX += 2 * x; + this.cameras.main.scrollY += 2 * y; } create(): void { @@ -27,9 +49,23 @@ export class GameScene extends Phaser.Scene { private angle: number = 0; update(dt: number): void { - this.cameras.main.scrollX = Math.floor(300 + 300 * Math.cos(this.angle)); + + if (this.keyZ.isDown || this.keyUp.isDown) { + this.moveCamera(0, -1); + } + if (this.keyQ.isDown || this.keyLeft.isDown) { + this.moveCamera(-1, 0); + } + if (this.keyS.isDown || this.keyDown.isDown) { + this.moveCamera(0, 1); + } + if (this.keyD.isDown || this.keyRight.isDown) { + this.moveCamera(1, 0); + } + + /*this.cameras.main.scrollX = Math.floor(300 + 300 * Math.cos(this.angle)); this.cameras.main.scrollY = Math.floor(300 + 300 * Math.sin(this.angle)); - this.angle = dt * 0.0001; + this.angle = dt * 0.0001;*/ } } From d0c09ecd4fbd31893db65c14418334f75956be7a Mon Sep 17 00:00:00 2001 From: kharhamel Date: Mon, 6 Apr 2020 16:59:14 +0200 Subject: [PATCH 4/6] added a way do speed up the camera movement --- front/src/GameScene.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/front/src/GameScene.ts b/front/src/GameScene.ts index ac38b222..fb510627 100644 --- a/front/src/GameScene.ts +++ b/front/src/GameScene.ts @@ -8,6 +8,7 @@ export class GameScene extends Phaser.Scene { private keyLeft: Phaser.Input.Keyboard.Key; private keyUp: Phaser.Input.Keyboard.Key; private keyDown: Phaser.Input.Keyboard.Key; + private keyShift: Phaser.Input.Keyboard.Key; constructor() { super({ @@ -21,6 +22,8 @@ export class GameScene extends Phaser.Scene { } init(): void { + this.keyShift = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.SHIFT); + this.keyZ = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z); this.keyQ = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Q); this.keyS = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.S); @@ -32,9 +35,9 @@ export class GameScene extends Phaser.Scene { this.keyRight = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT); } - private moveCamera(x:number, y:number): void { - this.cameras.main.scrollX += 2 * x; - this.cameras.main.scrollY += 2 * y; + private moveCamera(x:number, y:number, speedMultiplier: number): void { + this.cameras.main.scrollX += speedMultiplier * 2 * x; + this.cameras.main.scrollY += speedMultiplier * 2 * y; } create(): void { @@ -49,18 +52,20 @@ export class GameScene extends Phaser.Scene { private angle: number = 0; update(dt: number): void { + let speedMultiplier = this.keyShift.isDown ? 5 : 1; + if (this.keyZ.isDown || this.keyUp.isDown) { - this.moveCamera(0, -1); + this.moveCamera(0, -1, speedMultiplier); } if (this.keyQ.isDown || this.keyLeft.isDown) { - this.moveCamera(-1, 0); + this.moveCamera(-1, 0, speedMultiplier); } if (this.keyS.isDown || this.keyDown.isDown) { - this.moveCamera(0, 1); + this.moveCamera(0, 1, speedMultiplier); } if (this.keyD.isDown || this.keyRight.isDown) { - this.moveCamera(1, 0); + this.moveCamera(1, 0, speedMultiplier); } /*this.cameras.main.scrollX = Math.floor(300 + 300 * Math.cos(this.angle)); From 619f7a6bf618702075cfc3b3da74d4368ce1bb3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 6 Apr 2020 17:59:35 +0200 Subject: [PATCH 5/6] Fixing CI file --- .github/workflows/continuous_integration.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index 302e50b7..6e6745e4 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -63,5 +63,5 @@ jobs: working-directory: "back" - name: "Jasmine" - run: yarn test - working-directory: "back" + run: yarn test + working-directory: "back" From 406b299f914b1a6f924e0f36148b8146de4be84b Mon Sep 17 00:00:00 2001 From: kharhamel Date: Mon, 6 Apr 2020 19:43:10 +0200 Subject: [PATCH 6/6] allow player movement with proper animation --- front/src/GameScene.ts | 43 +++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/front/src/GameScene.ts b/front/src/GameScene.ts index 114fb918..2567a1fb 100644 --- a/front/src/GameScene.ts +++ b/front/src/GameScene.ts @@ -1,5 +1,7 @@ export class GameScene extends Phaser.Scene { + private player: Phaser.GameObjects.Sprite; + private keyZ: Phaser.Input.Keyboard.Key; private keyQ: Phaser.Input.Keyboard.Key; private keyS: Phaser.Input.Keyboard.Key; @@ -54,28 +56,28 @@ export class GameScene extends Phaser.Scene { // Let's manage animations of the player this.anims.create({ key: 'down', - frames: this.anims.generateFrameNumbers('player', { start: 0, end: 3 }), + frames: this.anims.generateFrameNumbers('player', { start: 0, end: 2 }), frameRate: 10, repeat: -1 }); this.anims.create({ key: 'left', - frames: this.anims.generateFrameNumbers('player', { start: 4, end: 8 }), + frames: this.anims.generateFrameNumbers('player', { start: 3, end: 5 }), frameRate: 10, repeat: -1 }); this.anims.create({ key: 'right', - frames: this.anims.generateFrameNumbers('player', { start: 9, end: 12 }), + frames: this.anims.generateFrameNumbers('player', { start: 6, end: 8 }), frameRate: 10, repeat: -1 }); this.anims.create({ key: 'up', - frames: this.anims.generateFrameNumbers('player', { start: 13, end: 16 }), + frames: this.anims.generateFrameNumbers('player', { start: 9, end: 11 }), frameRate: 10, repeat: -1 }); @@ -84,7 +86,7 @@ export class GameScene extends Phaser.Scene { //player.anims.play('down'); //player.setBounce(0.2); //player.setCollideWorldBounds(true); - + this.player = this.add.sprite(450, 450, 'player'); } @@ -94,22 +96,45 @@ export class GameScene extends Phaser.Scene { let speedMultiplier = this.keyShift.isDown ? 5 : 1; - if (this.keyZ.isDown || this.keyUp.isDown) { + if (this.keyUp.isDown) { this.moveCamera(0, -1, speedMultiplier); } - if (this.keyQ.isDown || this.keyLeft.isDown) { + if (this.keyLeft.isDown) { this.moveCamera(-1, 0, speedMultiplier); } - if (this.keyS.isDown || this.keyDown.isDown) { + if (this.keyDown.isDown) { this.moveCamera(0, 1, speedMultiplier); } - if (this.keyD.isDown || this.keyRight.isDown) { + if (this.keyRight.isDown) { this.moveCamera(1, 0, speedMultiplier); } + if (this.keyZ.isDown) { + this.managePlayerAnimation('up'); + this.player.setY(this.player.y - 2) + } else if (this.keyQ.isDown) { + this.managePlayerAnimation('left'); + this.player.setX(this.player.x - 2) + } else if (this.keyS.isDown) { + this.managePlayerAnimation('down'); + this.player.setY(this.player.y + 2) + } else if (this.keyD.isDown) { + this.managePlayerAnimation('right'); + this.player.setX(this.player.x + 2) + } else { + this.managePlayerAnimation('none'); + } /*this.cameras.main.scrollX = Math.floor(300 + 300 * Math.cos(this.angle)); this.cameras.main.scrollY = Math.floor(300 + 300 * Math.sin(this.angle)); this.angle = dt * 0.0001;*/ } + + managePlayerAnimation(direction: string) { + if (!this.player.anims.currentAnim || this.player.anims.currentAnim.key !== direction) { + this.player.anims.play(direction); + } else if (direction === 'none' && this.player.anims.currentAnim) { + this.player.anims.currentAnim.destroy(); + } + } }