This commit is contained in:
BinarySandia04 2024-09-27 15:02:19 +02:00
parent 55972e07af
commit ede69a2a7a
8 changed files with 110 additions and 85 deletions

View File

@ -60,6 +60,10 @@ function _UpdatePlayers(data){
}); });
} }
function GetCampaignModuleName(){
return GetCampaign().system;
}
export { export {
_currentCampaign, _currentCampaign,
_currentPlayer, _currentPlayer,
@ -68,5 +72,6 @@ export {
ConnectToCampaign, ConnectToCampaign,
DisplayCampaign, DisplayCampaign,
UpdateCampaignData, UpdateCampaignData,
GetCampaignModuleName,
Disconnect Disconnect
} }

View File

@ -24,8 +24,13 @@ function GetModule(id){
return module; return module;
} }
function CreateModule(moduleInfo, registeredWindows){
}
export { export {
ImportModule, ImportModule,
CreateModule,
GetModules, GetModules,
GetModule, GetModule,
GetModulesToLoad, GetModulesToLoad,

View File

@ -1,7 +1,71 @@
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import { Disconnect } from './Campaign'; import { Disconnect } from './Campaign';
const windows = ref([]) const windows = ref([]);
import LoginWindow from '@/views/windows/LoginWindow.vue'
import RegisterWindow from '@/views/windows/RegisterWindow.vue'
import ExampleWindow from '@/views/windows/ExampleWindow.vue'
import MainMenuWindow from '@/views/windows/MainMenuWindow.vue'
import EditProfileWindow from '@/views/windows/EditProfileWindow.vue'
import SettingsWindow from '@/views/windows/SettingsWindow.vue'
import CampaignListWindow from '@/views/windows/campaigns/CampaignListWindow.vue'
import NewCampaignWindow from '@/views/windows/campaigns/NewCampaignWindow.vue'
import JoinCampaignWindow from '@/views/windows/campaigns/JoinCampaignWindow.vue'
import CampaignPreviewWindow from '@/views/windows/campaigns/CampaignPreviewWindow.vue'
import ChatWindow from '@/views/windows/game/ChatWindow.vue'
import DiceWindow from '@/views/windows/game/DiceWindow.vue'
import MapButtons from '@/views/windows/dm/MapButtons.vue'
import EnvironmentWindow from '@/views/windows/dm/EnvironmentWindow.vue'
import SystemSelectorWindow from '@/views/windows/campaigns/SystemSelectorWindow.vue'
import MapWindow from '@/views/windows/dm/MapWindow.vue'
import CombatWindow from '@/views/windows/game/CombatWindow.vue'
import EntityWindow from '@/views/windows/dm/EntityWindow.vue'
import CharactersWindow from '@/views/windows/game/CharactersWindow.vue'
import WelcomeWindow from '@/views/windows/WelcomeWindow.vue'
import CompendiumWindow from '@/views/windows/CompendiumWindow.vue'
import BookAnvilWindow from '@/views/windows/BookAnvilWindow.vue'
import IconSelectorWindow from '@/views/windows/selectors/IconSelectorWindow.vue'
import DatabaseWindow from '@/views/windows/game/DatabaseWindow.vue'
import AccountManagementWindow from '@/views/windows/settings/AccountManagementWindow.vue'
import PluginManagementWindow from '@/views/windows/settings/PluginManagementWindow.vue'
let windowMap = {
test: ExampleWindow,
login: LoginWindow,
main_menu: MainMenuWindow,
welcome: WelcomeWindow,
register: RegisterWindow,
edit_profile: EditProfileWindow,
settings: SettingsWindow,
campaign_list: CampaignListWindow,
new_campaign: NewCampaignWindow,
join_campaign: JoinCampaignWindow,
campaign_preview: CampaignPreviewWindow,
chat: ChatWindow,
dice_menu: DiceWindow,
map_buttons: MapButtons,
environment: EnvironmentWindow,
system_selector: SystemSelectorWindow,
map_window: MapWindow,
combat_window: CombatWindow,
entity_window: EntityWindow,
characters_window: CharactersWindow,
compendium_window: CompendiumWindow,
book_anvil_window: BookAnvilWindow,
icon_selector: IconSelectorWindow,
database: DatabaseWindow,
plugin_management: PluginManagementWindow,
account_management: AccountManagementWindow
};
async function InjectWindow(plugin, window_type, window_component){
let systemWidows = {};
systemWidows[plugin + "/" + window_type] = (await import(`../../plugins/${plugin}/views/${window_component}.vue`)).default;
windowMap = {...windowMap, ...systemWidows};
console.log("Window injected");
}
// Presets // Presets
const defValues = { const defValues = {
@ -119,11 +183,6 @@ const defValues = {
title: "Compendium", title: "Compendium",
close: () => ClearWindow('compendium_window') close: () => ClearWindow('compendium_window')
}, },
'character_sheet': {
id: 'character_sheet',
title: 'Character Sheet',
close: () => ClearWindow('character_sheet')
},
'book_anvil_window': { 'book_anvil_window': {
id: 'book_anvil_window', id: 'book_anvil_window',
title: "Book Anvil", title: "Book Anvil",
@ -147,6 +206,7 @@ const reload = ref(0);
let ReloadRef = () => { return reload }; let ReloadRef = () => { return reload };
let Windows = () => { return windows }; let Windows = () => { return windows };
let WindowMap = () => { return windowMap };
let currentIndex = 10; let currentIndex = 10;
@ -403,6 +463,8 @@ export {
SetPosition, SetPosition,
ResetPosition, ResetPosition,
Windows, Windows,
WindowMap,
InjectWindow,
ReloadRef, ReloadRef,
ClearWindows, ClearWindows,
CreateWindow, CreateWindow,

View File

@ -1,88 +1,17 @@
<script setup> <script setup>
import { ref, reactive, defineComponent, TransitionGroup } from 'vue' import { TransitionGroup } from 'vue'
import { RouterLink, RouterView } from 'vue-router' import { Windows, ReloadRef, WindowMap } from '@/services/Windows';
import { defineAsyncComponent } from 'vue'
import LoginWindow from '@/views/windows/LoginWindow.vue'
import RegisterWindow from '@/views/windows/RegisterWindow.vue'
import ExampleWindow from '@/views/windows/ExampleWindow.vue'
import MainMenuWindow from '@/views/windows/MainMenuWindow.vue'
import EditProfileWindow from '@/views/windows/EditProfileWindow.vue'
import SettingsWindow from '../windows/SettingsWindow.vue'
import { Windows, ReloadRef } from '@/services/Windows';
import CampaignListWindow from '../windows/campaigns/CampaignListWindow.vue'
import NewCampaignWindow from '../windows/campaigns/NewCampaignWindow.vue'
import JoinCampaignWindow from '../windows/campaigns/JoinCampaignWindow.vue'
import CampaignPreviewWindow from '@/views/windows/campaigns/CampaignPreviewWindow.vue'
import ChatWindow from '../windows/game/ChatWindow.vue'
import DiceWindow from '../windows/game/DiceWindow.vue'
import MapButtons from '../windows/dm/MapButtons.vue'
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 WelcomeWindow from '../windows/WelcomeWindow.vue'
import CompendiumWindow from '../windows/CompendiumWindow.vue'
import BookAnvilWindow from '../windows/BookAnvilWindow.vue'
import IconSelectorWindow from '../windows/selectors/IconSelectorWindow.vue'
import DatabaseWindow from '../windows/game/DatabaseWindow.vue'
import AccountManagementWindow from '../windows/settings/AccountManagementWindow.vue'
import PluginManagementWindow from '../windows/settings/PluginManagementWindow.vue'
// Gestionem ventanas // Gestionem ventanas
const reload = ReloadRef(); const reload = ReloadRef();
const windows = Windows(); const windows = Windows();
let WindowMap = {
test: ExampleWindow,
login: LoginWindow,
main_menu: MainMenuWindow,
welcome: WelcomeWindow,
register: RegisterWindow,
edit_profile: EditProfileWindow,
settings: SettingsWindow,
campaign_list: CampaignListWindow,
new_campaign: NewCampaignWindow,
join_campaign: JoinCampaignWindow,
campaign_preview: CampaignPreviewWindow,
chat: ChatWindow,
dice_menu: DiceWindow,
map_buttons: MapButtons,
environment: EnvironmentWindow,
system_selector: SystemSelectorWindow,
map_window: MapWindow,
combat_window: CombatWindow,
entity_window: EntityWindow,
characters_window: CharactersWindow,
compendium_window: CompendiumWindow,
book_anvil_window: BookAnvilWindow,
icon_selector: IconSelectorWindow,
database: DatabaseWindow,
plugin_management: PluginManagementWindow,
account_management: AccountManagementWindow
};
async function InjectSystemWindows(system){
// Hack
let systemWidows = {
character_sheet: (await import(`../../../plugins/${system}/views/CharacterSheet.vue`)).default,
item_sheet: (await import(`../../../plugins/${system}/views/ItemSheet.vue`)).default,
create_item_prompt: (await import(`../../../plugins/${system}/views/CreateItemPrompt.vue`)).default,
};
WindowMap = {...WindowMap, ...systemWidows};
}
InjectSystemWindows('dnd-5e')
</script> </script>
<template> <template>
<div class="window-container" :key="reload"> <div class="window-container" :key="reload">
<TransitionGroup name="window"> <TransitionGroup name="window">
<component v-for="win in windows" :is="WindowMap[win.type]" :key="win.id" :data="win"></component> <component v-for="win in windows" :is="WindowMap()[win.type]" :key="win.id" :data="win"></component>
</TransitionGroup> </TransitionGroup>
</div> </div>
</template> </template>

View File

@ -4,7 +4,8 @@ import WindowHandle from '@/views/partials/WindowHandle.vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import GameEntry from '../../partials/GameEntry.vue'; import GameEntry from '../../partials/GameEntry.vue';
import { CreateWindow, SetMinSize, SetMaxSize, SetResizable } from '../../../services/Windows'; import { CreateWindow, SetMinSize, SetMaxSize, SetResizable, ClearWindow } from '../../../services/Windows';
import { GetCampaignModuleName } from '../../../services/Campaign';
const props = defineProps(['data']); const props = defineProps(['data']);
const data = props.data; const data = props.data;
@ -24,7 +25,11 @@ onMounted(() => {
// temp // temp
function openCharacterSheet(){ function openCharacterSheet(){
CreateWindow('character_sheet'); CreateWindow(`${GetCampaignModuleName()}/character_sheet`, {
id: 'character_sheet',
title: 'Character Sheet',
close: () => ClearWindow(`character_sheet`)
});
} }
</script> </script>

View File

@ -7,6 +7,7 @@ import IconButton from '@/views/partials/game/IconButton.vue'
import ConceptList from '../../partials/ConceptList.vue'; import ConceptList from '../../partials/ConceptList.vue';
import { FetchConcepts, GetConcepts } from '../../../services/Data'; import { FetchConcepts, GetConcepts } from '../../../services/Data';
import Tabs from '../../partials/Tabs.vue'; import Tabs from '../../partials/Tabs.vue';
import { GetCampaignModuleName } from '../../../services/Campaign';
const handle = ref(null); const handle = ref(null);
@ -33,12 +34,13 @@ onMounted(() => {
FetchConcepts(); FetchConcepts();
}); });
function OpenCreateItemPrompt(){ function OpenCreateItemPrompt(){
CreateWindow('create_item_prompt', {id: 'create_item_prompt', title: 'Create Item', close: () => ClearWindow('create_item_prompt')}) CreateWindow(`${GetCampaignModuleName()}/create_item_prompt`, {id: 'create_item_prompt', title: 'Create Item', close: () => ClearWindow('create_item_prompt')})
} }
function OpenConcept(element){ function OpenConcept(element){
CreateWindow('item_sheet', { console.log(`${GetCampaignModuleName()}/item_sheet`);
CreateWindow(`${GetCampaignModuleName()}/item_sheet`, {
id: 'item_sheet_' + element._id, id: 'item_sheet_' + element._id,
title: 'Edit Item', title: 'Edit Item',
item_id: element._id, item_id: element._id,

View File

@ -4,6 +4,23 @@
function Main(Api){ function Main(Api){
console.log("Hello World!"); console.log("Hello World!");
console.log(Api); console.log(Api);
Api.Modules.CreateModule({
"id": "dnd-5e",
"title": "Dungeons & Dragons 5e",
"description": "Dungeons & Dragons Fifth edition game system support",
"authors": [
{
"name": "Aran Roig"
}
],
"version": "1.0.0",
"color": "#e92026"
});
Api.Windows.InjectWindow('dnd-5e', 'character_sheet', 'CharacterSheet');
Api.Windows.InjectWindow('dnd-5e', 'item_sheet', 'ItemSheet');
Api.Windows.InjectWindow('dnd-5e', 'create_item_prompt', 'CreateItemPrompt');
} }
export { Main }; export { Main };

View File

@ -53,7 +53,6 @@ console.log("Generated " + iconCount + " icons");
// #region locales // #region locales
const locales = fs.readdirSync("./locales"); const locales = fs.readdirSync("./locales");
console.log(locales);
function deepMerge(obj1, obj2) { function deepMerge(obj1, obj2) {
for (let key in obj2) { for (let key in obj2) {
@ -106,4 +105,5 @@ fs.writeFileSync(outputPath, JSON.stringify({
icons, icons,
plugins plugins
}, null, "\t")); }, null, "\t"));
console.log("Installed plugins")
// #endregion // #endregion