npc-relations
Version:
Library with classes to represent simple relations between NPCs.
3 lines (2 loc) • 4.92 kB
JavaScript
import e from"limited-int";class r{constructor(r=0,t=0,i=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(i,100,0)}get friendship(){return this._friendship.value}get love(){return this._love.value}get sex(){return this._sex.value}set friendship(e){this._friendship.value=e}set love(e){this._love.value=e}set sex(e){this._sex.value=e}increaseFriendship(e=1){this._friendship.increase(e)}increaseLove(e=1){this._love.increase(e)}increaseSex(e=1){this._sex.increase(e)}increaseFriendshipPercentage(e){this._friendship.increasePercentage(e)}increaseLovePercentage(e){this._love.increasePercentage(e)}increaseSexPercentage(e){this._sex.increasePercentage(e)}decreaseFriendship(e=1){this._friendship.decrease(e)}decreaseLove(e=1){this._love.decrease(e)}decreaseSex(e=1){this._sex.decrease(e)}decreaseFriendshipPercentage(e){this._friendship.decreasePercentage(e)}decreaseLovePercentage(e){this._love.decreasePercentage(e)}decreaseSexPercentage(e){this._sex.decreasePercentage(e)}copy(){return new r(this.friendship,this.love,this.sex)}calculatePercentage(e,r){return e*r/100}}var t,i;!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"}(t||(t={}));class s{static opposite(e){switch(e){case t.Grandparent:return t.Grandchild;case t.BrotherOrSister:return t.BrotherOrSister;case t.SonOrDaughter:return t.Parent;case t.Grandchild:return t.Grandparent;case t.Parent:return t.SonOrDaughter;case t.Cousin:return t.Cousin;case t.NephewOrNiece:return t.UncleOrAunt;case t.UncleOrAunt:return t.NephewOrNiece;default:return t.None}}}!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"}(i||(i={}));class n{constructor(e,i,s,n=t.None,a=!1){this._metrics=void 0,this._purity=void 0,this._familiar=void 0,this._metrics=new r(e,i,s),this._familiar=n,a&&(this._purity=new r(e,i,s))}get metrics(){return this._metrics}get familiarity(){return this._familiar}get ponderatedValue(){return(this.metrics.friendship+this.metrics.love+this.metrics.sex)/3}get isPonderatedGood(){return this.ponderatedValue>55}get isPonderatedBad(){return this.ponderatedValue<45}get isPonderatedNeutral(){let e=this.ponderatedValue;return e>=45&&e<=55}get isFamiliar(){return this._familiar!==t.None}get isFriend(){return this._metrics.friendship>60}get isLover(){return this._metrics.love>60}get isSexy(){return this._metrics.sex>60}get isEnemy(){return this._metrics.friendship<40}get isExlover(){return this._metrics.love<40}get isAntisexy(){return this._metrics.sex<40}normalize(){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())}copy(){return new n(this._metrics.friendship,this._metrics.love,this._metrics.sex,this._familiar,this.isPure)}get isPure(){return void 0!==this._purity}}class a{static get(e,r=t.None,s=!1){let a=50,c=50,h=50;switch(e){case i.Friend:a=90;break;case i.Enemy:a=10;break;case i.Lover:c=90;break;case i.ExLover:c=10;break;case i.Sexy:h=90;break;case i.UnSexy:h=10;break;case i.Marriaged:a=90,c=90;break;case i.UnMarriaged:a=10,c=10;break;case i.Platonic:c=90,h=90;break;case i.ExPlatonic:c=10,h=10;break;case i.FuckFriend:a=90,h=90;break;case i.UnFuckEnemy:a=10,h=10;break;case i.Best:a=90,c=90,h=90;break;case i.Worst:a=10,c=10,h=10;break;case i.Frienzoned:a=90,h=10;break;case i.HatefullSexy:a=10,h=90}return new n(a,c,h,r,s)}}class c{constructor(){this._relations=void 0,this._relations=new Map}add(e,r){this._relations.set(e,r)}append(e,r){return this._relations.set(e,r),this}get knowns(){return Array.from(this._relations.keys())}knows(e){return this._relations.has(e)}get(e){if(this._relations.has(e))return this._relations.get(e);var r=a.get(i.Neutral);return this._relations.set(e,r),r}normalizeAll(){this._relations.forEach(e=>e.normalize())}copy(){let e=new c;for(let r of this._relations.keys())e.add(r,this._relations.get(r));return e}}export{t as Familiar,s as FamiliarDomain,n as Relation,a as RelationFactory,i as RelationKind,r as RelationMetrics,c as RelationSet};
//# sourceMappingURL=index.modern.js.map