@drincs/nqtr
Version:
A complete system introducing the concepts of location, time and event, producing the framework of a not-quite-point-and-click adventure game.
1 lines • 3.8 kB
JavaScript
import {routine,timeTracker,navigator}from'@drincs/nqtr/handlers';import {RegisteredQuests,RegisteredCommitments,RegisteredRooms,RegisteredActivities}from'@drincs/nqtr/registries';import {VariableGetter}from'@drincs/pixi-vn-ink';var o;(e=>(e.log=(a,...n)=>console.log(`[NQTR] ${a}`,...n),e.warn=(a,...n)=>console.warn(`[NQTR] ${a}`,...n),e.error=(a,...n)=>console.error(`[NQTR] ${a}`,...n),e.info=(a,...n)=>console.info(`[NQTR] ${a}`,...n)))(o||(o={}));function k(i){i||(i={hours:timeTracker.defaultTimeSpent}),typeof i=="number"&&(i={hours:i});let{hours:u,days:f}=i;f&&timeTracker.increaseDate(f,timeTracker.dayStartTime),u&&timeTracker.increaseTime(u);}var b=(i={})=>{VariableGetter.add((e,a)=>{if(e&&typeof e=="object"&&"type"in e&&"key"in e&&"storageOperationType"in e&&"storageType"in e&&e.storageOperationType==="get"&&(e.storageType==="storage"||e.storageType==="tempstorage"||e.storageType==="flagStorage")){let n=e;if(n.key.endsWith("_currentStageIndex")){let t=n.key.replace("_currentStageIndex",""),r=RegisteredQuests.get(t);return r?r.currentStageIndex:(o.warn(`Quest ${t} not found`),a(e))}else if(n.key.endsWith("_started")){let t=n.key.replace("_started",""),r=RegisteredQuests.get(t);return r?r.started:(o.warn(`Quest ${t} not found`),a(e))}else if(n.key.endsWith("_completed")){let t=n.key.replace("_completed",""),r=RegisteredQuests.get(t);return r?r.completed:(o.warn(`Quest ${t} not found`),a(e))}else if(n.key.endsWith("_failed")){let t=n.key.replace("_failed",""),r=RegisteredQuests.get(t);return r?r.failed:(o.warn(`Quest ${t} not found`),a(e))}}return a(e)});let{timeConverter:u=e=>Number(e.replace(":",".")),dateConverter:f=e=>Number(e),wait:l=k}=i;return (e,a,n)=>{switch(e[1]){case "room":switch(e[0]){case "enter":if(e.length>2){let t=RegisteredRooms.get(e[2]);return t?navigator.currentRoom=t:o.warn(`Room ${e[2]} not found`),true}break}break;case "time":switch(e[0]){case "set":if(e.length>2){let t=u(e[2]);return isNaN(t)?o.warn(`Invalid time format: ${e[2]}`):timeTracker.currentTime=t,true}break}break;case "date":switch(e[0]){case "set":if(e.length>2){let t=f(e[2]);return isNaN(t)?o.warn(`Invalid date format: ${e[2]}`):timeTracker.currentDate=t,true}break}break;case "activity":switch(e[0]){case "add":if(e.length==5){let t=RegisteredActivities.get(e[2]);if(!t)return o.warn(`Activity ${e[2]} not found`),true;let{in:r}=n(e.slice(3)),s=RegisteredRooms.get(r);return s?s.addActivity(t):o.warn(`Room ${r} not found`),true}case "remove":if(e.length==5){let t=RegisteredActivities.get(e[2]);if(!t)return o.warn(`Activity ${e[2]} not found`),true;let{from:r}=n(e.slice(3)),s=RegisteredRooms.get(r);return s?s.removeActivity(t):o.warn(`Room ${r} not found`),true}}break;case "routine":switch(e[0]){case "add":if(e.length==5){let t=RegisteredCommitments.get(e[2]);if(!t)return o.warn(`Commitment ${e[2]} not found`),true;let{in:r}=n(e.slice(3)),s=RegisteredRooms.get(r);return s?s.addCommitment(t):o.warn(`Room ${r} not found`),true}case "remove":if(e.length==3){let t=RegisteredCommitments.get(e[2]);return t?(routine.remove(t),true):(o.warn(`Commitment ${e[2]} not found`),true)}}break;case "quest":switch(e[0]){case "start":if(e.length==3){let t=RegisteredQuests.get(e[2]);return t?(t.start(a),true):(o.warn(`Quest ${e[2]} not found`),true)}case "continue":if(e.length==3){let t=RegisteredQuests.get(e[2]);return t?(t.continue(a),true):(o.warn(`Quest ${e[2]} not found`),true)}}break}switch(e[0]){case "wait":if(e.length==1)return l(),true;if(e.length==2){let t=u(e[1]);return isNaN(t)?o.warn(`Invalid time format: ${e[1]}`):l(t),true}else if(e.length>2){let t=n(e.slice(1));return t.hours!==void 0&&typeof t.hours=="string"&&(t.hours=u(t.hours)),t.days!==void 0&&typeof t.days=="string"&&(t.days=f(t.days)),l(t),true}break}return false}};export{b as nqtrHandler};