@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
JavaScript
import {shakeEffect,ZoomTicker,canvas,RotateTicker,MoveTicker,FadeAlphaTicker,narration,ImageContainer,VideoSprite,ImageSprite,sound,pushIn,zoomIn,moveIn,showWithDissolve,showWithFade,pushOut,zoomOut,moveOut,removeWithDissolve,removeWithFade,storage,Assets,NarrationManagerStatic,SYSTEM_RESERVED_STORAGE_KEYS,createExportableElement}from'@drincs/pixi-vn';var d;(a=>(a.log=(s,...l)=>console.log(`[Pixi\u2019VN Json] ${s}`,...l),a.warn=(s,...l)=>console.warn(`[Pixi\u2019VN Json] ${s}`,...l),a.error=(s,...l)=>console.error(`[Pixi\u2019VN Json] ${s}`,...l),a.info=(s,...l)=>console.info(`[Pixi\u2019VN Json] ${s}`,...l)))(d||={});var E="___param___";var N=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(s=>{t[s]===void 0&&(a==="empty_string"?t[s]="":a==="copy_key"&&(i._beforeToTranslate?t[s]=i._beforeToTranslate(s):t[s]=s));});}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 s=[];Array.isArray(a.choices)?s=[a.choices]:s=i.getConditionalsThenElse(a.choices),s.forEach(l=>l.forEach(o=>{if("type"in o){let f=[];o.type==="ifelse"||o.type==="stepswitch"?i.getConditionalsThenElse(o,f):f=[o],f.map(p=>i.getConditionalsThenElse(p.text)).forEach(p=>{Array.isArray(p)&&p.forEach(T=>{Array.isArray(T)?T.forEach(V=>{typeof V=="string"?i.addKey(e,V,n):i.getConditionalsThenElse(V).forEach(x=>{Array.isArray(x)?x.forEach(P=>{typeof P=="string"&&i.addKey(e,P,n);}):typeof x=="string"&&i.addKey(e,x,n);});}):typeof T=="string"&&i.addKey(e,T,n);});});}}));}if(a.dialogue){let s=[];Array.isArray(a.dialogue)?s=[a.dialogue]:s=i.getConditionalsThenElse(a.dialogue),s.forEach(l=>{typeof l=="string"?i.addKey(e,l,n):"text"in l&&Array.isArray(l.text)&&l.text.forEach(o=>{typeof o=="string"?i.addKey(e,o,n):i.getConditionalsThenElse(o).forEach(u=>{typeof u=="string"?i.addKey(e,u,n):Array.isArray(u)&&u.forEach(p=>{typeof p=="string"?i.addKey(e,p,n):i.getConditionalsThenElse(p).forEach(T=>{typeof T=="string"&&i.addKey(e,T,n);});});});});});}a.conditionalStep&&i.getConditionalsThenElse(a.conditionalStep).forEach(l=>{Array.isArray(l)?i.generateJsonTranslation(l,e,n):i.generateJsonTranslation([l],e,n);});}),e}};var k=N;function F(i,t){return Math.floor(Math.random()*(t-i+1)+i)}function _(i){if(Array.isArray(i)||!i)return i;if(i&&typeof i=="object"&&"type"in i)switch(i.type){case "resulttocombine":return M(i);case "ifelse":return r(i.condition)?r(i.then):r(i.else);case "stepswitch":let e=r(i.elements)||[];if(e.length===0){d.error("getValueFromConditionalStatements elements.length === 0");return}switch(i.choiceType){case "random":let n=F(0,e.length-1);return r(e[n]);case "loop":let a=NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return a>e.length-1&&(a=a%e.length),r(e[a]);case "sequential":let s,l=NarrationManagerStatic.getCurrentStepTimesCounter(i.nestedId)-1;return i.end=="lastItem"&&(s=r(e[e.length-1])),l>e.length-1?s:r(e[l]);case "sequentialrandom":let o=NarrationManagerStatic.getRandomNumber(0,e.length-1,{nestedId:i.nestedId,onceOnly:true});if(o==null&&i.end=="lastItem"){let f=NarrationManagerStatic.getCurrentStepTimesCounterData(i.nestedId);if(!f||!f?.usedRandomNumbers){d.warn("getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}let u=f.usedRandomNumbers[`0-${e.length-1}`];return r(e[u[u.length-1]])}if(o==null){d.warn("getValueFromConditionalStatements randomIndexWhitExclude == undefined");return}return r(e[o])}}return i}function v(i){if(i.conditionalStep){let t=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 v(e)}else storage.getFlag(SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY)&&storage.setFlag(SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY,false);}return i}function M(i){let t=i.firstItem,e=[];i.secondConditionalItem?.forEach(a=>{if(Array.isArray(a))a.forEach(s=>{let l=r(s);e.push(l);});else {let s=r(a);e.push(s);}});let n=t?[t,...e]:e;if(n.length===0){d.warn("combinateResult toCheck.length === 0");return}if(typeof n[0]=="string")return k.t(n);if(typeof n[0]=="object"){let a=n,s,l=a.map((c,h)=>{c=v(c);let y=r(c.dialogue)||"";return h===0?(s=r(c.glueEnabled)||false,y):(typeof y=="object"&&"text"in y&&(y=y.character+": "+y.text),s===false&&(y=`
`+y),s=r(c.glueEnabled)||false,y)}),o=r(l[0]),f=typeof o=="object"&&"character"in o?o.character:void 0,u=l.flatMap(c=>{let h;c&&typeof c=="object"&&"text"in c?h=c.text:h=c;let y;return Array.isArray(h)?y=h.map(L=>{let G=r(L);return k.t(`${G}`)}):y=r(h)||"",k.t(y)}),p=a.find(c=>c.end),T=a.find(c=>c.choices),V=false,x=false;a.length>0&&(a[0].glueEnabled&&a[0].goNextStep&&a[0].dialogue===void 0&&storage.setFlag(SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY,true),V=a[a.length-1].glueEnabled,x=a.reverse().find(c=>!(c.operations&&(!c.dialogue||!c.choices)))?.goNextStep);let P=a.find(c=>c.labelToOpen),A=[];return a.forEach(c=>{c.operations&&A.forEach(h=>{A.push(h);});}),{dialogue:f?{character:f,text:u}:u,end:p?.end,choices:T?.choices,glueEnabled:V,goNextStep:x,labelToOpen:P?.labelToOpen,operations:A}}}function K(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 W(i)}return !!i}function z(i){if(i&&typeof i=="object"&&"type"in i&&i.type==="value"&&i.storageOperationType==="get")switch(i.storageType){case "storage":case "tempstorage":return storage.getVariable(i.key);case "flagStorage":return storage.getFlag(i.key);case "label":return narration.getTimesLabelOpened(i.label);case "choice":return narration.getTimesChoiceMade(i.index);case "logic":return r(i.operation);case "params":let t=storage.getVariable(`${E}${narration.openedLabels.length-1}`)||[];if(t&&t.length>i.key)return t[i.key];d.warn("getValue params not found");return}return i}function W(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 R(i){let t=r(i.value),e;switch(t&&typeof t=="object"&&"type"in t?e=r(t):e=t,i.storageType){case "flagStorage":storage.setFlag(i.key,i.value);break;case "storage":storage.setVariable(i.key,e);break;case "tempstorage":storage.setTempVariable(i.key,e);break;case "params":let n=storage.getVariable(`${E}${narration.openedLabels.length-1}`)||[];n&&n.length-1>=i.key&&(n[i.key]=e),storage.setTempVariable(`${E}${narration.openedLabels.length-1}`,n);break}}function r(i){let t=_(i);if(t&&typeof t=="object"&&"type"in t)switch(t.type){case "value":return z(t);case "arithmetic":case "arithmeticsingle":return X(t);case "compare":case "valueCondition":case "union":return K(t)}return t}function X(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 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 D(i){let t=r(i);if(t)switch(t.type){case "assets":switch(t.operationType){case "load":await Assets.load(t.aliases);break;case "lazyload":Assets.backgroundLoad(t.aliases);break}break;case "bundle":switch(t.operationType){case "load":await Assets.loadBundle(t.aliases);break;case "lazyload":Assets.backgroundLoadBundle(t.aliases);break}break}}async function ue(i,t){let e=r(i);if(e)switch(e.type){case "sound":switch(e.operationType){case "play":sound.play(e.alias,e.props);break;case "stop":sound.stop(e.alias);break;case "pause":sound.pause(e.alias);break;case "resume":sound.resume(e.alias);break;case "volume":sound.volume(e.alias,e.value);break}break;case "assets":case "bundle":await D(e);break;case "image":switch(e.operationType){case "show":let o=new ImageSprite(e.props,e.url||e.alias);await I(o,e);break;case "edit":let f=canvas.find(e.alias);f?e.props&&await f.setMemory({...f.memory,...e.props}):d.error(`Image with alias ${e.alias} not found.`);break;case "remove":S(e);break}break;case "video":switch(e.operationType){case "show":let o=new VideoSprite(e.props,e.url||e.alias);await I(o,e);break;case "edit":let f=canvas.find(e.alias);f?e.props&&await f.setMemory({...f.memory,...e.props}):d.error(`Video with alias ${e.alias} not found.`);break;case "remove":S(e);break;case "pause":let u=canvas.find(e.alias);u?u.paused=true:d.error(`Video with alias ${e.alias} not found.`);break;case "resume":let p=canvas.find(e.alias);p?p.paused=false:d.error(`Video with alias ${e.alias} not found.`);break}break;case "imagecontainer":switch(e.operationType){case "show":let o=new ImageContainer(e.props,e.urls);await I(o,e);break;case "edit":let f=canvas.find(e.alias);f?e.props&&await f.setMemory({...f.memory,...e.props}):d.error(`ImageContainer with alias ${e.alias} not found.`);break;case "remove":S(e);break}break;case "canvaselement":switch(e.operationType){case "edit":try{let o=canvas.find(e.alias);o?e.props&&(o.memory={...o.memory,...e.props}):d.error(`Canvas Element with alias ${e.alias} not found.`);}catch(o){d.error(`There was an error while trying to edit the canvas element with alias ${e.alias}.`,o);}break;case "remove":S(e);break}break;case "value":R(e);break;case "operationtoconvert":if(t){let o="";e.values.forEach(u=>{if(typeof u=="string")o+=u;else {let p=r(u);o+=`${p}`;}});let f=await t(o);f&&await ue(f,t);}break;case "input":switch(e.operationType){case "request":narration.requestInput({type:e.valueType},e.defaultValue);break}break;case "fade":let n=new FadeAlphaTicker(e.props,e.duration,e.priority);canvas.addTicker(e.alias,n);break;case "move":let a=new MoveTicker(e.props,e.duration,e.priority);canvas.addTicker(e.alias,a);break;case "rotate":let s=new RotateTicker(e.props,e.duration,e.priority);canvas.addTicker(e.alias,s);break;case "zoom":let l=new ZoomTicker(e.props,e.duration,e.priority);canvas.addTicker(e.alias,l);break;case "shake":await shakeEffect(e.alias,e.props,e.priority);break}}async function I(i,t){if(t.transition)switch(t.transition.type){case "fade":await showWithFade(t.alias,i,t.transition.props,t.transition.priority);break;case "dissolve":await showWithDissolve(t.alias,i,t.transition.props,t.transition.priority);break;case "movein":case "moveout":await moveIn(t.alias,i,t.transition.props,t.transition.priority);break;case "zoomin":case "zoomout":await zoomIn(t.alias,i,t.transition.props,t.transition.priority);break;case "pushin":case "pushout":await pushIn(t.alias,i,t.transition.props,t.transition.priority);break}else await i.load(),canvas.add(t.alias,i);}function S(i){if(i.transition)switch(i.transition.type){case "fade":removeWithFade(i.alias,i.transition.props,i.transition.priority);break;case "dissolve":removeWithDissolve(i.alias,i.transition.props,i.transition.priority);break;case "movein":case "moveout":moveOut(i.alias,i.transition.props,i.transition.priority);break;case "zoomin":case "zoomout":zoomOut(i.alias,i.transition.props,i.transition.priority);break;case "pushin":case "pushout":pushOut(i.alias,i.transition.props,i.transition.priority);break}else canvas.remove(i.alias);}export{S as removeCanvasElement,ue as runOperation,I as showCanvasElemet};