npc-relations
Version:
Library with classes to represent simple relations between NPCs.
3 lines (2 loc) • 7.09 kB
JavaScript
import e from"limited-int";function r(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function t(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function n(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}var i,s=/*#__PURE__*/function(){function r(r,t,n){void 0===r&&(r=0),void 0===t&&(t=0),void 0===n&&(n=0),this._friendship=void 0,this._love=void 0,this._sex=void 0,this._friendship=new e(r,100,0),this._love=new e(t,100,0),this._sex=new e(n,100,0)}var n=r.prototype;return n.increaseFriendship=function(e){void 0===e&&(e=1),this._friendship.increase(e)},n.increaseLove=function(e){void 0===e&&(e=1),this._love.increase(e)},n.increaseSex=function(e){void 0===e&&(e=1),this._sex.increase(e)},n.increaseFriendshipPercentage=function(e){this._friendship.increasePercentage(e)},n.increaseLovePercentage=function(e){this._love.increasePercentage(e)},n.increaseSexPercentage=function(e){this._sex.increasePercentage(e)},n.decreaseFriendship=function(e){void 0===e&&(e=1),this._friendship.decrease(e)},n.decreaseLove=function(e){void 0===e&&(e=1),this._love.decrease(e)},n.decreaseSex=function(e){void 0===e&&(e=1),this._sex.decrease(e)},n.decreaseFriendshipPercentage=function(e){this._friendship.decreasePercentage(e)},n.decreaseLovePercentage=function(e){this._love.decreasePercentage(e)},n.decreaseSexPercentage=function(e){this._sex.decreasePercentage(e)},n.copy=function(){return new r(this.friendship,this.love,this.sex)},n.calculatePercentage=function(e,r){return e*r/100},t(r,[{key:"friendship",get:function(){return this._friendship.value},set:function(e){this._friendship.value=e}},{key:"love",get:function(){return this._love.value},set:function(e){this._love.value=e}},{key:"sex",get:function(){return this._sex.value},set:function(e){this._sex.value=e}}]),r}();!function(e){e[e.None=0]="None",e[e.Parent=1]="Parent",e[e.BrotherOrSister=2]="BrotherOrSister",e[e.SonOrDaughter=3]="SonOrDaughter",e[e.Grandparent=4]="Grandparent",e[e.UncleOrAunt=5]="UncleOrAunt",e[e.NephewOrNiece=6]="NephewOrNiece",e[e.Grandchild=7]="Grandchild",e[e.Cousin=8]="Cousin"}(i||(i={}));var a,o=/*#__PURE__*/function(){function e(){}return e.opposite=function(e){switch(e){case i.Grandparent:return i.Grandchild;case i.BrotherOrSister:return i.BrotherOrSister;case i.SonOrDaughter:return i.Parent;case i.Grandchild:return i.Grandparent;case i.Parent:return i.SonOrDaughter;case i.Cousin:return i.Cousin;case i.NephewOrNiece:return i.UncleOrAunt;case i.UncleOrAunt:return i.NephewOrNiece;default:return i.None}},e}();!function(e){e[e.Neutral=0]="Neutral",e[e.Friend=1]="Friend",e[e.Enemy=2]="Enemy",e[e.Lover=3]="Lover",e[e.ExLover=4]="ExLover",e[e.Sexy=5]="Sexy",e[e.UnSexy=6]="UnSexy",e[e.Marriaged=7]="Marriaged",e[e.UnMarriaged=8]="UnMarriaged",e[e.Platonic=9]="Platonic",e[e.ExPlatonic=10]="ExPlatonic",e[e.FuckFriend=11]="FuckFriend",e[e.UnFuckEnemy=12]="UnFuckEnemy",e[e.Best=13]="Best",e[e.Worst=14]="Worst",e[e.Frienzoned=15]="Frienzoned",e[e.HatefullSexy=16]="HatefullSexy"}(a||(a={}));var c=/*#__PURE__*/function(){function e(e,r,t,n,a){void 0===n&&(n=i.None),void 0===a&&(a=!1),this._metrics=void 0,this._purity=void 0,this._familiar=void 0,this._metrics=new s(e,r,t),this._familiar=n,a&&(this._purity=new s(e,r,t))}var r=e.prototype;return r.normalize=function(){this.isPure&&(this._metrics.friendship>this._purity.friendship?this._metrics.decreaseFriendship():this._metrics.increaseFriendship(),this._metrics.love>this._purity.love?this._metrics.decreaseLove():this._metrics.increaseLove(),this._metrics.sex>this._purity.sex?this._metrics.decreaseSex():this._metrics.increaseSex())},r.copy=function(){return new e(this._metrics.friendship,this._metrics.love,this._metrics.sex,this._familiar,this.isPure)},t(e,[{key:"metrics",get:function(){return this._metrics}},{key:"familiarity",get:function(){return this._familiar}},{key:"ponderatedValue",get:function(){return(this.metrics.friendship+this.metrics.love+this.metrics.sex)/3}},{key:"isPonderatedGood",get:function(){return this.ponderatedValue>55}},{key:"isPonderatedBad",get:function(){return this.ponderatedValue<45}},{key:"isPonderatedNeutral",get:function(){var e=this.ponderatedValue;return e>=45&&e<=55}},{key:"isFamiliar",get:function(){return this._familiar!==i.None}},{key:"isFriend",get:function(){return this._metrics.friendship>60}},{key:"isLover",get:function(){return this._metrics.love>60}},{key:"isSexy",get:function(){return this._metrics.sex>60}},{key:"isEnemy",get:function(){return this._metrics.friendship<40}},{key:"isExlover",get:function(){return this._metrics.love<40}},{key:"isAntisexy",get:function(){return this._metrics.sex<40}},{key:"isPure",get:function(){return void 0!==this._purity}}]),e}(),u=/*#__PURE__*/function(){function e(){}return e.get=function(e,r,t){void 0===r&&(r=i.None),void 0===t&&(t=!1);var n=50,s=50,o=50;switch(e){case a.Friend:n=90;break;case a.Enemy:n=10;break;case a.Lover:s=90;break;case a.ExLover:s=10;break;case a.Sexy:o=90;break;case a.UnSexy:o=10;break;case a.Marriaged:n=90,s=90;break;case a.UnMarriaged:n=10,s=10;break;case a.Platonic:s=90,o=90;break;case a.ExPlatonic:s=10,o=10;break;case a.FuckFriend:n=90,o=90;break;case a.UnFuckEnemy:n=10,o=10;break;case a.Best:n=90,s=90,o=90;break;case a.Worst:n=10,s=10,o=10;break;case a.Frienzoned:n=90,o=10;break;case a.HatefullSexy:n=10,o=90}return new c(n,s,o,r,t)},e}(),h=/*#__PURE__*/function(){function e(){this._relations=void 0,this._relations=new Map}var r=e.prototype;return r.add=function(e,r){this._relations.set(e,r)},r.append=function(e,r){return this._relations.set(e,r),this},r.knows=function(e){return this._relations.has(e)},r.get=function(e){if(this._relations.has(e))return this._relations.get(e);var r=u.get(a.Neutral);return this._relations.set(e,r),r},r.normalizeAll=function(){this._relations.forEach(function(e){return e.normalize()})},r.copy=function(){for(var r,t=new e,i=function(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,r){if(e){if("string"==typeof e)return n(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,r):void 0}}(e))){t&&(e=t);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(this._relations.keys());!(r=i()).done;){var s=r.value;t.add(s,this._relations.get(s))}return t},t(e,[{key:"knowns",get:function(){return Array.from(this._relations.keys())}}]),e}();export{i as Familiar,o as FamiliarDomain,c as Relation,u as RelationFactory,a as RelationKind,s as RelationMetrics,h as RelationSet};
//# sourceMappingURL=index.mjs.map