UNPKG

comic-bubbles

Version:

Animated comic bubbles - what else?

76 lines (66 loc) 2.23 kB
import { getScene } from "./sceneCache.mjs" import { getResourceUrl } from "./helperFunctions.mjs" export let scenePrefs = undefined export let scenePrefsMap = new Map() export async function loadScenePrefs() { if (scenePrefs != undefined) return try { const jsonPath = getResourceUrl('scenePrefs JSON path', '/scenePrefs.json') const response = await fetch(jsonPath) scenePrefs = await response.json() } catch (error) { console.error(error) } } export async function injectScenePrefs(sceneId) { await loadScenePrefs() await flattenPrefs() fillObj(getScene(sceneId)) } function fillObj(obj) { for (let prop in obj) { //console.log(obj.getPrefStr() + '.' + prop) if (prop == 'parent' || prop == 'canvas') { continue } else if (Array.isArray(obj[prop])) { // console.log("...isArray") for (let arrIdx = 0; arrIdx < obj[prop].length; arrIdx++) { fillObj(obj[prop][arrIdx], scenePrefs) } } else if (obj[prop] === undefined || typeof obj[prop] === 'number' || typeof obj[prop] === 'string') { // console.log('scenePrefs.' + obj.getPrefStr() + '.' + prop) try { let key = obj.getPrefStr() + '.' + prop let scenePrefsValue = scenePrefsMap.get(key) if (scenePrefsValue !== null && scenePrefsValue != undefined) { if (key == 'scene.bubCon.bubble.arrow.width' && obj.parent.arrIdx == 0) { obj.parent.arrow.painted = true } if (key == 'scene.bubCon.bubble.connector.height' && obj.parent.arrIdx != 0) { obj.parent.connector.painted = true } obj[prop] = scenePrefsValue } } catch (exc) {} } else { fillObj(obj[prop]) } } } async function flattenPrefs() { if (scenePrefsMap.size > 0) return await loadScenePrefs() flattenPrefObj(scenePrefs, '', '') } function flattenPrefObj(obj, prefix) { let oldPrefix = prefix for (let prop in obj) { if (typeof obj[prop] === 'number' || typeof obj[prop] === 'string') { let objName = prefix + prop scenePrefsMap.set(objName, obj[prop]) } else { let newPrefix = oldPrefix + prop + '.' flattenPrefObj(obj[prop], newPrefix) } } }