UNPKG

@drincs/pixi-vn-json

Version:

Pixi'VN can be integrated with JSON files to create a visual novel.

3 lines (2 loc) 13.3 kB
'use strict';var pixiVn=require('@drincs/pixi-vn');var J="___param___";var b=class i{static _beforeToTranslate=void 0;static _translate=t=>t;static _afterToTranslate=void 0;static t(t){return Array.isArray(t)?t.map(e=>i.translate(`${e}`)):i.translate(`${t}`)}static set beforeToTranslate(t){i._beforeToTranslate=t;}static set translate(t){i._translate=t;}static get translate(){return t=>{let e=t;return i._beforeToTranslate&&(e=i._beforeToTranslate(e)),e=i._translate(e),i._afterToTranslate&&(e=i._afterToTranslate(e)),e}}static set afterToTranslate(t){i._afterToTranslate=t;}static addKey(t,e,n){let a=n.defaultValue||"empty_string";typeof e=="string"&&(e=[e]),Array.isArray(e)&&e.forEach(o=>{t[o]===void 0&&(a==="empty_string"?t[o]="":a==="copy_key"&&(i._beforeToTranslate?t[o]=i._beforeToTranslate(o):t[o]=o));});}static getConditionalsThenElse(t,e=[]){if(typeof t=="object"&&t&&"type"in t)if(t.type==="ifelse")t.then&&i.getConditionalsThenElse(t.then,e),t.else&&i.getConditionalsThenElse(t.else,e);else if(t.type==="stepswitch"){if(t.elements)if(Array.isArray(t.elements))t.elements.forEach(n=>{i.getConditionalsThenElse(n,e);});else if(t.elements.type==="ifelse"){let n=[];i.getConditionalsThenElse(t.elements,n),n.forEach(a=>{e.push(...a);});}else if(t.elements.type==="stepswitch"){let n=[];i.getConditionalsThenElse(t.elements,n),n.forEach(a=>{e.push(...a);});}else i.getConditionalsThenElse(t.elements,e);}else t.type==="resulttocombine"?(t.firstItem&&i.getConditionalsThenElse(t.firstItem,e),t.secondConditionalItem&&t.secondConditionalItem.forEach(n=>{i.getConditionalsThenElse(n,e);})):e.push(t);else t&&e.push(t);return e}static generateJsonTranslation(t,e={},n={}){return t.forEach(a=>{if(a.choices){let o=[];Array.isArray(a.choices)?o=[a.choices]:o=i.getConditionalsThenElse(a.choices),o.forEach(c=>c.forEach(s=>{if("type"in s){let l=[];s.type==="ifelse"||s.type==="stepswitch"?i.getConditionalsThenElse(s,l):l=[s],l.map(d=>i.getConditionalsThenElse(d.text)).forEach(d=>{Array.isArray(d)&&d.forEach(y=>{Array.isArray(y)?y.forEach(V=>{typeof V=="string"?i.addKey(e,V,n):i.getConditionalsThenElse(V).forEach(h=>{Array.isArray(h)?h.forEach(P=>{typeof P=="string"&&i.addKey(e,P,n);}):typeof h=="string"&&i.addKey(e,h,n);});}):typeof y=="string"&&i.addKey(e,y,n);});});}}));}if(a.dialogue){let o=[];Array.isArray(a.dialogue)?o=[a.dialogue]:o=i.getConditionalsThenElse(a.dialogue),o.forEach(c=>{typeof c=="string"?i.addKey(e,c,n):"text"in c&&Array.isArray(c.text)&&c.text.forEach(s=>{typeof s=="string"?i.addKey(e,s,n):i.getConditionalsThenElse(s).forEach(u=>{typeof u=="string"?i.addKey(e,u,n):Array.isArray(u)&&u.forEach(d=>{typeof d=="string"?i.addKey(e,d,n):i.getConditionalsThenElse(d).forEach(y=>{typeof y=="string"&&i.addKey(e,y,n);});});});});});}a.conditionalStep&&i.getConditionalsThenElse(a.conditionalStep).forEach(c=>{Array.isArray(c)?i.generateJsonTranslation(c,e,n):i.generateJsonTranslation([c],e,n);});}),e}};var E=b;function L(i,t){return Math.floor(Math.random()*(t-i+1)+i)}function G(i){if(Array.isArray(i)||!i)return i;if(i&&typeof i=="object"&&"type"in i)switch(i.type){case "resulttocombine":return F(i);case "ifelse":return r(i.condition)?r(i.then):r(i.else);case "stepswitch":let e=r(i.elements)||[];if(e.length===0){console.error("[Pixi\u2019VN Json] getValueFromConditionalStatements elements.length === 0");return}switch(i.choiceType){case "random":let n=L(0,e.length-1);return r(e[n]);case "loop":let a=pixiVn.NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return a>e.length-1&&(a=a%e.length),r(e[a]);case "sequential":let o,c=pixiVn.NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return i.end=="lastItem"&&(o=r(e[e.length-1])),c>e.length-1?o:r(e[c]);case "sequentialrandom":let s=pixiVn.NarrationManagerStatic.getRandomNumber(0,e.length-1,{nestedId:i.nestedId,onceOnly:true});if(s==null&&i.end=="lastItem"){let l=pixiVn.NarrationManagerStatic.getCurrentStepTimesCounterData(i.nestedId);if(!l||!l?.usedRandomNumbers){console.warn("[Pixi\u2019VN Json] getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}let u=l.usedRandomNumbers[`0-${e.length-1}`];return r(e[u[u.length-1]])}if(s==null){console.warn("[Pixi\u2019VN Json] getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}return r(e[s])}}return i}function I(i){if(i.conditionalStep){let t=pixiVn.createExportableElement(r(i.conditionalStep));if(t?.glueEnabled===void 0&&delete t?.glueEnabled,t?.goNextStep===void 0&&delete t?.goNextStep,t?.end===void 0&&delete t?.end,t?.choices===void 0&&delete t?.choices,t?.dialogue===void 0&&delete t?.dialogue,t?.labelToOpen===void 0&&delete t?.labelToOpen,t?.operations===void 0&&delete t?.operations,t){let e={...i,conditionalStep:void 0,...t};return I(e)}else pixiVn.storage.getFlag(pixiVn.SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY)&&pixiVn.storage.setFlag(pixiVn.SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY,false);}return i}function F(i){let t=i.firstItem,e=[];i.secondConditionalItem?.forEach(a=>{if(Array.isArray(a))a.forEach(o=>{let c=r(o);e.push(c);});else {let o=r(a);e.push(o);}});let n=t?[t,...e]:e;if(n.length===0){console.warn("[Pixi\u2019VN Json] combinateResult toCheck.length === 0");return}if(typeof n[0]=="string")return E.t(n).join("");if(typeof n[0]=="object"){let a=n,o,c=a.map((f,m)=>{f=I(f);let p=r(f.dialogue)||"";return m===0?(o=r(f.glueEnabled)||false,p):(typeof p=="object"&&"text"in p&&(p=p.character+": "+p.text),o===false&&(p=` `+p),o=r(f.glueEnabled)||false,p)}),s=r(c[0]),l=typeof s=="object"&&"character"in s?s.character:void 0,u=c.map(f=>{let m;f&&typeof f=="object"&&"text"in f?m=f.text:m=f;let p;return Array.isArray(m)?p=m.map(v=>{let R=r(v);return E.t(`${R}`)}).join(""):p=r(m)||"",E.t(p)}).join(""),d=a.find(f=>f.end),y=a.find(f=>f.choices),V=false,h=false;a.length>0&&(a[0].glueEnabled&&a[0].goNextStep&&a[0].dialogue===void 0&&pixiVn.storage.setFlag(pixiVn.SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY,true),V=a[a.length-1].glueEnabled,h=a.reverse().find(f=>!(f.operations&&(!f.dialogue||!f.choices)))?.goNextStep);let P=a.find(f=>f.labelToOpen),w=[];return a.forEach(f=>{f.operations&&w.forEach(m=>{w.push(m);});}),{dialogue:l?{character:l,text:u}:u,end:d?.end,choices:y?.choices,glueEnabled:V,goNextStep:h,labelToOpen:P?.labelToOpen,operations:w}}}function _(i){if(!i)return false;if(typeof i!="object"||!("type"in i))return !!i;switch(i.type){case "compare":let t=r(i.leftValue),e=r(i.rightValue);switch(i.operator){case "==":return t===e;case "!=":return t!==e;case "<":return t<e;case "<=":return t<=e;case ">":return t>e;case ">=":return t>=e;case "CONTAINS":return t.toString().includes(e.toString())}break;case "valueCondition":return !!r(i.value);case "union":return M(i)}return !!i}function $(i){if(i&&typeof i=="object"&&"type"in i&&i.type==="value"&&i.storageOperationType==="get")switch(i.storageType){case "storage":case "tempstorage":return pixiVn.storage.getVariable(i.key);case "flagStorage":return pixiVn.storage.getFlag(i.key);case "label":return pixiVn.narration.getTimesLabelOpened(i.label);case "choice":return pixiVn.narration.getTimesChoiceMade(i.index);case "logic":return r(i.operation);case "params":let t=pixiVn.storage.getVariable(`${J}${pixiVn.narration.openedLabels.length-1}`)||[];if(t&&t.length>i.key)return t[i.key];console.warn("[Pixi\u2019VN Json] getValue params not found");return}return i}function M(i){if(i.unionType==="not")return !r(i.condition);let t=i.unionType==="and";for(let e=0;e<i.conditions.length;e++)if(t=r(i.conditions[e])||false,i.unionType==="and"){if(!t)return false}else if(t)return true;return t}function O(i){let t=r(i.value),e;switch(t&&typeof t=="object"&&"type"in t?e=r(t):e=t,i.storageType){case "flagStorage":pixiVn.storage.setFlag(i.key,i.value);break;case "storage":pixiVn.storage.setVariable(i.key,e);break;case "tempstorage":pixiVn.storage.setTempVariable(i.key,e);break;case "params":let n=pixiVn.storage.getVariable(`${J}${pixiVn.narration.openedLabels.length-1}`)||[];n&&n.length-1>=i.key&&(n[i.key]=e),pixiVn.storage.setTempVariable(`${J}${pixiVn.narration.openedLabels.length-1}`,n);break}}function r(i){let t=G(i);if(t&&typeof t=="object"&&"type"in t)switch(t.type){case "value":return $(t);case "arithmetic":case "arithmeticsingle":return K(t);case "compare":case "valueCondition":case "union":return _(t)}return t}function K(i){let t=r(i.leftValue);switch(i.type){case "arithmetic":let e=r(i.rightValue);switch(i.operator){case "*":return t*e;case "/":return t/e;case "+":return t+e;case "-":return t-e;case "%":return t%e;case "POW":return Math.pow(t,e);case "RANDOM":return pixiVn.narration.getRandomNumber(t,e)}case "arithmeticsingle":switch(i.operator){case "INT":return parseInt(t);case "FLOOR":return Math.floor(t);case "FLOAT":return parseFloat(t)}break}}async function fe(i,t){let e=r(i);if(e)switch(e.type){case "sound":switch(e.operationType){case "play":pixiVn.sound.play(e.alias,e.props);break;case "stop":pixiVn.sound.stop(e.alias);break;case "pause":pixiVn.sound.pause(e.alias);break;case "resume":pixiVn.sound.resume(e.alias);break;case "volume":pixiVn.sound.volume(e.alias,e.value);break}break;case "assets":switch(e.operationType){case "load":let s=e.assets.map(l=>pixiVn.Assets.load(l));await Promise.all(s);break}break;case "image":switch(e.operationType){case "show":let s=new pixiVn.ImageSprite(e.props,e.url||e.alias);await A(s,e);break;case "edit":let l=pixiVn.canvas.find(e.alias);l?e.props&&await l.setMemory({...l.memory,...e.props}):console.error(`[Pixi\u2019VN Json] Image with alias ${e.alias} not found.`);break;case "remove":k(e);break}break;case "video":switch(e.operationType){case "show":let s=new pixiVn.VideoSprite(e.props,e.url||e.alias);await A(s,e);break;case "edit":let l=pixiVn.canvas.find(e.alias);l?e.props&&await l.setMemory({...l.memory,...e.props}):console.error(`[Pixi\u2019VN Json] Video with alias ${e.alias} not found.`);break;case "remove":k(e);break;case "pause":let u=pixiVn.canvas.find(e.alias);u?u.paused=true:console.error(`[Pixi\u2019VN Json] Video with alias ${e.alias} not found.`);break;case "resume":let d=pixiVn.canvas.find(e.alias);d?d.paused=false:console.error(`[Pixi\u2019VN Json] Video with alias ${e.alias} not found.`);break}break;case "imagecontainer":switch(e.operationType){case "show":let s=new pixiVn.ImageContainer(e.props,e.urls);await A(s,e);break;case "edit":let l=pixiVn.canvas.find(e.alias);l?e.props&&await l.setMemory({...l.memory,...e.props}):console.error(`[Pixi\u2019VN Json] ImageContainer with alias ${e.alias} not found.`);break;case "remove":k(e);break}break;case "canvaselement":switch(e.operationType){case "edit":try{let s=pixiVn.canvas.find(e.alias);s?e.props&&(s.memory={...s.memory,...e.props}):console.error(`[Pixi\u2019VN Json] Canvas Element with alias ${e.alias} not found.`);}catch(s){console.error(`[Pixi\u2019VN Json] There was an error while trying to edit the canvas element with alias ${e.alias}.`,s);}break;case "remove":k(e);break}break;case "value":O(e);break;case "operationtoconvert":if(t){let s="";e.values.forEach(u=>{if(typeof u=="string")s+=u;else {let d=r(u);s+=`${d}`;}});let l=await t(s);l&&await fe(l,t);}break;case "input":switch(e.operationType){case "request":pixiVn.narration.requestInput({type:e.valueType},e.defaultValue);break}break;case "fade":let n=new pixiVn.FadeAlphaTicker(e.props,e.duration,e.priority);pixiVn.canvas.addTicker(e.alias,n);break;case "move":let a=new pixiVn.MoveTicker(e.props,e.duration,e.priority);pixiVn.canvas.addTicker(e.alias,a);break;case "rotate":let o=new pixiVn.RotateTicker(e.props,e.duration,e.priority);pixiVn.canvas.addTicker(e.alias,o);break;case "zoom":let c=new pixiVn.ZoomTicker(e.props,e.duration,e.priority);pixiVn.canvas.addTicker(e.alias,c);break;case "shake":await pixiVn.shakeEffect(e.alias,e.props,e.priority);break}}async function A(i,t){if(t.transition)switch(t.transition.type){case "fade":await pixiVn.showWithFadeTransition(t.alias,i,t.transition.props,t.transition.priority);break;case "dissolve":await pixiVn.showWithDissolveTransition(t.alias,i,t.transition.props,t.transition.priority);break;case "movein":case "moveout":await pixiVn.moveIn(t.alias,i,t.transition.props,t.transition.priority);break;case "zoomin":case "zoomout":await pixiVn.zoomIn(t.alias,i,t.transition.props,t.transition.priority);break;case "pushin":case "pushout":await pixiVn.pushIn(t.alias,i,t.transition.props,t.transition.priority);break}else await i.load(),pixiVn.canvas.add(t.alias,i);}function k(i){if(i.transition)switch(i.transition.type){case "fade":pixiVn.removeWithFadeTransition(i.alias,i.transition.props,i.transition.priority);break;case "dissolve":pixiVn.removeWithDissolveTransition(i.alias,i.transition.props,i.transition.priority);break;case "movein":case "moveout":pixiVn.moveOut(i.alias,i.transition.props,i.transition.priority);break;case "zoomin":case "zoomout":pixiVn.zoomOut(i.alias,i.transition.props,i.transition.priority);break;case "pushin":case "pushout":pixiVn.pushOut(i.alias,i.transition.props,i.transition.priority);break}else pixiVn.canvas.remove(i.alias);}exports.removeCanvasElement=k;exports.runOperation=fe;exports.showCanvasElemet=A;