From 6aad752ce3abcb28144b990b2b1930d0bd9b1000 Mon Sep 17 00:00:00 2001 From: goynov Date: Fri, 14 Mar 2025 19:13:52 +0200 Subject: [PATCH] game scenarios --- .../SceneDesigner/AnnotationPoint.vue | 12 ++ src/components/SceneDesigner/GameObject.vue | 46 +++++ src/components/SceneDesigner/Scene.vue | 48 +++++ .../SceneDesigner/SceneDesigner.vue | 183 ++++++++++++------ src/components/SceneDesigner/SvgAvatar.vue | 28 --- src/components/SceneDesigner/SvgIcon.vue | 16 ++ src/components/SceneDesigner/SvgRectangle.vue | 35 ++++ src/components/SceneDesigner/SvgScene.vue | 25 --- .../index.js => lib/gameEngine.js} | 0 src/lib/utils.js | 57 ++++++ src/pages/game-objects/[[id]].vue | 4 +- src/pages/scenarios/[[id]].vue | 52 ++++- src/plugins/api.js | 17 +- 13 files changed, 396 insertions(+), 127 deletions(-) create mode 100644 src/components/SceneDesigner/AnnotationPoint.vue create mode 100644 src/components/SceneDesigner/GameObject.vue create mode 100644 src/components/SceneDesigner/Scene.vue delete mode 100644 src/components/SceneDesigner/SvgAvatar.vue create mode 100644 src/components/SceneDesigner/SvgIcon.vue create mode 100644 src/components/SceneDesigner/SvgRectangle.vue delete mode 100644 src/components/SceneDesigner/SvgScene.vue rename src/{gameEngine/index.js => lib/gameEngine.js} (100%) create mode 100644 src/lib/utils.js diff --git a/src/components/SceneDesigner/AnnotationPoint.vue b/src/components/SceneDesigner/AnnotationPoint.vue new file mode 100644 index 0000000..999d270 --- /dev/null +++ b/src/components/SceneDesigner/AnnotationPoint.vue @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/src/components/SceneDesigner/GameObject.vue b/src/components/SceneDesigner/GameObject.vue new file mode 100644 index 0000000..facb0ea --- /dev/null +++ b/src/components/SceneDesigner/GameObject.vue @@ -0,0 +1,46 @@ + + + \ No newline at end of file diff --git a/src/components/SceneDesigner/Scene.vue b/src/components/SceneDesigner/Scene.vue new file mode 100644 index 0000000..866cb8c --- /dev/null +++ b/src/components/SceneDesigner/Scene.vue @@ -0,0 +1,48 @@ + + + \ No newline at end of file diff --git a/src/components/SceneDesigner/SceneDesigner.vue b/src/components/SceneDesigner/SceneDesigner.vue index fce21c2..4267e46 100644 --- a/src/components/SceneDesigner/SceneDesigner.vue +++ b/src/components/SceneDesigner/SceneDesigner.vue @@ -1,40 +1,93 @@ \ No newline at end of file diff --git a/src/components/SceneDesigner/SvgAvatar.vue b/src/components/SceneDesigner/SvgAvatar.vue deleted file mode 100644 index a94bbcd..0000000 --- a/src/components/SceneDesigner/SvgAvatar.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - \ No newline at end of file diff --git a/src/components/SceneDesigner/SvgIcon.vue b/src/components/SceneDesigner/SvgIcon.vue new file mode 100644 index 0000000..9af461d --- /dev/null +++ b/src/components/SceneDesigner/SvgIcon.vue @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/src/components/SceneDesigner/SvgRectangle.vue b/src/components/SceneDesigner/SvgRectangle.vue new file mode 100644 index 0000000..52e03bb --- /dev/null +++ b/src/components/SceneDesigner/SvgRectangle.vue @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/src/components/SceneDesigner/SvgScene.vue b/src/components/SceneDesigner/SvgScene.vue deleted file mode 100644 index a6ebdb8..0000000 --- a/src/components/SceneDesigner/SvgScene.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - \ No newline at end of file diff --git a/src/gameEngine/index.js b/src/lib/gameEngine.js similarity index 100% rename from src/gameEngine/index.js rename to src/lib/gameEngine.js diff --git a/src/lib/utils.js b/src/lib/utils.js new file mode 100644 index 0000000..a49b4fb --- /dev/null +++ b/src/lib/utils.js @@ -0,0 +1,57 @@ +const epsilon = 0.1; + +export default { + blobToBase64: blob => { + const reader = new FileReader(); + reader.readAsDataURL(blob); + return new Promise(resolve => { + reader.onloadend = () => { + resolve(reader.result); + }; + }); + }, + + adjustMinMax(r){ + return { + x1: Math.min(r.x1, r.x2), x2: Math.max(r.x1, r.x2), + y1: Math.min(r.y1, r.y2), y2: Math.max(r.y1, r.y2) + } + }, + + intersectPointRect(p, r){ + //r = this.adjustMinMax(r); + return p[0] >= r.x1 && p[0] <= r.x2 && p[1] >= r.y1 && p[1] <= r.y2; + }, + + intersectPointLine(p, l){ + //l = this.adjustMinMax(l); + let dx = l.x2 - l.x1, dy = l.y2 - l.y1; + let c = dy / dx; + return this.intersectPointRect(p, l) && c * p[0] - p[1] <= epsilon + }, + + intersectLineRect(l, r){ + return this.intersectPointRect([l.x1, l.y1], r) || + this.intersectPointRect([l.x2, l.y2], r); + }, + + intersectRectRect(r1, r2){ + return this.intersectPointRect([r1.x1, r1.y1], r2) || + this.intersectPointRect([r1.x1, r1.y2], r2) || + this.intersectPointRect([r1.x2, r1.y1], r2) || + this.intersectPointRect([r1.x2, r1.y2], r2); + }, + + round(n, p = 2){ + let pp = Math.pow(10, p); + return Math.round(n*pp)/pp; + }, + + deg2rad(deg){ + return deg * (Math.PI / 180); + }, + + rad2deg(rad){ + return rad * 180 / Math.PI; + } +} \ No newline at end of file diff --git a/src/pages/game-objects/[[id]].vue b/src/pages/game-objects/[[id]].vue index 6c15181..a5e8658 100644 --- a/src/pages/game-objects/[[id]].vue +++ b/src/pages/game-objects/[[id]].vue @@ -38,7 +38,7 @@ \ No newline at end of file diff --git a/src/plugins/api.js b/src/plugins/api.js index d859fea..fafc10b 100644 --- a/src/plugins/api.js +++ b/src/plugins/api.js @@ -1,7 +1,8 @@ import axios from 'axios'; const $ax = axios.create({ - baseURL: '/api/' + baseURL: '/api/', + //transformRequest: data=> }) export default { @@ -20,6 +21,20 @@ export default { async remove(id){ return await $ax.delete(`/game-object/${id}`) } + }, + scenario:{ + async save(data){ + return await $ax.put('/scenario', data); + }, + async load(id){ + return await $ax.get(`/scenario/${id}`); + }, + async search(query){ + return await $ax.post('/scenario', query); + }, + async remove(id){ + return await $ax.delete(`/scenario/${id}`) + } } } }