{"version":3,"file":"index.mjs","sources":["../src/metrics.ts","../src/familiar.ts","../src/relations.ts","../src/collections.ts"],"sourcesContent":["import LimitedInt from \"limited-int\";\r\n\r\nconst MetricsMax = 100;\r\nconst MetricsMin = 0;\r\n\r\nexport class RelationMetrics{\r\n    private _friendship: LimitedInt;\r\n    private _love: LimitedInt;\r\n    private _sex: LimitedInt;\r\n\r\n    constructor(friendship: number = 0, love: number = 0, sex:number = 0){\r\n        this._friendship = new LimitedInt(friendship, MetricsMax, MetricsMin);\r\n        this._love = new LimitedInt(love, MetricsMax, MetricsMin);\r\n        this._sex = new LimitedInt(sex, MetricsMax, MetricsMin);\r\n    }\r\n\r\n    get friendship(){\r\n        return this._friendship.value;\r\n    }\r\n\r\n    get love(){\r\n        return this._love.value;\r\n    }\r\n\r\n    get sex(){\r\n        return this._sex.value;\r\n    }\r\n\r\n    set friendship(value){\r\n        this._friendship.value = value;\r\n    }\r\n\r\n    set love(value){\r\n        this._love.value = value;\r\n    }\r\n\r\n    set sex(value){\r\n        this._sex.value = value;\r\n    }\r\n\r\n    increaseFriendship(value: number = 1): void{\r\n        this._friendship.increase(value);\r\n    }\r\n\r\n    increaseLove(value: number = 1): void{\r\n        this._love.increase(value);\r\n    }\r\n\r\n    increaseSex(value: number = 1): void{\r\n        this._sex.increase(value);\r\n    }\r\n\r\n    increaseFriendshipPercentage(percentage: number): void{\r\n        this._friendship.increasePercentage(percentage);\r\n    }\r\n\r\n    increaseLovePercentage(percentage: number): void{\r\n        this._love.increasePercentage(percentage);\r\n    }\r\n\r\n    increaseSexPercentage(percentage: number): void{\r\n        this._sex.increasePercentage(percentage);\r\n    }\r\n\r\n    decreaseFriendship(value: number = 1): void{\r\n        this._friendship.decrease(value);\r\n    }\r\n\r\n    decreaseLove(value: number = 1): void{\r\n        this._love.decrease(value);\r\n    }\r\n\r\n    decreaseSex(value: number = 1): void{\r\n        this._sex.decrease(value);\r\n    }\r\n\r\n    decreaseFriendshipPercentage(percentage: number): void{\r\n        this._friendship.decreasePercentage(percentage);\r\n    }\r\n\r\n    decreaseLovePercentage(percentage: number): void{\r\n        this._love.decreasePercentage(percentage);\r\n    }\r\n\r\n    decreaseSexPercentage(percentage: number): void{\r\n        this._sex.decreasePercentage(percentage);\r\n    }\r\n\r\n    copy(): RelationMetrics{\r\n        return new RelationMetrics(this.friendship, this.love, this.sex);\r\n    }\r\n\r\n    private calculatePercentage(value: number, percentage: number): number{\r\n        return (value * percentage) / 100;\r\n    }\r\n}","export enum Familiar{\r\n    None,\r\n    Parent,\r\n    BrotherOrSister,\r\n    SonOrDaughter,\r\n    Grandparent,\r\n    UncleOrAunt,\r\n    NephewOrNiece,\r\n    Grandchild,\r\n    Cousin\r\n}\r\n\r\nexport class FamiliarDomain{\r\n    static opposite(familiar: Familiar): Familiar{\r\n        switch (familiar)\r\n        {\r\n            case Familiar.Grandparent:\r\n                return Familiar.Grandchild;\r\n\r\n            case Familiar.BrotherOrSister:\r\n                return Familiar.BrotherOrSister;\r\n\r\n            case Familiar.SonOrDaughter:\r\n                return Familiar.Parent;\r\n\r\n            case Familiar.Grandchild:\r\n                return Familiar.Grandparent;\r\n\r\n            case Familiar.Parent:\r\n                return Familiar.SonOrDaughter;\r\n\r\n            case Familiar.Cousin:\r\n                return Familiar.Cousin;\r\n\r\n            case Familiar.NephewOrNiece:\r\n                return Familiar.UncleOrAunt;\r\n\r\n            case Familiar.UncleOrAunt:\r\n                return Familiar.NephewOrNiece;\r\n\r\n            default:\r\n                return Familiar.None;\r\n        }\r\n    }\r\n}","import { Familiar } from \"./familiar\";\r\nimport { RelationMetrics } from \"./metrics\";\r\n\r\nexport enum RelationKind{\r\n    Neutral,\r\n    Friend,\r\n    Enemy,\r\n    Lover,\r\n    ExLover,\r\n    Sexy,\r\n    UnSexy,\r\n    Marriaged,\r\n    UnMarriaged,\r\n    Platonic,\r\n    ExPlatonic,\r\n    FuckFriend,\r\n    UnFuckEnemy,\r\n    Best,\r\n    Worst,\r\n    Frienzoned,\r\n    HatefullSexy\r\n}\r\n\r\nconst PonderateGoodLimit = 55;\r\nconst PonderateBadLimit = 45;\r\nconst PositiveLimit = 60;\r\nconst NegativeLimit = 40;\r\n\r\nexport class Relation{\r\n    private _metrics: RelationMetrics;\r\n    private _purity: RelationMetrics;\r\n    private _familiar: Familiar;\r\n\r\n    constructor(\r\n        friendship: number, \r\n        love: number, \r\n        sex: number,\r\n        familiarity: Familiar = Familiar.None,\r\n        purity: boolean = false){\r\n        this._metrics = new RelationMetrics(friendship, love, sex);\r\n        this._familiar = familiarity;\r\n        if(purity) this._purity = new RelationMetrics(friendship, love, sex);\r\n    }\r\n\r\n    get metrics(){\r\n        return this._metrics;\r\n    }\r\n\r\n    get familiarity(){\r\n        return this._familiar;\r\n    }\r\n\r\n    get ponderatedValue(): number{\r\n        return (this.metrics.friendship + this.metrics.love + this.metrics.sex) / 3;\r\n    }\r\n\r\n    get isPonderatedGood(): boolean{\r\n        return this.ponderatedValue > PonderateGoodLimit;\r\n    }\r\n\r\n    get isPonderatedBad(): boolean{\r\n        return this.ponderatedValue < PonderateBadLimit;\r\n    }\r\n\r\n    get isPonderatedNeutral(): boolean{\r\n        let ponderation = this.ponderatedValue;\r\n        return ponderation >= PonderateBadLimit && ponderation <= PonderateGoodLimit;\r\n    }\r\n\r\n    get isFamiliar(): boolean{\r\n        return this._familiar !== Familiar.None;\r\n    }\r\n\r\n    get isFriend(): boolean{\r\n        return this._metrics.friendship > PositiveLimit;\r\n    }\r\n\r\n    get isLover(): boolean{\r\n        return this._metrics.love > PositiveLimit;\r\n    }\r\n\r\n    get isSexy(): boolean{\r\n        return this._metrics.sex > PositiveLimit;\r\n    }\r\n\r\n    get isEnemy(): boolean{\r\n        return this._metrics.friendship < NegativeLimit;\r\n    }\r\n\r\n    get isExlover(): boolean{\r\n        return this._metrics.love < NegativeLimit;\r\n    }\r\n\r\n    get isAntisexy(): boolean{\r\n        return this._metrics.sex < NegativeLimit;\r\n    }\r\n\r\n    normalize(){\r\n        if(!this.isPure) return;\r\n\r\n        if (this._metrics.friendship > this._purity.friendship) this._metrics.decreaseFriendship();\r\n        else this._metrics.increaseFriendship();\r\n\r\n        if (this._metrics.love > this._purity.love) this._metrics.decreaseLove();\r\n        else this._metrics.increaseLove();\r\n\r\n        if (this._metrics.sex > this._purity.sex) this._metrics.decreaseSex();\r\n        else this._metrics.increaseSex();\r\n    }\r\n\r\n    copy(): Relation{\r\n        return new Relation(\r\n            this._metrics.friendship,\r\n            this._metrics.love,\r\n            this._metrics.sex,\r\n            this._familiar,\r\n            this.isPure\r\n        );\r\n    }\r\n\r\n    private get isPure(): boolean{\r\n        return this._purity !== undefined;\r\n    }\r\n}\r\n\r\nexport class RelationFactory{\r\n    static get(kind: RelationKind, familiar: Familiar = Familiar.None, purity: boolean = false){\r\n        let friendship: number = 50;\r\n        let love: number = 50;\r\n        let sex: number = 50;\r\n\r\n        switch(kind){\r\n            case RelationKind.Friend:\r\n                friendship = 90;\r\n                break;\r\n                \r\n            case RelationKind.Enemy:\r\n                friendship = 10;\r\n                break;\r\n                \r\n            case RelationKind.Lover:\r\n                love = 90;\r\n                break;\r\n                \r\n            case RelationKind.ExLover:\r\n                love = 10;\r\n                break;\r\n                \r\n            case RelationKind.Sexy:\r\n                sex = 90;\r\n                break;\r\n                \r\n            case RelationKind.UnSexy:\r\n                sex = 10;\r\n                break;\r\n                \r\n            case RelationKind.Marriaged:\r\n                friendship = 90;\r\n                love = 90;\r\n                break;\r\n                \r\n            case RelationKind.UnMarriaged:\r\n                friendship = 10;\r\n                love = 10;\r\n                break;\r\n            case RelationKind.Platonic:\r\n                love = 90;\r\n                sex = 90;\r\n                break;\r\n                \r\n            case RelationKind.ExPlatonic:\r\n                love = 10;\r\n                sex = 10;\r\n                break;\r\n                \r\n            case RelationKind.FuckFriend:\r\n                friendship = 90;\r\n                sex = 90;\r\n                break;\r\n                \r\n            case RelationKind.UnFuckEnemy:\r\n                friendship = 10;\r\n                sex = 10;\r\n                break;\r\n                \r\n            case RelationKind.Best:\r\n                friendship = 90;\r\n                love = 90;\r\n                sex = 90;\r\n                break;\r\n                \r\n            case RelationKind.Worst:\r\n                friendship = 10;\r\n                love = 10;\r\n                sex = 10;\r\n                break;\r\n                \r\n            case RelationKind.Frienzoned:\r\n                friendship = 90;\r\n                sex = 10;\r\n                break;\r\n                \r\n            case RelationKind.HatefullSexy:\r\n                friendship = 10;\r\n                sex = 90;\r\n                break;\r\n                \r\n            case RelationKind.Neutral:\r\n                break;\r\n        }\r\n\r\n        return new Relation(friendship, love, sex, familiar, purity);\r\n    }\r\n}","import { Relation, RelationFactory, RelationKind } from \"./relations\";\r\n\r\nexport class RelationSet{\r\n    private _relations: Map<string, Relation>;\r\n\r\n    constructor(){\r\n        this._relations = new Map<string, Relation>();\r\n    }\r\n\r\n    add(npcName: string, relation:Relation): void{\r\n        this._relations.set(npcName, relation);\r\n    }\r\n\r\n    append(npcName: string, relation:Relation): RelationSet{\r\n        this._relations.set(npcName, relation);\r\n        return this;\r\n    }\r\n\r\n    get knowns(): string[]{\r\n        return Array.from(this._relations.keys());\r\n    }\r\n\r\n    knows(npcName: string): boolean{\r\n        return this._relations.has(npcName);\r\n    }\r\n\r\n    get(npcName: string): Relation{\r\n        if (this._relations.has(npcName)) return this._relations.get(npcName);\r\n\r\n        var newRelation = RelationFactory.get(RelationKind.Neutral);\r\n        this._relations.set(npcName, newRelation);\r\n        return newRelation;\r\n    }\r\n\r\n    normalizeAll(): void{\r\n        this._relations.forEach(relation => relation.normalize());\r\n    }\r\n\r\n    copy(): RelationSet{\r\n        let copy = new RelationSet();\r\n        for(let key of this._relations.keys()){\r\n            copy.add(key, this._relations.get(key));\r\n        }\r\n        return copy;\r\n    }\r\n}"],"names":["Familiar","RelationMetrics","friendship","love","sex","_friendship","_love","_sex","this","LimitedInt","increaseFriendship","value","increase","increaseLove","increaseSex","increaseFriendshipPercentage","percentage","increasePercentage","increaseLovePercentage","increaseSexPercentage","decreaseFriendship","decrease","decreaseLove","decreaseSex","decreaseFriendshipPercentage","decreasePercentage","decreaseLovePercentage","decreaseSexPercentage","copy","calculatePercentage","FamiliarDomain","RelationKind","opposite","familiar","Grandparent","Grandchild","BrotherOrSister","SonOrDaughter","Parent","Cousin","NephewOrNiece","UncleOrAunt","None","Relation","familiarity","purity","_metrics","_purity","_familiar","normalize","isPure","metrics","ponderatedValue","ponderation","undefined","RelationFactory","get","kind","Friend","Enemy","Lover","ExLover","Sexy","UnSexy","Marriaged","UnMarriaged","Platonic","ExPlatonic","FuckFriend","UnFuckEnemy","Best","Worst","Frienzoned","HatefullSexy","RelationSet","_relations","Map","add","npcName","relation","set","append","knows","has","newRelation","Neutral","normalizeAll","forEach","keys","key","Array","from"],"mappings":"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"}