diff --git a/client/src/services/Dragonroll.js b/client/src/services/Dragonroll.js index fa5c41f7..1183be35 100644 --- a/client/src/services/Dragonroll.js +++ b/client/src/services/Dragonroll.js @@ -6,6 +6,7 @@ import { backendUrl } from './BackendURL'; import { GetUser } from './User'; import { ExitGame } from './Game'; import { GetModule } from './Modules'; +import { GetMap, LoadMap, UpdateMapList } from './Map'; let emitter; @@ -30,21 +31,16 @@ let GetCampaign = () => { return currentCampaign; }; let GetClient = () => { return currentPlayer; }; let chatMessageId = 0; -const chat = ref([ - /* { - id: 1, - author: "66ae8aea3e78bb669e25010d", - chunks: [ - { - id: 1, - type: "text", - content: "Hola test" - } - ] - } */ -]); +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) => { @@ -80,6 +76,10 @@ socket.on('message', (data) => { }); }); +function _SendMap(id){ + socket.emit('send_map', {id}); +} + function SendMessage(data){ socket.emit('message', data); } @@ -131,5 +131,6 @@ export { GetSystem, GetChatRef, - SendMessage + SendMessage, + _SendMap }; \ No newline at end of file diff --git a/client/src/services/Map.js b/client/src/services/Map.js index 4c027ce8..8f78a6fd 100644 --- a/client/src/services/Map.js +++ b/client/src/services/Map.js @@ -1,7 +1,7 @@ -import { initCustomFormatter, ref } from 'vue'; +import { initCustomFormatter, ref, toRaw } from 'vue'; import Api from '@/services/Api' -import { GetCampaign } from './Dragonroll'; +import { _SendMap, GetCampaign } from './Dragonroll'; import { backendUrl } from './BackendURL'; function dataURLtoFile(dataurl, filename) { @@ -144,6 +144,9 @@ let imageData = []; const currentMapId = ref(''); let GetMapId = () => currentMapId; +const currentGlobalMapId = ref(''); +let GetGlobalMapId = () => currentGlobalMapId; + let backgroundColor = ref('#0f0f0f'); function Draw(){ @@ -199,11 +202,21 @@ function ImportDD2VTT(data){ const mapList = ref([]); let GetMapList = () => mapList; +function GetMap(id){ + let map = undefined; + mapList.value.forEach((m) => { + if(m._id == id) map = m; + }); + return toRaw(map); +} + function UpdateMapList(){ - Api().get('/maps/list?campaign=' + GetCampaign()._id).then(response => { - mapList.value = response.data.data; - console.log(mapList.value); - }).catch((err) => console.log(err)); + return new Promise((resolve, reject) => { + Api().get('/maps/list?campaign=' + GetCampaign()._id).then(response => { + mapList.value = response.data.data; + resolve(); + }).catch((err) => console.log(err)); + }) } function ReloadImages(){ @@ -267,6 +280,11 @@ function CreateMap(){ } +function SendMap(id){ + currentGlobalMapId.value = id; + _SendMap(id); +} + let GetBackgroundColor = () => backgroundColor; function ChangeBackgroundColor(color){ backgroundColor.value = color; // XD @@ -287,9 +305,12 @@ export { GetBackgroundColor, ChangeBackgroundColor, GetMapId, + GetGlobalMapId, UpdateMapList, GetMapList, LoadMap, RenameMap, + GetMap, + SendMap }; \ No newline at end of file diff --git a/client/src/services/Windows.js b/client/src/services/Windows.js index 1ff810d6..326eb999 100644 --- a/client/src/services/Windows.js +++ b/client/src/services/Windows.js @@ -94,6 +94,21 @@ const defValues = { id: 'combat_window', title: "Combat", close: true + }, + 'entity_window': { + id: 'entity_window', + title: "Entities", + close: true + }, + 'characters_window': { + id: 'characters_window', + title: "Characters", + close: true + }, + 'compendium_window': { + id: 'compendium_window', + title: "Compendium", + close: true } } diff --git a/client/src/views/managers/GameManager.vue b/client/src/views/managers/GameManager.vue index 114e1928..63820e9a 100644 --- a/client/src/views/managers/GameManager.vue +++ b/client/src/views/managers/GameManager.vue @@ -39,6 +39,18 @@ function ToggleGrid(){ } +function OpenEntityWindow(){ + CreateWindow('entity_window'); +} + +function OpenCharactersWindow(){ + CreateWindow('characters_window'); +} + +function OpenCompendiumWindow(){ + CreateWindow('compendium_window'); +} + watch(game, () => { if(game.value && in_game.value){ AddSound(game.value); @@ -63,14 +75,15 @@ watch(game, () => { -
+
+
- - + +
diff --git a/client/src/views/managers/WindowManager.vue b/client/src/views/managers/WindowManager.vue index 74758278..fba58a31 100644 --- a/client/src/views/managers/WindowManager.vue +++ b/client/src/views/managers/WindowManager.vue @@ -22,6 +22,9 @@ import EnvironmentWindow from '../windows/dm/EnvironmentWindow.vue' import SystemSelectorWindow from '../windows/campaigns/SystemSelectorWindow.vue' import MapWindow from '../windows/dm/MapWindow.vue' import CombatWindow from '../windows/game/CombatWindow.vue' +import EntityWindow from '../windows/dm/EntityWindow.vue' +import CharactersWindow from '../windows/game/CharactersWindow.vue' +import CompendiumWindow from '../windows/game/CompendiumWindow.vue' // Gestionem ventanas const reload = ReloadRef(); @@ -44,7 +47,10 @@ const WindowMap = { environment: EnvironmentWindow, system_selector: SystemSelectorWindow, map_window: MapWindow, - combat_window: CombatWindow + combat_window: CombatWindow, + entity_window: EntityWindow, + characters_window: CharactersWindow, + compendium_window: CompendiumWindow }; diff --git a/client/src/views/partials/ChatComponent.vue b/client/src/views/partials/ChatComponent.vue index 09d35e16..07c4a75b 100644 --- a/client/src/views/partials/ChatComponent.vue +++ b/client/src/views/partials/ChatComponent.vue @@ -58,7 +58,7 @@ watch(chat, () => {
- +
@@ -126,7 +126,7 @@ watch(chat, () => { .chat-input-actions { display: flex; - flex-direction: column; + flex-direction: row; margin-bottom: 8px; margin-left: 10px; margin-right: 10px; diff --git a/client/src/views/partials/MapEntry.vue b/client/src/views/partials/MapEntry.vue index becabe50..58a8cb9a 100644 --- a/client/src/views/partials/MapEntry.vue +++ b/client/src/views/partials/MapEntry.vue @@ -1,15 +1,23 @@ @@ -40,6 +56,7 @@ onMounted(() => {
+
diff --git a/client/src/views/windows/dm/EntityWindow.vue b/client/src/views/windows/dm/EntityWindow.vue new file mode 100644 index 00000000..e8bb94dd --- /dev/null +++ b/client/src/views/windows/dm/EntityWindow.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/client/src/views/windows/game/CharactersWindow.vue b/client/src/views/windows/game/CharactersWindow.vue new file mode 100644 index 00000000..74af5e56 --- /dev/null +++ b/client/src/views/windows/game/CharactersWindow.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/client/src/views/windows/game/CompendiumWindow.vue b/client/src/views/windows/game/CompendiumWindow.vue new file mode 100644 index 00000000..dabc038e --- /dev/null +++ b/client/src/views/windows/game/CompendiumWindow.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/server/io/campaign.js b/server/io/campaign.js index d490f68e..0ae5cc9e 100644 --- a/server/io/campaign.js +++ b/server/io/campaign.js @@ -30,12 +30,22 @@ module.exports = io => { CampaignUser.findOne({campaign: campaignId, user}).then(async campaignUser => { if(campaignUser){ socket.join(campaignId); + socket.campaignUser = campaignUser; socket.campaign = campaignId; - if(!sessions[campaignId]) sessions[campaignId] = { - players: await GetOfflinePlayers(campaignId), - chat: [] - }; + if(!sessions[campaignId]){ sessions[campaignId] = { + players: await GetOfflinePlayers(campaignId), + chat: [] + }; + } else { + newPlayers = await GetOfflinePlayers(campaignId); + newPlayers.forEach(player => { + for(let i = 0; i < sessions[campaignId].players.length; i++){ + if(player._id == sessions[campaignId].players[i]._id) return; + } + sessions[campaignId].players.push(FilterUser(player)); + }) + } console.log(socket.user.username + " ha entrado!"); @@ -60,5 +70,14 @@ module.exports = io => { socket.on('message', (data) => { io.to(socket.campaign).emit('message', data); }) + + socket.on('send_map', (data) => { + console.log("SENDMAP") + if(!socket.campaignUser) return; + if(socket.campaignUser.is_dm){ + console.log("Sended!") + socket.to(socket.campaign).emit('change_map', data); + } + }) }); } \ No newline at end of file