diff --git a/client/package-lock.json b/client/package-lock.json
index c8c99b4e..93652fbd 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -17,7 +17,7 @@
"jquery": "^3.7.1",
"jquery-ui": "^1.13.3",
"jquery-ui-dist": "^1.13.3",
- "marked": "^9.1.0",
+ "marked": "^9.1.6",
"marked-katex-extension": "^4.0.1",
"mitt": "^3.0.1",
"prismjs": "^1.29.0",
@@ -25,8 +25,7 @@
"three": "^0.164.1",
"vue": "^3.3.4",
"vue-draggable": "^2.0.6",
- "vue-router": "^4.2.4",
- "vue-simplemde": "^2.1.1"
+ "vue-router": "^4.2.4"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.3.4",
@@ -271,82 +270,6 @@
"integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==",
"deprecated": "Potential XSS vulnerability patched in v6.0.0."
},
- "node_modules/@codemirror/autocomplete": {
- "version": "6.9.2",
- "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.9.2.tgz",
- "integrity": "sha512-suItGf7PhtfgQMCd8ofYzycdsAHDBB8BkNrmyxeLvptW7yNT6zGT6ZzwhAfmB94TUyAAStrHjaDGC4/foenF2A==",
- "dependencies": {
- "@codemirror/language": "^6.0.0",
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.17.0",
- "@lezer/common": "^1.0.0"
- },
- "peerDependencies": {
- "@codemirror/language": "^6.0.0",
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.0.0",
- "@lezer/common": "^1.0.0"
- }
- },
- "node_modules/@codemirror/commands": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.0.tgz",
- "integrity": "sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==",
- "dependencies": {
- "@codemirror/language": "^6.0.0",
- "@codemirror/state": "^6.2.0",
- "@codemirror/view": "^6.0.0",
- "@lezer/common": "^1.1.0"
- }
- },
- "node_modules/@codemirror/language": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.9.1.tgz",
- "integrity": "sha512-lWRP3Y9IUdOms6DXuBpoWwjkR7yRmnS0hKYCbSfPz9v6Em1A1UCRujAkDiCrdYfs1Z0Eu4dGtwovNPStIfkgNA==",
- "dependencies": {
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.0.0",
- "@lezer/common": "^1.1.0",
- "@lezer/highlight": "^1.0.0",
- "@lezer/lr": "^1.0.0",
- "style-mod": "^4.0.0"
- }
- },
- "node_modules/@codemirror/lint": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz",
- "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==",
- "dependencies": {
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.0.0",
- "crelt": "^1.0.5"
- }
- },
- "node_modules/@codemirror/search": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.4.tgz",
- "integrity": "sha512-YoTrvjv9e8EbPs58opjZKyJ3ewFrVSUzQ/4WXlULQLSDDr1nGPJ67mMXFNNVYwdFhybzhrzrtqgHmtpJwIF+8g==",
- "dependencies": {
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.0.0",
- "crelt": "^1.0.5"
- }
- },
- "node_modules/@codemirror/state": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz",
- "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw=="
- },
- "node_modules/@codemirror/view": {
- "version": "6.21.3",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.21.3.tgz",
- "integrity": "sha512-8l1aSQ6MygzL4Nx7GVYhucSXvW4jQd0F6Zm3v9Dg+6nZEfwzJVqi4C2zHfDljID+73gsQrWp9TgHc81xU15O4A==",
- "dependencies": {
- "@codemirror/state": "^6.1.4",
- "style-mod": "^4.1.0",
- "w3c-keyname": "^2.2.4"
- }
- },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -915,27 +838,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@lezer/common": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.0.tgz",
- "integrity": "sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw=="
- },
- "node_modules/@lezer/highlight": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz",
- "integrity": "sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==",
- "dependencies": {
- "@lezer/common": "^1.0.0"
- }
- },
- "node_modules/@lezer/lr": {
- "version": "1.3.13",
- "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.13.tgz",
- "integrity": "sha512-RLAbau/4uSzKgIKj96mI5WUtG1qtiR0Frn0Ei9zhPj8YOkHM+1Bb8SgdVvmR/aWJCFIzjo2KFnDiRZ75Xf5NdQ==",
- "dependencies": {
- "@lezer/common": "^1.0.0"
- }
- },
"node_modules/@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -3407,28 +3309,6 @@
"node": ">=6"
}
},
- "node_modules/codemirror": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz",
- "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==",
- "dependencies": {
- "@codemirror/autocomplete": "^6.0.0",
- "@codemirror/commands": "^6.0.0",
- "@codemirror/language": "^6.0.0",
- "@codemirror/lint": "^6.0.0",
- "@codemirror/search": "^6.0.0",
- "@codemirror/state": "^6.0.0",
- "@codemirror/view": "^6.0.0"
- }
- },
- "node_modules/codemirror-spell-checker": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz",
- "integrity": "sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==",
- "dependencies": {
- "typo-js": "*"
- }
- },
"node_modules/collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -3854,11 +3734,6 @@
"node": ">=8"
}
},
- "node_modules/crelt": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
- "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="
- },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -8055,9 +7930,10 @@
}
},
"node_modules/marked": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.0.tgz",
- "integrity": "sha512-VZjm0PM5DMv7WodqOUps3g6Q7dmxs9YGiFUZ7a2majzQTTCgX+6S6NAJHPvOhgFBzYz8s4QZKWWMfZKFmsfOgA==",
+ "version": "9.1.6",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz",
+ "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==",
+ "license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
@@ -10860,16 +10736,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/simplemde": {
- "version": "1.11.2",
- "resolved": "https://registry.npmjs.org/simplemde/-/simplemde-1.11.2.tgz",
- "integrity": "sha512-AUXuHJ/tEEDEcN/MTitHIw3AuBcheizJt7SVwtyn00B0UK5RKZ3GB+JndmRcJ5wfYGCIL0O2yJm/uz0sJOFSLg==",
- "dependencies": {
- "codemirror": "*",
- "codemirror-spell-checker": "*",
- "marked": "*"
- }
- },
"node_modules/sirv": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
@@ -11449,11 +11315,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/style-mod": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz",
- "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA=="
- },
"node_modules/stylehacks": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz",
@@ -11828,11 +11689,6 @@
"node": ">= 0.6"
}
},
- "node_modules/typo-js": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/typo-js/-/typo-js-1.2.3.tgz",
- "integrity": "sha512-67Hyl94beZX8gmTap7IDPrG5hy2cHftgsCAcGvE1tzuxGT+kRB+zSBin0wIMwysYw8RUCBCvv9UfQl8TNM75dA=="
- },
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -12207,26 +12063,6 @@
"vue": "^3.2.0"
}
},
- "node_modules/vue-simplemde": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/vue-simplemde/-/vue-simplemde-2.1.1.tgz",
- "integrity": "sha512-UBjjdcTVlq7MrmeeKyzGVFEdsqarsqVxL/QGuCCfV1jGs7ve2wJ3pTENM6FEvaSURFnDJhIR6uUkPrxHg6S7HQ==",
- "dependencies": {
- "marked": "^3.0.8",
- "simplemde": "*"
- }
- },
- "node_modules/vue-simplemde/node_modules/marked": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz",
- "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==",
- "bin": {
- "marked": "bin/marked"
- },
- "engines": {
- "node": ">= 12"
- }
- },
"node_modules/vue-style-loader": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@@ -12245,11 +12081,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/w3c-keyname": {
- "version": "2.2.8",
- "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
- "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="
- },
"node_modules/watchpack": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
@@ -12803,9 +12634,10 @@
}
},
"node_modules/xss": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz",
- "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==",
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz",
+ "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==",
+ "license": "MIT",
"dependencies": {
"commander": "^2.20.3",
"cssfilter": "0.0.10"
diff --git a/client/package.json b/client/package.json
index 1d49981f..694c7cff 100644
--- a/client/package.json
+++ b/client/package.json
@@ -18,7 +18,7 @@
"jquery": "^3.7.1",
"jquery-ui": "^1.13.3",
"jquery-ui-dist": "^1.13.3",
- "marked": "^9.1.0",
+ "marked": "^9.1.6",
"marked-katex-extension": "^4.0.1",
"mitt": "^3.0.1",
"prismjs": "^1.29.0",
@@ -26,8 +26,7 @@
"three": "^0.164.1",
"vue": "^3.3.4",
"vue-draggable": "^2.0.6",
- "vue-router": "^4.2.4",
- "vue-simplemde": "^2.1.1"
+ "vue-router": "^4.2.4"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.3.4",
diff --git a/client/src/assets/main.css b/client/src/assets/main.css
index 05f634d2..54b62a5c 100644
--- a/client/src/assets/main.css
+++ b/client/src/assets/main.css
@@ -118,11 +118,23 @@ input[type=text], input[type=password], input[type=email] {
border: solid 1px var(--color-border);
}
+
+textarea {
+ background-color: var(--color-background-softer);
+ padding: 12px;
+ color: var(--color-text);
+ border: none;
+}
+
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus {
outline: none;
background-color: var(--color-background-softest);
}
+textarea:focus {
+ outline: none;
+}
+
button {
margin-top: 5px;
margin-bottom: 5px;
@@ -178,11 +190,16 @@ button:active {
margin-left: auto;
}
+.centered {
+ text-align: center;
+}
.window-wrapper {
display: flex;
align-items: center;
border: solid 1px var(--color-border);
+
+ /* opacity: 0; */
user-select: none;
-webkit-box-shadow: 0px 0px 10px -2px rgba(0,0,0,0.75);
@@ -199,6 +216,10 @@ button:active {
font-size: 32px;
}
+.document b {
+ font-weight: bold;
+}
+
.text-icon {
height: 18px;
width: 18px;
diff --git a/client/src/main.js b/client/src/main.js
index bec050a6..c4cc9a32 100644
--- a/client/src/main.js
+++ b/client/src/main.js
@@ -1,35 +1,14 @@
import './assets/main.css'
import './assets/prism.css'
-import { createApp, reactive } from 'vue'
+import { createApp, defineComponent, reactive } from 'vue'
import App from './App.vue'
import router from './router'
import mitt from 'mitt';
const emitter = mitt();
-import VueMarkdownEditor from '@kangc/v-md-editor';
-import '@kangc/v-md-editor/lib/style/base-editor.css';
-import vuepressTheme from '@kangc/v-md-editor/lib/theme/vuepress.js';
-import '@kangc/v-md-editor/lib/theme/style/vuepress.css';
-import esEs from '@kangc/v-md-editor/lib/lang/es-ES'
-
-
-import Prism from 'prismjs';
-
-import 'prismjs/components/prism-python';
-import 'prismjs/components/prism-javascript';
-import 'prismjs/components/prism-java';
-import 'prismjs/components/prism-c';
-import 'prismjs/components/prism-cpp';
-import 'prismjs/components/prism-csharp';
-import 'prismjs/components/prism-ruby';
-import 'prismjs/components/prism-bash';
-
-VueMarkdownEditor.lang.use('es-Es', esEs);
-VueMarkdownEditor.use(vuepressTheme, { Prism });
-
-const app = createApp(App).use(VueMarkdownEditor);
+const app = createApp(App);
app.config.globalProperties.emitter = emitter
app.config.globalProperties.rollWindows = {
login: reactive([]),
diff --git a/client/src/services/Campaign.js b/client/src/services/Campaign.js
new file mode 100644
index 00000000..f771aa7a
--- /dev/null
+++ b/client/src/services/Campaign.js
@@ -0,0 +1,52 @@
+import { ref } from 'vue';
+
+import { ExitGame } from "./Game";
+import { socket } from "./Socket";
+import { GetUser } from "./User";
+import { chat } from './Chat';
+import { ClearAll, CreateWindow } from './Windows';
+
+
+let _currentCampaign = null;
+let _currentPlayer = null;
+const _players = ref([]);
+
+function ConnectToCampaign(campaign){
+ _currentCampaign = campaign;
+ chat.value = [];
+
+ socket.emit('enter', GetUser(), _currentCampaign._id);
+}
+
+function Disconnect(){
+ socket.emit('exit');
+ ExitGame();
+
+ _currentCampaign = null;
+ _currentPlayer = null;
+ chat.value = [];
+}
+
+
+function DisplayCampaign(data = currentCampaign){
+ ClearAll();
+ CreateWindow('campaign_preview', {campaign: data});
+}
+
+socket.on('update-players', data => {
+ _players.value = [];
+ Object.keys(data).forEach((key) => {
+ _players.value.push(data[key]);
+ if(GetUser()._id == data[key].user._id) _currentPlayer = data[key];
+ });
+})
+
+export {
+ _currentCampaign,
+ _currentPlayer,
+ _players,
+
+ ConnectToCampaign,
+ DisplayCampaign,
+ Disconnect
+}
\ No newline at end of file
diff --git a/client/src/services/Chat.js b/client/src/services/Chat.js
new file mode 100644
index 00000000..78be0c5e
--- /dev/null
+++ b/client/src/services/Chat.js
@@ -0,0 +1,36 @@
+import { ref } from 'vue';
+import { socket } from "./Socket";
+
+let chatMessageId = 0;
+const chat = ref([]);
+
+socket.on('message', (data) => {
+ // Add new chat message, ?
+ if(chat.value.length > 0) if(chat.value[chat.value.length - 1].author == data.author){
+ chat.value[chat.value.length - 1].chunkSize += 1;
+ chat.value[chat.value.length - 1].chunks.push({
+ id: chat.value[chat.value.length - 1].chunkSize,
+ type: data.type ? data.type : 'text',
+ content: data.content
+ });
+ return;
+ }
+
+ chatMessageId += 1;
+ chat.value.push({
+ id: chatMessageId,
+ author: data.author,
+ chunkSize: 1,
+ chunks: [
+ {
+ id: 1,
+ type: data.type ? data.type : 'text',
+ content: data.content
+ }
+ ]
+ });
+});
+
+export {
+ chat
+}
\ No newline at end of file
diff --git a/client/src/services/ContextMenu.js b/client/src/services/ContextMenu.js
index 45fa8986..9e8785b7 100644
--- a/client/src/services/ContextMenu.js
+++ b/client/src/services/ContextMenu.js
@@ -32,6 +32,12 @@ function PopulateContext(val){
spanInfo.innerHTML = element.name;
contextMenuElement.appendChild(spanInfo);
+ if(element.icon){
+ let iconContextElement = document.createElement('img');
+ iconContextElement.src = element.icon;
+ contextMenuElement.appendChild(iconContextElement);
+ }
+
if(element.context){
let iconContextElement = document.createElement('img');
iconContextElement.src = arrowIcon;
diff --git a/client/src/services/Data.js b/client/src/services/Data.js
new file mode 100644
index 00000000..9801d585
--- /dev/null
+++ b/client/src/services/Data.js
@@ -0,0 +1,41 @@
+import Api from '@/services/Api'
+import { GetCampaign } from "./Dragonroll";
+import { socket } from './Socket';
+import { reactive } from 'vue';
+
+let data = reactive({});
+
+function InitData(){
+ data.value = {
+ concepts: [],
+ };
+}
+
+function FetchConcepts(){
+ Api().get('/concept/list?campaign=' + GetCampaign()._id).then(response => {
+ data.value.concepts = response.data.data;
+ }).catch((err) => console.log(err));
+}
+
+function FetchData(){
+ FetchConcepts();
+}
+
+
+socket.on('update-concepts', () => {
+ FetchConcepts();
+});
+
+let GetConcepts = () => data.value.concepts;
+let GetConcept = (id) => Api().get('/concept/get?campaign=' + GetCampaign()._id + "&id=" + id)
+
+
+export {
+ InitData,
+ FetchData,
+
+ FetchConcepts,
+
+ GetConcepts,
+ GetConcept,
+}
\ No newline at end of file
diff --git a/client/src/services/Dragonroll.js b/client/src/services/Dragonroll.js
index 16d8df08..d9111745 100644
--- a/client/src/services/Dragonroll.js
+++ b/client/src/services/Dragonroll.js
@@ -1,12 +1,7 @@
-import { ref } from 'vue';
-import { ClearAll, ClearWindow, CreateWindow } from './Windows';
-import { io } from "socket.io-client";
-import Api from '@/services/Api'
-import { backendUrl } from './BackendURL';
-import { GetUser } from './User';
-import { ExitGame } from './Game';
import { GetModule } from './Modules';
-import { GetMap, LoadMap, UpdateMapList } from './Map';
+import { socket } from './Socket';
+import { _currentCampaign, _currentPlayer, _players } from './Campaign';
+import { chat } from './Chat';
let emitter;
@@ -20,62 +15,12 @@ function DisplayToast(color, text, duration = 1000){
emitter.emit("toast", {color, text, duration});
}
-const socket = io(backendUrl)
+let GetPlayerList = () => _players;
+let GetCampaign = () => _currentCampaign;
+let GetClient = () => _currentPlayer;
-let currentCampaign = null;
-let currentPlayer = null;
-
-const players = ref([]);
-let GetPlayerList = () => { return players; };
-let GetCampaign = () => { return currentCampaign; };
-let GetClient = () => { return currentPlayer; };
-
-let chatMessageId = 0;
-const chat = ref([]);
let GetChatRef = () => chat;
-socket.on('change_map', data => {
- console.log("ChangeMap")
- UpdateMapList().then(() => {
- LoadMap(GetMap(data.id));
- });
-})
-
-socket.on('update-players', data => {
- players.value = [];
- Object.keys(data).forEach((key) => {
- players.value.push(data[key]);
- if(GetUser()._id == data[key].user._id) currentPlayer = data[key];
- });
-})
-
-socket.on('message', (data) => {
- // Add new chat message, ?
- if(chat.value.length > 0) if(chat.value[chat.value.length - 1].author == data.author){
- chat.value[chat.value.length - 1].chunkSize += 1;
- chat.value[chat.value.length - 1].chunks.push({
- id: chat.value[chat.value.length - 1].chunkSize,
- type: data.type ? data.type : 'text',
- content: data.content
- });
- return;
- }
-
- chatMessageId += 1;
- chat.value.push({
- id: chatMessageId,
- author: data.author,
- chunkSize: 1,
- chunks: [
- {
- id: 1,
- type: data.type ? data.type : 'text',
- content: data.content
- }
- ]
- });
-});
-
function _SendMap(id){
socket.emit('send_map', {id});
}
@@ -84,30 +29,10 @@ function SendMessage(data){
socket.emit('message', data);
}
-function DisplayCampaign(data = currentCampaign){
- ClearAll();
- CreateWindow('campaign_preview', {campaign: data});
-}
-
-function ConnectToCampaign(campaign){
- currentCampaign = campaign;
- chat.value = [];
-
- socket.emit('enter', GetUser(), currentCampaign._id);
-}
-
-function Disconnect(){
- socket.emit('exit');
- ExitGame();
-
- currentCampaign = null;
- currentPlayer = null;
- chat.value = [];
-}
function GetPlayer(player_campaign){
- let index = players.value.findIndex((p) => {return p._id == player_campaign});
- if(index != -1) return players.value[index];
+ let index = _players.value.findIndex((p) => {return p._id == player_campaign});
+ if(index != -1) return _players.value[index];
}
function GetSystem(){
@@ -115,16 +40,11 @@ function GetSystem(){
}
export {
- socket,
SetEmitter,
GetEmitter,
DisplayToast,
- DisplayCampaign,
- ConnectToCampaign,
- Disconnect,
-
GetCampaign,
GetClient,
GetPlayerList,
diff --git a/client/src/services/Game.js b/client/src/services/Game.js
index 2965947e..291dd474 100644
--- a/client/src/services/Game.js
+++ b/client/src/services/Game.js
@@ -1,10 +1,13 @@
import { ref } from "vue";
+import { FetchData, InitData } from "./Data";
const inGameRef = ref(false);
let InGameRef = () => inGameRef;
function LaunchGame(){
inGameRef.value = true;
+ InitData();
+ FetchData();
}
function ExitGame(){
diff --git a/client/src/services/Map.js b/client/src/services/Map.js
index 8f78a6fd..505193e2 100644
--- a/client/src/services/Map.js
+++ b/client/src/services/Map.js
@@ -3,6 +3,7 @@ import { initCustomFormatter, ref, toRaw } from 'vue';
import Api from '@/services/Api'
import { _SendMap, GetCampaign } from './Dragonroll';
import { backendUrl } from './BackendURL';
+import { socket } from './Socket';
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(","),
@@ -292,6 +293,13 @@ function ChangeBackgroundColor(color){
SaveMap(currentMapId.value);
}
+
+socket.on('change_map', data => {
+ UpdateMapList().then(() => {
+ LoadMap(GetMap(data.id));
+ });
+})
+
export {
toMapX,
toMapY,
diff --git a/client/src/services/Socket.js b/client/src/services/Socket.js
new file mode 100644
index 00000000..3711c213
--- /dev/null
+++ b/client/src/services/Socket.js
@@ -0,0 +1,8 @@
+import { io } from "socket.io-client";
+
+import { backendUrl } from './BackendURL';
+const socket = io(backendUrl);
+
+export {
+ socket
+}
\ No newline at end of file
diff --git a/client/src/services/Windows.js b/client/src/services/Windows.js
index 705a716c..52166b12 100644
--- a/client/src/services/Windows.js
+++ b/client/src/services/Windows.js
@@ -1,5 +1,5 @@
import { reactive, ref } from 'vue'
-import { Disconnect } from './Dragonroll';
+import { Disconnect } from './Campaign';
const windows = ref([])
diff --git a/client/src/views/managers/GameManager.vue b/client/src/views/managers/GameManager.vue
index 37bcff65..5c5b6eca 100644
--- a/client/src/views/managers/GameManager.vue
+++ b/client/src/views/managers/GameManager.vue
@@ -4,7 +4,7 @@ import { InGameRef } from '../../services/Game';
import IconButton from '../partials/game/IconButton.vue';
import { AddSound } from '../../services/Sound';
import TileMap from './TileMap.vue';
-import { DisplayCampaign, GetCampaign, GetClient } from '../../services/Dragonroll';
+import { GetCampaign, GetClient } from '../../services/Dragonroll';
import { ClearAll, ClearWindow, CreateWindow } from '../../services/Windows';
const game = ref(null);
diff --git a/client/src/views/managers/WindowManager.vue b/client/src/views/managers/WindowManager.vue
index 582c6130..c0a776bf 100644
--- a/client/src/views/managers/WindowManager.vue
+++ b/client/src/views/managers/WindowManager.vue
@@ -1,5 +1,5 @@
+
+
+