From 18d058bdebc77e5f1d1a59ec02c3efa01b15924c Mon Sep 17 00:00:00 2001 From: Paolo Brasolin <paolo.brasolin@eurac.edu> Date: Wed, 9 Mar 2022 10:43:25 +0100 Subject: [PATCH] feat: #fe submit word by typing --- frontend/src/js/main.js | 299 +++++++++++++++++----------------------- 1 file changed, 129 insertions(+), 170 deletions(-) diff --git a/frontend/src/js/main.js b/frontend/src/js/main.js index c971187..284694e 100644 --- a/frontend/src/js/main.js +++ b/frontend/src/js/main.js @@ -100,6 +100,7 @@ let imageInUse = []; let enemyNumber = 0; let ground; let consecutiveMissing = 0; +let onscreenEnemies = []; /* game params */ let enemies = ["bear", "wolf", "deer", "boar"]; @@ -220,6 +221,7 @@ function gameStart(scene) { function dispatchEnemy(scene) { let e = new enemy(); + onscreenEnemies.push(e); axios .post(backendEndpointURL("GetImage"), { @@ -270,6 +272,8 @@ class enemy { .setScale(scale) .setInteractive(); + this.sprite = enemy; + enemy.typeName = randomEnemyType; scene.physics.add.collider(enemy, ground); enemy.flipX = true; @@ -289,176 +293,6 @@ class enemy { onStop: function () {}, }); - enemy.on("pointerdown", function (pointer) { - let hit = true; - enemy.disableInteractive(); - // here invoke image - enemy.movement.pause(); - setAnimation(enemy, enemy.typeName + "_idle"); - fadeBG.setVisible(true); - - let beginTime = new Date().getTime(); - - console.log(me.refData.image); - - bootbox.prompt({ - // title: "<p>Please write the transcription in the box below:</p>", message: "<p><img style='max-width: 470px' src='" + window.OetziWordsSiteUrlPrefix + 'images/' + me.refData.filename + "'/></p>", centerVertical: true, closeButton: false, buttons: { - title: "<p>Please write the transcription in the box below:</p>", - message: - "<p><img style='max-width: 470px' src='data:image/png;base64, " + - me.refData.image + - "'/></p>", - centerVertical: true, - closeButton: false, - buttons: { - confirm: { - label: "Confirm", - }, - }, - callback: function (result) { - let endTime = new Date().getTime(); - let deltaTime = endTime - beginTime; - fadeBG.setVisible(false); - - if (result.trim().length === 0) { - hit = false; - } - - axios - .post(backendEndpointURL("CheckTranscription"), { - refData: me.refData, - transcription: result, - deltaTime: deltaTime, - }) - .then(function (response) { - // console.log(response.data); - - hit = response.data.hitTheTarget; - if (consecutiveMissing >= 3 && deltaTime >= 3000) { - consecutiveMissing = 0; - hit = true; - } - if (hit) { - consecutiveMissing = 0; - } else { - consecutiveMissing++; - } - - let startPoint = new Phaser.Math.Vector2(player.x, player.y); - let controlPoint1 = new Phaser.Math.Vector2( - enemy.x + (player.x - enemy.x) / 2, - scene.cameras.main.height - (player.x - enemy.x), - ); - - let endPoint = new Phaser.Math.Vector2( - enemy.x + enemy.width * 1.6, - scene.cameras.main.height - 60, - ); - let message = scene.add - .sprite( - scene.cameras.main.width / 2, - scene.cameras.main.height / 2, - ) - .setScale(1); - - // hit / missing <--- message - if (!hit) { - endPoint = new Phaser.Math.Vector2( - -500, - scene.cameras.main.height - 60, - ); - message.play({ key: "missing", repeat: 1 }); - message.on("animationcomplete", () => { - message.anims.remove("miss"); - message.destroy(); - }); - } else { - let message = scene.add - .sprite( - scene.cameras.main.width / 2, - scene.cameras.main.height / 2, - ) - .setScale(1); - message.play({ key: "hit", repeat: 1 }); - message.on("animationcomplete", () => { - message.anims.remove("hit"); - message.destroy(); - }); - } - - let curve = new Phaser.Curves.QuadraticBezier( - startPoint, - controlPoint1, - endPoint, - ); - - let graphics = scene.add.graphics(); - graphics.lineStyle(1, 0xff00ff, 1); - - // curve.draw(graphics); // decomment to see the trajectory - - let spear = scene.add.follower(curve); - - // console.log(player.x + " " + enemy.x); - if (hit) { - spear.startFollow({ - positionOnPath: true, - duration: (scene.cameras.main.width - enemy.x) * 3, - rotateToPath: true, - verticalAdjust: true, - scale: 3, - onComplete: (x, y) => { - console.log("done"); - let spearHitObj = scene.add - .sprite( - enemy.x + enemy.width * 1.6 - 10, - scene.cameras.main.height - 60, - ) - .setScale(2); - setAnimation(spearHitObj, "spearHitAni"); - spear.anims.stop("spearAni"); - spear.anims.remove("spearAni"); - spear.destroy(); - setTimeout(() => { - enemy.flipX = false; - setAnimation(enemy, enemy.typeName + "_run"); - enemy.movement.stop(); - scene.tweens.add({ - targets: enemy, - x: -500, - duration: 5000, - onComplete: function () { - enemy.destroy(); - callback(me); - }, - }); - }, 3000); - setTimeout(() => { - spearHitObj.destroy(); - }, 4000); - }, - }); - } else { - enemy.setInteractive(); - enemy.movement.resume(); - setAnimation(enemy, enemy.typeName + "_walk"); - spear.startFollow({ - positionOnPath: true, - duration: 3000, - rotateToPath: true, - verticalAdjust: true, - scale: 3, - }); - } - - spear.scale = 2; - spear.anims.play("spearAni"); - //console.log(enemy.typeName); - }); - }, //callback bootbox - }); - }); - // here to implement health scene.physics.add.overlap(player, enemy, (p, nemico) => { nemico.disableInteractive(); @@ -504,7 +338,132 @@ function initAndBindGuessPreview(scene) { ) { textEntry.text += event.key; } else if (event.keyCode === Phaser.Input.Keyboard.KeyCodes.ENTER) { + submitTranscription(textEntry.text); textEntry.text = textEntry.text.substr(0, 0); } }); } + +function shootSpear(enemy, hit) { + let startPoint = new Phaser.Math.Vector2(player.x, player.y); + let controlPoint1 = new Phaser.Math.Vector2( + enemy.x + (player.x - enemy.x) / 2, + scene.cameras.main.height - (player.x - enemy.x), + ); + + let endPoint = new Phaser.Math.Vector2( + enemy.x + enemy.width * 1.6, + scene.cameras.main.height - 60, + ); + let message = scene.add + .sprite(scene.cameras.main.width / 2, scene.cameras.main.height / 2) + .setScale(1); + + // hit / missing <--- message + if (!hit) { + endPoint = new Phaser.Math.Vector2(-500, scene.cameras.main.height - 60); + message.play({ key: "missing", repeat: 1 }); + message.on("animationcomplete", () => { + message.anims.remove("miss"); + message.destroy(); + }); + } else { + let message = scene.add + .sprite(scene.cameras.main.width / 2, scene.cameras.main.height / 2) + .setScale(1); + message.play({ key: "hit", repeat: 1 }); + message.on("animationcomplete", () => { + message.anims.remove("hit"); + message.destroy(); + }); + } + + let curve = new Phaser.Curves.QuadraticBezier( + startPoint, + controlPoint1, + endPoint, + ); + + let graphics = scene.add.graphics(); + graphics.lineStyle(1, 0xff00ff, 1); + + curve.draw(graphics); // decomment to see the trajectory + + let spear = scene.add.follower(curve); + + // console.log(player.x + " " + enemy.x); + if (hit) { + spear.startFollow({ + positionOnPath: true, + duration: (scene.cameras.main.width - enemy.x) * 3, + rotateToPath: true, + verticalAdjust: true, + scale: 3, + onComplete: (x, y) => { + console.log("done"); + let spearHitObj = scene.add + .sprite( + enemy.x + enemy.width * 1.6 - 10, + scene.cameras.main.height - 60, + ) + .setScale(2); + setAnimation(spearHitObj, "spearHitAni"); + spear.anims.stop("spearAni"); + spear.anims.remove("spearAni"); + spear.destroy(); + setTimeout(() => { + enemy.flipX = false; + setAnimation(enemy, enemy.typeName + "_run"); + enemy.movement.stop(); + scene.tweens.add({ + targets: enemy, + x: -500, + duration: 5000, + onComplete: function () { + enemy.destroy(); + //callback(enemy); // ??? + }, + }); + }, 3000); + setTimeout(() => { + spearHitObj.destroy(); + }, 4000); + }, + }); + } else { + enemy.setInteractive(); + enemy.movement.resume(); + setAnimation(enemy, enemy.typeName + "_walk"); + spear.startFollow({ + positionOnPath: true, + duration: 3000, + rotateToPath: true, + verticalAdjust: true, + scale: 3, + }); + } + + spear.scale = 2; + spear.anims.play("spearAni"); +} + +function submitTranscription(transcription) { + // TODO: guess the enemy if any + const enemy = onscreenEnemies[0].sprite; + + let hit = true; + enemy.disableInteractive(); + // here invoke image + enemy.movement.pause(); + setAnimation(enemy, enemy.typeName + "_idle"); + fadeBG.setVisible(true); + + // let beginTime = new Date().getTime(); + // let endTime = new Date().getTime(); + // let deltaTime = endTime - beginTime; + fadeBG.setVisible(false); + + hit = transcription == "fuffa"; + + shootSpear(enemy, hit); +} -- GitLab