From a575d447f9caabecca9d28a64922175bd4034cca Mon Sep 17 00:00:00 2001 From: KGrzeg Date: Sun, 17 Oct 2021 23:47:52 +0200 Subject: [PATCH] Save record on server --- game/package-lock.json | 40 ++++++++++++++++---------------- game/src/api.ts | 12 ++++++++-- game/src/classes/Bullets.ts | 3 +++ game/src/classes/Ship.ts | 11 +++++---- game/src/gui.ts | 14 +++++++++++ game/src/scenes/GameOverScene.ts | 8 ++++++- game/src/scenes/PlayScene.ts | 9 +++---- game/src/scenes/StartScene.ts | 3 ++- server/server.js | 4 ++-- 9 files changed, 68 insertions(+), 36 deletions(-) diff --git a/game/package-lock.json b/game/package-lock.json index 7d4af79..eeab3ab 100644 --- a/game/package-lock.json +++ b/game/package-lock.json @@ -1,11 +1,11 @@ { - "name": "hs3jam-miner", + "name": "hs3jam-space-smasher-9001", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "hs3jam-miner", + "name": "hs3jam-space-smasher-9001", "version": "1.0.0", "license": "MIT", "dependencies": { @@ -1785,9 +1785,9 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/q": { @@ -4768,9 +4768,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" @@ -5788,9 +5788,9 @@ } }, "node_modules/is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, "node_modules/is-regex": { @@ -11281,9 +11281,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/q": { @@ -13762,9 +13762,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -14543,9 +14543,9 @@ } }, "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, "is-regex": { diff --git a/game/src/api.ts b/game/src/api.ts index d3aa703..91765c1 100644 --- a/game/src/api.ts +++ b/game/src/api.ts @@ -20,7 +20,7 @@ export default { }) } catch (err) { console.log("oops"); - + console.error(err) } @@ -33,5 +33,13 @@ export default { async login(key: string) { return this.post("login", { key }) - } + }, + + async record(points: number, shoots: number, time: number) { + return this.post("record", { + points, + shoots, + time + }) + }, } diff --git a/game/src/classes/Bullets.ts b/game/src/classes/Bullets.ts index 59bb71b..d1a0082 100644 --- a/game/src/classes/Bullets.ts +++ b/game/src/classes/Bullets.ts @@ -27,6 +27,9 @@ export default class Bullets extends Phaser.Physics.Arcade.Group { if (bullet && this.lastShoot + this.cooldown <= time) { bullet.fire(shooter.x, shooter.y, shooter.rotation) this.lastShoot = time + return true } + + return false } } diff --git a/game/src/classes/Ship.ts b/game/src/classes/Ship.ts index d30a9ce..bbb5ae5 100644 --- a/game/src/classes/Ship.ts +++ b/game/src/classes/Ship.ts @@ -16,6 +16,7 @@ export default class Ship extends Phaser.Physics.Arcade.Sprite { bullets: Bullets thruster: Thruster life = 3 + shoots = 0 constructor(scene: Phaser.Scene) { super( @@ -56,8 +57,10 @@ export default class Ship extends Phaser.Physics.Arcade.Sprite { if (keyRight.isDown) vec.x = this.acceleration if (keyLeft.isDown) vec.x = -this.acceleration - if (this.scene.input.activePointer.leftButtonDown()) - this.bullets!.fireBullet(time, this); + if (this.scene.input.activePointer.leftButtonDown()) { + if (this.bullets!.fireBullet(time, this)) + this.shoots++ + } this.rotation = Phaser.Math.Angle.BetweenPoints( this, @@ -78,8 +81,8 @@ export default class Ship extends Phaser.Physics.Arcade.Sprite { asteroid.destroy() //TODO: use objects pool this.scene.events.emit("ship:gothit") } - - if (!this.life){ + + if (!this.life) { this.scene.events.emit("ship:destroyed") } } diff --git a/game/src/gui.ts b/game/src/gui.ts index 29c169a..39e7e87 100644 --- a/game/src/gui.ts +++ b/game/src/gui.ts @@ -8,6 +8,8 @@ declare global { key?: String | null, record?: String | null, } + freezeGui: Function, + unfreezeGui: Function } } @@ -26,6 +28,18 @@ declare global { key: document.getElementById("key"), } + window.freezeGui = () => { + (elements.buttons.login as HTMLButtonElement).disabled = true; + (elements.buttons.logout as HTMLButtonElement).disabled = true; + (elements.buttons.signup as HTMLButtonElement).disabled = true; + } + + window.unfreezeGui = () => { + (elements.buttons.login as HTMLButtonElement).disabled = false; + (elements.buttons.logout as HTMLButtonElement).disabled = false; + (elements.buttons.signup as HTMLButtonElement).disabled = false; + } + function readDataFromToken(token) { return JSON.parse( atob(token.split('.')[1]) diff --git a/game/src/scenes/GameOverScene.ts b/game/src/scenes/GameOverScene.ts index 6d249c9..f44aef3 100644 --- a/game/src/scenes/GameOverScene.ts +++ b/game/src/scenes/GameOverScene.ts @@ -1,4 +1,5 @@ import Phaser from 'phaser' +import API from "../api" export default class PlayScene extends Phaser.Scene { @@ -11,7 +12,7 @@ export default class PlayScene extends Phaser.Scene { this.load.image('hs3-logo', 'assets/img/hs3-logo.png') } - create(data) { + async create(data) { console.log("Show end screen with data:", data) this.add.image(250, 550, 'phaser-logo').setScale(0.5) @@ -27,6 +28,7 @@ export default class PlayScene extends Phaser.Scene { const rank = 0 const pts = data.points || 0 const lvl = data.level || 0 + const shts = data.shoots || 0 const time = Math.ceil(data.elapsedTime || 0) this.add.text(this.cameras.main.centerX, this.cameras.main.centerY, [ @@ -39,5 +41,9 @@ export default class PlayScene extends Phaser.Scene { align: 'center', color: 'cyan' }).setOrigin(0.5, 0.5) + + if (window.myStuff.token) + await API.record(pts, shts, time) + window.unfreezeGui() } } diff --git a/game/src/scenes/PlayScene.ts b/game/src/scenes/PlayScene.ts index d107991..9aa4cd0 100644 --- a/game/src/scenes/PlayScene.ts +++ b/game/src/scenes/PlayScene.ts @@ -16,7 +16,6 @@ export default class PlayScene extends Phaser.Scene { backgroundOrder: number[] = [] backgroundId = 0 startTimestamp: number = 0 - auth: any constructor() { super('play-scene') @@ -36,10 +35,7 @@ export default class PlayScene extends Phaser.Scene { this.load.multiatlas('asteroids', 'assets/img/asteroids.json', 'assets/img'); } - create(data) { - console.log("Started game with", data) - this.auth = data - + create() { Asteroid.createAnimations(this) this.difficulty = new DifficultyManager(this) this.events.on('getpoint', this.updateLabel, this) @@ -69,7 +65,8 @@ export default class PlayScene extends Phaser.Scene { this.scene.start('game-over-scene', { points: this.difficulty!.getPoints(), level: this.difficulty!.getLevel(), - elapsedTime: (this.time.now - this.startTimestamp) / 1000 + elapsedTime: (this.time.now - this.startTimestamp) / 1000, + shoots: this.player!.shoots }) } diff --git a/game/src/scenes/StartScene.ts b/game/src/scenes/StartScene.ts index de75eeb..7a24dbe 100644 --- a/game/src/scenes/StartScene.ts +++ b/game/src/scenes/StartScene.ts @@ -34,7 +34,8 @@ export default class StartScene extends Phaser.Scene { }).setOrigin(0.5, 0.5) this.input.on('pointerup', () => { - this.scene.start('play-scene', window.myStuff); + window.freezeGui() + this.scene.start('play-scene'); }); } } diff --git a/server/server.js b/server/server.js index e96fc3f..d84e29e 100644 --- a/server/server.js +++ b/server/server.js @@ -7,7 +7,7 @@ import cors from 'cors' import auth from './Auth.js' import db from './Database.js' -import jg from './JusticeGuard' +import jg from './JusticeGuard.js' const protect = (req, res, next) => { const authHeader = req.headers.authorization; @@ -76,7 +76,7 @@ app.post("/login", neededArguments(['key']), async (req, res) => { res.json(user) }) -app.post("/record", neededArguments(['points', 'shoots', 'time']), jg, async (req, res) => { +app.post("/record", protect, neededArguments(['points', 'shoots', 'time']), jg, async (req, res) => { db.updateRecord(req.user.name, req.body.points) res.json({