12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- type NPC = NPCAccessor & {[key:string]:any};
- class NPCAccessor{
- static _getHandler = function(target, prop){
- if(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop)?.get){
- return target[prop];
- }
- if(typeof target[prop] === 'function')
- return new Proxy(target[prop], {
- apply: (functionName, thisArg, argumentsList) => Reflect.apply(functionName, target, argumentsList)
- });
- return target.get(prop);
- }
- static handler = {
- get(target, prop) {
- if(prop.endsWith('_possessive')){
- prop = prop.replace('_possessive','');
- let value = NPCAccessor._getHandler(target,prop);
- if(value.endsWith('s'))
- return value+"'"; //https://dictionary.cambridge.org/grammar/british-grammar/possession-john-s-car-a-friend-of-mine
- return value + "'s";
- }
- return NPCAccessor._getHandler(target,prop);
- },
- set(target, prop, value, receiver){
- //console.warn(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop));
- if(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(target), prop)?.set){
- target[prop] = value;
- return true;
- }
- target.set(prop,value);
- return true;
- }
- };
- constructor(npcId=undefined){
- if(npcId)
- this._npcID = npcId;
- }
- _npcID: string;
- get id(){return this._npcID;}
- get(key:string,def:any=undefined){
- const NPCs = State.variables.npcs;
- return NPCs.get(this._npcID,key,def);
- }
- set(key:string,v:any){
- const NPCs = State.variables.npcs;
- return NPCs.set(this._npcID,key,v);
- }
- _init(nPCsDict){
- Object.keys(nPCsDict).forEach(function (pn) {
- this[pn] = clone(nPCsDict[pn]);
- }, this);
- return this;
- }
- clone = function () {
- return (new setup.NPCAccessor())._init(this);
- };
- toJSON = function () {
- var ownData = {};
- Object.keys(this).forEach(function (pn) {
- if(typeof this[pn] !== "function")
- ownData[pn] = clone(this[pn]);
- }, this);
- return JSON.reviveWrapper('(new setup.NPCAccessor())._init($ReviveData$)', ownData);
- };
- }
- setup.NPCAccessor = NPCAccessor;
|