diff --git a/plugins/rollup.js b/plugins/rollup.js index a39f584..12aa12e 100644 --- a/plugins/rollup.js +++ b/plugins/rollup.js @@ -35,6 +35,7 @@ const light = require('../types/light.js'); const text = require('../types/text.js'); //const fog = require('../types/fog.js'); // const background = require('../types/background.js'); +const gamesettings = require('../types/gamesettings.js'); const rendersettings = require('../types/rendersettings.js'); const spawnpoint = require('../types/spawnpoint.js'); const wind = require('../types/wind.js'); @@ -66,6 +67,7 @@ const loaders = { // fog, // background, rendersettings, + gamesettings, spawnpoint, lore, quest, @@ -92,7 +94,7 @@ const _getType = id => { } let extension; let match2; - if (match2 = type.match(/^application\/(light|text|rendersettings|spawnpoint|lore|quest|npc|mob|react|group|wind)$/)) { + if (match2 = type.match(/^application\/(light|text|rendersettings|gamesettings|spawnpoint|lore|quest|npc|mob|react|group|wind)$/)) { extension = match2[1]; } else if (match2 = type.match(/^application\/(javascript)$/)) { extension = 'js'; diff --git a/type_templates/gamesettings.js b/type_templates/gamesettings.js new file mode 100644 index 0000000..f84756e --- /dev/null +++ b/type_templates/gamesettings.js @@ -0,0 +1,36 @@ +// import * as THREE from 'three'; +import metaversefile from 'metaversefile'; +const {useApp, useGameSettingsManager, useCleanup} = metaversefile; + +export default e => { + const app = useApp(); + const gameSettings = useGameSettingsManager(); + + const srcUrl = ${this.srcUrl}; + + let live = true; + let json = null; + let localGameSettings = null; + (async () => { + const res = await fetch(srcUrl); + if (!live) return; + json = await res.json(); + console.log('json is', json) + if (!live) return; + localGameSettings = gameSettings.makeGameSettings(json); + })(); + + useCleanup(() => { + live = false; + localGameSettings = null; + }); + + app.getGameSettings = () => localGameSettings; + + return app; +}; +export const contentId = ${this.contentId}; +export const name = ${this.name}; +export const description = ${this.description}; +export const type = 'gamesettings'; +export const components = ${this.components}; \ No newline at end of file diff --git a/types/gamesettings.js b/types/gamesettings.js new file mode 100644 index 0000000..ced8d4f --- /dev/null +++ b/types/gamesettings.js @@ -0,0 +1,32 @@ +const path = require('path'); +const fs = require('fs'); +const {fillTemplate, createRelativeFromAbsolutePath, parseIdHash} = require('metaversefile/util.js'); + +const templateString = fs.readFileSync(path.join(__dirname, '..', 'type_templates', 'gamesettings.js'), 'utf8'); + +module.exports = { + load(id) { + + id = createRelativeFromAbsolutePath(id); + + const { + contentId, + name, + description, + components, + } = parseIdHash(id); + + const code = fillTemplate(templateString, { + srcUrl: JSON.stringify(id), + contentId: JSON.stringify(contentId), + name: JSON.stringify(name), + description: JSON.stringify(description), + components: JSON.stringify(components), + }); + console.log('code is', code); + return { + code, + map: null, + }; + }, +}; \ No newline at end of file