{"version":3,"file":"index.mjs","sources":["../src/input.ts","../node_modules/role-methods/dist/index.mjs","../src/phrase.ts","../src/interfaces.ts","../src/roles.ts","../src/step.ts","../src/agent.ts","../src/location.ts","../src/interaction.ts","../src/ongoing.ts","../src/historic.ts","../src/scenario.ts"],"sourcesContent":["export class Input{\r\n    private _choiceIndex: number;\r\n\r\n    constructor(choiceIndex: number){\r\n        this._choiceIndex = choiceIndex;\r\n    }\r\n\r\n    get choiceIndex(){\r\n        return this._choiceIndex;\r\n    }\r\n\r\n    get isVoid(): boolean{\r\n        return this._choiceIndex < 0;\r\n    }\r\n\r\n    static void(): Input{\r\n        return new Input(-1);\r\n    }\r\n}","var n,r=100,t=0;function o(n){var r=n+1;return Math.floor(Math.random()*r)}function u(n){return 1===n.length?n[0]:n[o(n.length-1)]}function e(){var r=o(100),t=n.None;return r<=10&&(t=n.Low),r>=90&&(t=n.High),t}function i(n,r){var t=o(n)-o(r);return t<0&&(t=0),t}function f(n,r){return 0!=n&&(0==r||o(n+r)<n)}function c(){return f(50,50)}function a(n){return f(n,100-n)}!function(n){n[n.Low=-1]=\"Low\",n[n.None=0]=\"None\",n[n.High=1]=\"High\"}(n||(n={}));export{n as Critic,r as Max,t as Min,f as against,a as check,c as coin,e as critic,i as hit,o as random,u as randomFromList};\n//# sourceMappingURL=index.mjs.map\n","import { Effect, EffectDirection, Situation, apply } from \"npc-emotional\";\r\nimport { Sentence } from \"first-order-logic\";\r\nimport { Roles } from \"./roles\";\r\nimport { Crowd } from \"./agent\";\r\nimport { randomFromList } from \"role-methods\";\r\nimport { Happiness } from \"npc-mind\";\r\nimport { Relation } from \"npc-relations\";\r\n\r\nexport class PhraseResult{\r\n    private _content: string;\r\n    private _effect: Effect;\r\n    private _sentence: Sentence;\r\n\r\n    constructor(content: string, effect: Effect, sentence: Sentence = null){\r\n        if(content == null || content.trim() === \"\")\r\n            throw new Error(\"Content cannot be empty.\");\r\n\r\n        if(effect == null)\r\n            throw new Error(\"Effect cannot be null.\");\r\n        \r\n        this._content = content;\r\n        this._effect = effect;\r\n        this._sentence = sentence;\r\n    }\r\n\r\n    get content(){\r\n        return this._content;\r\n    }\r\n\r\n    get effect(){\r\n        return this._effect;\r\n    }\r\n\r\n    get sentence(){\r\n        return this._sentence;\r\n    }\r\n\r\n    get hasSentence(): boolean{\r\n        return this._sentence !== null;\r\n    }\r\n}\r\n\r\nexport type TextFunc = (roles: Roles) => string;\r\nexport type EffectFunc = (roles: Roles) => Effect;\r\nexport type SentenceFunc = (roles: Roles) => Sentence;\r\n\r\nexport class Alternative{\r\n    private _text: TextFunc;\r\n    private _effect: EffectFunc;\r\n    private _sentence: SentenceFunc;\r\n\r\n    constructor(text: TextFunc, effect: EffectFunc = null, sentence: SentenceFunc = null){\r\n        if(text == null)\r\n            throw new Error(\"Text function cannot be null.\");\r\n        \r\n        this._text = text;\r\n        this._effect = (effect == null) ? (roles: Roles) => Effect.null() : effect;\r\n        this._sentence = sentence;\r\n    }\r\n\r\n    get text(): TextFunc{\r\n        return this._text;\r\n    }\r\n\r\n    get effect(): EffectFunc{\r\n        return this._effect;\r\n    }\r\n\r\n    get sentence(): SentenceFunc{\r\n        return this._sentence;\r\n    }\r\n}\r\n\r\nconst PhraseSplitter: string = \":\";\r\n\r\nexport class Phrase{\r\n    private _alternatives: Alternative[];\r\n    private _performerRole: string;\r\n    private _targetRole: string;\r\n    private _isIntimate: boolean;\r\n\r\n    constructor(performerRole: string, targetRole: string = null){\r\n        if(performerRole == null || performerRole.trim() === \"\")\r\n            throw new Error(\"Performer role cannot be null.\");\r\n        \r\n        if(targetRole != null && targetRole.trim() === \"\")\r\n            throw new Error(\"If defining target role, it can't be empty.\");\r\n        \r\n        this._performerRole = performerRole;\r\n        this._targetRole = targetRole;\r\n        this._isIntimate = false;\r\n\r\n        this._alternatives = [];\r\n    }\r\n\r\n    get performerRole(){\r\n        return this._performerRole;\r\n    }\r\n\r\n    get targetRole(){\r\n        return this._targetRole;\r\n    }\r\n\r\n    get isIntimate(){\r\n        return this._isIntimate;\r\n    }\r\n\r\n    get isMultialternative(): boolean{\r\n        return this._alternatives.length > 1;\r\n    }\r\n\r\n    allAlternatives(roles: Roles): string[]{\r\n        return this._alternatives.map(a => a.text(roles));\r\n    }\r\n\r\n    withAlternative(alternative: TextFunc, effect: EffectFunc = null, sentence: SentenceFunc = null): Phrase{\r\n        if(alternative == null)\r\n            throw new Error(\"Alternative cannnot be null\");\r\n        \r\n        this._alternatives.push(new Alternative(alternative, effect, sentence));\r\n        \r\n        return this;\r\n    }\r\n\r\n    intimate(): void{\r\n        this._isIntimate = true;\r\n    }\r\n\r\n    action(roles: Roles, crowd: Crowd, alternativeIndex: number = -1): PhraseResult{\r\n        let alternative = this.chooseAlternative(roles, crowd, alternativeIndex);\r\n        let textAlternative = alternative.text(roles);\r\n\r\n        if(textAlternative.includes(PhraseSplitter)){\r\n            let parts = textAlternative.split(PhraseSplitter);\r\n            return new PhraseResult(\r\n                roles.get(Phrase.uncorcheted(parts[0])).say(roles.assignRoles(parts[1])),\r\n                alternative.effect(roles),\r\n                alternative.sentence == null ? null : alternative.sentence(roles)\r\n            );\r\n        }\r\n\r\n        return new PhraseResult(\r\n            roles.assignRoles(textAlternative),\r\n            alternative.effect(roles),\r\n            alternative.sentence == null ? null : alternative.sentence(roles)\r\n        );\r\n    }\r\n\r\n    private chooseAlternative(roles: Roles, crowd: Crowd, alternativeIndex: number): Alternative{\r\n        if(this._alternatives.length === 1) return this._alternatives[0];\r\n        if(alternativeIndex >= 0) return this._alternatives[alternativeIndex];\r\n\r\n        if(this.performerHasMeaningfulDesires(roles, crowd))\r\n            return this.calculateAlternativeBasedOnDesires(roles, crowd);\r\n        \r\n        return this.calculateAlternativeBasedOnEmotions(roles);\r\n    }\r\n\r\n    private performerHasMeaningfulDesires(roles: Roles, crowd: Crowd): boolean{\r\n        let desires = roles.get(this._performerRole).Desires;\r\n        return desires.any && desires.anyInvolved(crowd.all);\r\n    }\r\n\r\n    private calculateAlternativeBasedOnDesires(roles: Roles, crowd: Crowd): Alternative{\r\n        const MinHeuristicValue: number = -1000000;\r\n\r\n        let performer = roles.get(this._performerRole);\r\n\r\n        let selectedAlternative = this._alternatives[0];\r\n        let highestPunctuation: number = MinHeuristicValue;\r\n        for (let alternative of this._alternatives)\r\n        {\r\n            let punctuation: number = MinHeuristicValue;\r\n            let effect = alternative.effect(roles);\r\n            if(effect.direction === EffectDirection.Neutral)\r\n            {\r\n                punctuation = performer.Desires.heuristicTotal(crowd);\r\n            }\r\n            else\r\n            {\r\n                var alternativeStatus = crowd.copy();\r\n\r\n                var situation = new Situation(\r\n                    alternativeStatus.get(performer.Name),\r\n                    alternativeStatus.get(roles.get(effect.target).Name),\r\n                    this._isIntimate\r\n                    ? effect.isThirdPerson\r\n                        ? [ alternativeStatus.get(roles.get(this._targetRole).Name) ]\r\n                        : []\r\n                    : alternativeStatus.all\r\n                        .filter(x =>\r\n                            x.Name !== roles.get(effect.target).Name\r\n                            && x.Name !== performer.Name)\r\n                    );\r\n\r\n                apply(effect, situation, this._isIntimate);\r\n\r\n                punctuation = performer.Desires.heuristicTotal(alternativeStatus);\r\n            }\r\n\r\n            if(punctuation > highestPunctuation)\r\n            {\r\n                selectedAlternative = alternative;\r\n                highestPunctuation = punctuation;\r\n            }\r\n        }\r\n\r\n        return selectedAlternative;\r\n    }\r\n\r\n    private calculateAlternativeBasedOnEmotions(roles: Roles): Alternative{\r\n        var direction = this._targetRole == null\r\n            ? this.calculateEffectDirection(roles.get(this._performerRole).Happiness)\r\n            : this.calculateEffectDirectionWithRelation(\r\n                roles.get(this._performerRole).Relations.get(roles.get(this._targetRole).Name),\r\n                roles.get(this._performerRole).Happiness);\r\n\r\n        var directedAlternatives = this._alternatives\r\n            .filter(a => a.effect(roles).direction === direction);\r\n\r\n        if (directedAlternatives.length === 0)\r\n            directedAlternatives = this._alternatives;\r\n\r\n        return randomFromList(directedAlternatives);\r\n    }\r\n\r\n    private calculateEffectDirection(happiness: Happiness): EffectDirection{\r\n        return happiness.isHappy\r\n            ? EffectDirection.Positive\r\n            : happiness.isUnhappy\r\n                ? EffectDirection.Negative\r\n                : EffectDirection.Neutral;\r\n    }\r\n    \r\n    private calculateEffectDirectionWithRelation(relation: Relation, happiness: Happiness): EffectDirection{\r\n        if (relation.isPonderatedGood && happiness.isHappy) return EffectDirection.Positive;\r\n        else if (relation.isPonderatedBad && happiness.isUnhappy) return EffectDirection.Negative;\r\n        else if (relation.isPonderatedNeutral && happiness.isNeutral) return EffectDirection.Neutral;\r\n        else if (relation.isPonderatedNeutral && happiness.isHappy) return EffectDirection.Positive;\r\n        else if (relation.isPonderatedNeutral && happiness.isUnhappy) return EffectDirection.Negative;\r\n        else if (relation.isPonderatedGood && happiness.isNeutral) return EffectDirection.Positive;\r\n        else if (relation.isPonderatedBad && happiness.isNeutral) return EffectDirection.Negative;\r\n        else if (relation.isPonderatedGood && happiness.isUnhappy) return EffectDirection.Neutral;\r\n        else if (relation.isPonderatedBad && happiness.isHappy) return EffectDirection.Neutral;\r\n        else throw new Error(\"Not existing option.\");\r\n    }\r\n\r\n    private static uncorcheted(input: string): string{\r\n        return input.replace(\"[\", \"\").replace(\"]\", \"\");\r\n    }\r\n}","import { Roles, RolesDescriptor } from \"./roles\";\r\nimport { Phrase } from \"./phrase\";\r\nimport { TruthTable, Sentence } from \"first-order-logic\";\r\nimport { MapStructure } from \"./location\";\r\nimport { Agent } from \".\";\r\n\r\nexport interface IDeliverer{\r\n    isFinished: boolean;\r\n    deliver(roles: Roles): Phrase;\r\n}\r\n\r\nexport type Preconditions = (table: TruthTable, roles: Roles, map: MapStructure) => boolean;\r\nexport type Postconditions = (table: TruthTable, roles: Roles, map: MapStructure) => TruthTable;\r\n\r\nexport interface IInteraction{\r\n    name: string;\r\n    description: string;\r\n    preconditions: Preconditions;\r\n    postconditions: Postconditions;\r\n    isIntimate: boolean;\r\n    deliverer: IDeliverer;\r\n    rolesDescriptor: RolesDescriptor;\r\n    timing: Timing;\r\n\r\n    intimate():IInteraction;\r\n    getPermutations(main: Agent, other: Agent[]): Roles[];\r\n    equals(interaction: IInteraction): boolean;\r\n    globallyEquals(interaction: IInteraction): boolean;\r\n}\r\n\r\nexport enum Timing{\r\n    Single,\r\n    GlobalSingle,\r\n    Repeteable\r\n}","import { Agent } from \"./agent\";\r\n\r\nexport class RolesDescriptor{\r\n    private _main: string;\r\n    private _secondarys: Set<string>;\r\n\r\n    constructor(main: string, secondarys: string[] = []){\r\n        if(main == null || main.trim() === \"\")\r\n            throw new Error(\"Main cannot be null.\");\r\n        \r\n        if(secondarys == null)\r\n            throw new Error(\"Secondarys cannot be null.\");\r\n        \r\n        this._main = main;\r\n        this._secondarys = new Set(secondarys);\r\n    }\r\n\r\n    get main(){\r\n        return this._main;\r\n    }\r\n\r\n    get secondarys(): string[]{\r\n        return Array.from(this._secondarys.values());\r\n    }\r\n\r\n    get all(): string[]{\r\n        return [this._main, ...this.secondarys];\r\n    }\r\n}\r\n\r\nexport class Roles{\r\n    private _roles: Map<string, Agent>;\r\n\r\n    constructor(){\r\n        this._roles = new Map<string, Agent>();\r\n    }\r\n\r\n    get roleNames(): string[]{\r\n        return Array.from(this._roles.keys());\r\n    }\r\n\r\n    get agents(): Agent[]{\r\n        return Array.from(this._roles.values());\r\n    }\r\n\r\n    match(role: string, agent: Agent): Roles{\r\n        this.validateRole(role);\r\n        this.validateAgent(agent);\r\n        \r\n        this._roles.set(role, agent);\r\n\r\n        return this;\r\n    }\r\n\r\n    get(role: string): Agent{\r\n        this.validateRole(role);\r\n\r\n        if(!this._roles.has(role))\r\n            throw new Error(\"Specified role doesn't exist\");\r\n        \r\n        return this._roles.get(role);\r\n    }\r\n\r\n    has(role: string): boolean{\r\n        this.validateRole(role);\r\n\r\n        return this._roles.has(role);\r\n    }\r\n\r\n    matched(agent: Agent): boolean{\r\n        this.validateAgent(agent);\r\n\r\n        return this.agents.some(a => a.Name === agent.Name);\r\n    }\r\n\r\n    assignRoles(input: string): string{\r\n        let assignedResult: string = input;\r\n\r\n        for(let roleName of this._roles.keys()){\r\n            assignedResult = assignedResult.replace(`[${roleName}]`, this._roles.get(roleName).Name);\r\n        }\r\n\r\n        return assignedResult;\r\n    }\r\n\r\n    equals(other: Roles): boolean{\r\n        if(other == null) return false;\r\n\r\n        if(this._roles.size !== other._roles.size) return false;\r\n        \r\n        for(let roleName of this._roles.keys()){\r\n            if(!other._roles.has(roleName)) return false;\r\n            if(this._roles.get(roleName).Name !== other._roles.get(roleName).Name) return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    toString(): string{\r\n        return this.roleNames.map(r => `${this._roles.get(r).Name} as ${r}`).join(\",\");\r\n    }\r\n\r\n    private validateRole(role: string): void{\r\n        if(role == null || role.trim() === \"\")\r\n            throw new Error(\"Role cannot be empty.\");\r\n    }\r\n\r\n    private validateAgent(agent: Agent): void{\r\n        if(agent == null)\r\n            throw new Error(\"Agent cannot be null.\");\r\n    }\r\n}","import { Reactions } from \"npc-emotional\";\r\n\r\nexport class Step{\r\n    private _content: string[];\r\n    private _ender: boolean;\r\n    private _choices: Choices;\r\n    private _reactions: Reactions;\r\n\r\n    private constructor(){\r\n        this._content = [];\r\n        this._choices = null;\r\n        this._reactions = null;\r\n    }\r\n\r\n    get content(): string[]{\r\n        return this._content;\r\n    }\r\n\r\n    get isEnder(): boolean{\r\n        return this._ender;\r\n    }\r\n\r\n    get hasChoices(): boolean{\r\n        return this._choices !== null;\r\n    }\r\n\r\n    get choices(): Choices{\r\n        return this._choices;\r\n    }\r\n\r\n    get reactions(): Reactions{\r\n        return this._reactions;\r\n    }\r\n\r\n    get hasReactions(): boolean{\r\n        return this._reactions != null;\r\n    }\r\n\r\n    append(text: string): Step{\r\n        if(text != null && text.trim() !== \"\"){\r\n            this._content.push(text);\r\n        }\r\n        \r\n        return this;\r\n    }\r\n\r\n    static fromContent(content: string, isEnder: boolean = false): Step{\r\n        if(content == null || content.trim() === \"\")\r\n            throw new Error(\"Content cannot be empty.\");\r\n        \r\n        let step = new Step();\r\n        step._content = [ content ];\r\n        step._ender = isEnder;\r\n        step._choices = null;\r\n\r\n        return step;\r\n    }\r\n\r\n    static fromChoices(choices: string[], isEnder: boolean = false): Step{\r\n        if(choices == null || choices.length === 0)\r\n            throw new Error(\"Choices cannot be empty.\");\r\n        \r\n        let step = new Step();\r\n        step._ender = isEnder;\r\n        step._choices = new Choices(choices); \r\n\r\n        return step;\r\n    }\r\n\r\n    static fromReactions(reactions: Reactions, isEnder: boolean = false): Step{\r\n        if(reactions == null)\r\n            throw new Error(\"Reactions cannot be null.\");\r\n        \r\n        let step = new Step();\r\n        step._ender = isEnder;\r\n        step._reactions = reactions;\r\n\r\n        return step;\r\n    }\r\n}\r\n\r\nexport class Choices{\r\n    private _items: string[];\r\n\r\n    constructor(items: string[]){\r\n        if(items == null || items.length === 0)\r\n            throw new Error(\"Items cannot be empty.\");\r\n        \r\n        this._items = items;\r\n    }\r\n\r\n    get count(): number{\r\n        return this._items.length;\r\n    }\r\n\r\n    get items(){\r\n        return this._items;\r\n    }\r\n\r\n    isValidItem(index: number): boolean{\r\n        return index >= 0 && index < this._items.length;\r\n    }\r\n}","import { Aspect, Likes } from \"npc-aspect\";\r\nimport { RelationSet } from \"npc-relations\";\r\nimport { Individual, LogicAgent, TruthTable, Sentence } from \"first-order-logic\";\r\nimport { IEmotional } from \"npc-emotional\";\r\nimport { Happiness, Personality } from \"npc-mind\";\r\nimport { randomFromList } from \"role-methods\";\r\n\r\nexport type PassTurn = (turn: number, agent: Agent) => string;\r\n\r\nexport class Agent implements IEmotional{\r\n    private _name: string;\r\n    private _aspect: Aspect;\r\n    private _likes: Likes;\r\n    private _relations: RelationSet;\r\n    private _happiness: Happiness;\r\n    private _personality: Personality;\r\n    private _isHuman: boolean;\r\n    private _characteristics: Characteristics;\r\n    private _desires: Desires;\r\n    private _onTurnPassed: PassTurn;\r\n    private _logic: LogicAgent;\r\n    private _isActive: boolean;\r\n\r\n    constructor(\r\n        name: string,\r\n        aspect: Aspect,\r\n        relations: RelationSet,\r\n        happiness: Happiness,\r\n        personality: Personality,\r\n        likes: Likes,\r\n        characteristics: string[],\r\n        human: boolean,\r\n        onTurnPassed: PassTurn = null\r\n    ){\r\n        if(name == null || name.trim() === \"\")\r\n            throw new Error(\"Name cannot be empty.\");\r\n        \r\n        if(aspect == null)\r\n            throw new Error(\"Aspect cannot be null.\");\r\n        \r\n        if(relations == null)\r\n            throw new Error(\"Relations cannot be null.\");\r\n        \r\n        if(happiness == null)\r\n            throw new Error(\"Happiness cannot be null.\");\r\n        \r\n        if(personality == null)\r\n            throw new Error(\"Personality cannot be null.\");\r\n        \r\n        if(likes == null)\r\n            throw new Error(\"Likes cannot be null.\");\r\n        \r\n        if(characteristics == null)\r\n            throw new Error(\"Characteristics cannot be null.\");\r\n        \r\n        this._name = name;\r\n        this._aspect = aspect;\r\n        this._relations = relations;\r\n        this._happiness = happiness;\r\n        this._personality = personality;\r\n        this._likes = likes;\r\n        this._characteristics = new Characteristics(name, characteristics);\r\n        this._desires = new Desires();\r\n        this._isHuman = human;\r\n        this._isActive = true;\r\n        this._onTurnPassed = onTurnPassed == null \r\n            ? (turn: number, agent: Agent) => \"\" \r\n            : onTurnPassed;\r\n        this._logic = new LogicAgent();\r\n        this._logic.population.add(this.Individual);\r\n    }\r\n\r\n    get Name(){\r\n        return this._name;\r\n    }\r\n\r\n    get Aspect(){\r\n        return this._aspect;\r\n    }\r\n\r\n    get Likes(){\r\n        return this._likes;\r\n    }\r\n\r\n    get Relations(){\r\n        return this._relations;\r\n    }\r\n\r\n    get Happiness(){\r\n        return this._happiness;\r\n    }\r\n\r\n    get Personality(){\r\n        return this._personality;\r\n    }\r\n\r\n    get IsHuman(){\r\n        return this._isHuman;\r\n    }\r\n\r\n    get Characteristics(){\r\n        return this._characteristics;\r\n    }\r\n\r\n    get Desires(){\r\n        return this._desires;\r\n    }\r\n\r\n    get IsActive(){\r\n        return this._isActive;\r\n    }\r\n\r\n    get OnTurnPassed(){\r\n        return this._onTurnPassed;\r\n    }\r\n\r\n    get Individual(): Individual{\r\n        return new Individual(this.Name.replace(\" \", \"\"));\r\n    }\r\n\r\n    get logic(){\r\n        return this._logic;\r\n    }\r\n\r\n    say(content: string){\r\n        if(content == null)\r\n            throw new Error(\"Content cannot be null.\");\r\n        \r\n        return `${this.Name}: - ${content}`;\r\n    }\r\n\r\n    activate(): void{\r\n        this._isActive = true;\r\n    }\r\n\r\n    deactivate(): void{\r\n        this._isActive = false;\r\n    }\r\n\r\n    humanize(): void{\r\n        this._isHuman = true;\r\n    }\r\n\r\n    dehumanize(): void{\r\n        this._isHuman = false;\r\n    }\r\n\r\n    copy(): Agent{\r\n        return new Agent(\r\n            this._name,\r\n            this._aspect.copy(),\r\n            this._relations.copy(),\r\n            this._happiness.copy(),\r\n            this._personality.copy(),\r\n            this._likes.copy(),\r\n            this._characteristics.table.elements.map(sentence => sentence.function.name),\r\n            this._isHuman\r\n        );\r\n    }\r\n\r\n    passTurn(turn: number): string{\r\n        return this._onTurnPassed(turn, this);\r\n    }\r\n}\r\n\r\nexport class Crowd{\r\n    private _crowd: Map<string, Agent>;\r\n\r\n    constructor(agents: Agent[]){\r\n        if(agents == null)\r\n            throw new Error(\"Agents cannot be null.\");\r\n        \r\n        this._crowd = new Map<string, Agent>();\r\n        for(let agent of agents){\r\n            this._crowd.set(agent.Name, agent);\r\n        }\r\n    }\r\n\r\n    get all(): Agent[]{\r\n        return Array.from(this._crowd.values());\r\n    }\r\n\r\n    get(name: string): Agent{\r\n        return this._crowd.get(name);\r\n    }\r\n\r\n    copy(): Crowd{\r\n        return new Crowd(this.all.map(agent => agent.copy()));\r\n    }\r\n}\r\n\r\nexport type Heuristic = (crowd: Crowd) => number;\r\n\r\nexport class Desire{\r\n    private _involved: Set<string>;\r\n    private _heuristic: Heuristic;\r\n\r\n    constructor(heuristic: Heuristic, involved: string[]){\r\n        if(heuristic == null)\r\n            throw new Error(\"Heuristic cannot be null.\");\r\n        \r\n        if(involved == null)\r\n            throw new Error(\"Involved agents cannot be null.\");\r\n        \r\n        this._heuristic = heuristic;\r\n        this._involved = new Set<string>(involved);\r\n    }\r\n\r\n    get heuristic(){\r\n        return this._heuristic;\r\n    }\r\n\r\n    anyInvolved(agents: Agent[]){\r\n        return agents.some(agent => this._involved.has(agent.Name));\r\n    }\r\n}\r\n\r\nexport class Desires{\r\n    private _desires: Desire[];\r\n\r\n    constructor(){\r\n        this._desires = [];\r\n    }\r\n\r\n    get any(): boolean{\r\n        return this._desires.length > 0;\r\n    }\r\n\r\n    append(desire: Desire): Desires{\r\n        if(desire != null)\r\n            this._desires.push(desire);\r\n        \r\n        return this;\r\n    }\r\n\r\n    clear(): void{\r\n        this._desires = [];\r\n    }\r\n\r\n    anyInvolved(agents: Agent[]): boolean{\r\n        return this._desires.some(desire => desire.anyInvolved(agents));\r\n    }\r\n\r\n    heuristicTotal(crowd: Crowd){\r\n        return this._desires.reduce((accumulated, desire) => accumulated + desire.heuristic(crowd), 0);\r\n    }\r\n}\r\n\r\nexport class Agents{\r\n    private _agents: Agent[];\r\n    private _availableAgents: Agent[];\r\n\r\n    constructor(agents: Agent[]){\r\n        if(agents == null)\r\n            throw new Error(\"Agents cannot be null.\");\r\n        \r\n        this._agents = agents;\r\n        this._availableAgents = [];\r\n    }\r\n\r\n    get all(): Agent[]{\r\n        return this._agents;\r\n    }\r\n\r\n    get count(): number{\r\n        return this._agents.length;\r\n    }\r\n\r\n    allExcept(agent: Agent): Agent[]{\r\n        return this._agents.filter(a => a.Name !== agent.Name);\r\n    }\r\n\r\n    popRandomAgent(): Agent{\r\n        if(this._availableAgents.length === 0)\r\n            this._availableAgents = [...this._agents];\r\n        \r\n        let ponderatedAgents: Agent[] = [];\r\n        for(let agent of this._availableAgents){\r\n            for(let i = 0; i < agent.Personality.introvertyExtroverty; i++){\r\n                ponderatedAgents.push(agent);\r\n            }\r\n        }\r\n\r\n        let selectedAgent = randomFromList(ponderatedAgents);\r\n        this._availableAgents = this._availableAgents.filter(a => a.Name !== selectedAgent.Name);\r\n        return selectedAgent;\r\n    }\r\n}\r\n\r\nexport class Characteristics{\r\n    private _name: string;\r\n    private _table: TruthTable;\r\n\r\n    constructor(name: string, characteristics: string[] = []){\r\n        if(name == null || name.trim() === \"\")\r\n            throw new Error(\"Name cannot be empty.\");\r\n        \r\n        this._name = name;\r\n\r\n        this._table = new TruthTable();\r\n        for(let characteristic of characteristics){\r\n            if(name != null && name.trim() !== \"\"){\r\n                this._table.add(Sentence.build(characteristic, this._name));\r\n            }\r\n        }\r\n    }\r\n\r\n    get table(){\r\n        return this._table;\r\n    }\r\n\r\n    is(characteristic: string){\r\n        if(characteristic == null || characteristic.trim() === \"\")\r\n            throw new Error(\"Characteristic cannot be empty.\");\r\n        \r\n        return this._table.exists(Sentence.build(characteristic, this._name));\r\n    }\r\n}","import { Agent } from \"./agent\";\r\n\r\nexport class Location{\r\n    private _name: string;\r\n    private _connections: Map<string, Location>;\r\n    private _agents: Map<string, Agent>;\r\n\r\n    constructor(name){\r\n        if(name == null || name.trim() === \"\")\r\n            throw new Error(\"Location cannot be null.\");\r\n        \r\n        this._name = name;\r\n        this._connections = new Map<string, Location>();\r\n        this._agents = new Map<string, Agent>();\r\n    }\r\n\r\n    get name(){\r\n        return this._name;\r\n    }\r\n\r\n    get connections(): Location[]{\r\n        return Array.from(this._connections.values());\r\n    }\r\n\r\n    get agents(): Agent[]{\r\n        return Array.from(this._agents.values());\r\n    }\r\n\r\n    append(agents: Agent[]): void{\r\n        if(agents == null) return;\r\n\r\n        for(let agent of agents){\r\n            this._agents.set(agent.Name, agent);\r\n        }\r\n    }\r\n\r\n    remove(agent: Agent): void{\r\n        if(agent == null) return;\r\n\r\n        this._agents.delete(agent.Name);\r\n    }\r\n\r\n    has(agent: Agent): boolean{\r\n        if(agent == null) return false;\r\n\r\n        return this._agents.has(agent.Name);\r\n    }\r\n\r\n    connectWith(location: Location): void{\r\n        if(location == null) return;\r\n\r\n        this._connections.set(location.name, location);\r\n    }\r\n\r\n    isConnected(location: Location): boolean{\r\n        if(location == null) return false;\r\n\r\n        return this._connections.has(location.name);\r\n    }\r\n\r\n    static join(first: Location, second: Location): void{\r\n        first.connectWith(second);\r\n        second.connectWith(first);\r\n    }\r\n}\r\n\r\nexport class MapStructure{\r\n    private _locations: Map<string, Location>;\r\n    private _ubications: Map<string, string>;\r\n\r\n    constructor(locations: Location[]){\r\n        if(locations == null)\r\n            throw new Error(\"Locations cannot be null.\");\r\n        \r\n        this._locations = new Map<string, Location>();\r\n        this._ubications = new Map<string, string>();\r\n\r\n        for(let location of locations){\r\n            this._locations.set(location.name, location);\r\n        }\r\n    }\r\n\r\n    getLocation(location: string): Location{\r\n        if(location == null || location.trim() === \"\" || !this._locations.has(location)) return null;\r\n\r\n        return this._locations.get(location);\r\n    }\r\n\r\n    getUbication(agent: Agent): Location{\r\n        if(agent == null || !this._ubications.has(agent.Name)) return null;\r\n\r\n        return this._locations.get(this._ubications.get(agent.Name));\r\n    }\r\n\r\n    move(agent: Agent, destination: Location): boolean{\r\n        if(agent == null || destination == null || !this._locations.has(destination.name))\r\n            return false;\r\n        \r\n        if(!this._ubications.has(agent.Name)){\r\n            this._ubications.set(agent.Name, destination.name);\r\n            destination.append([ agent ]);\r\n            return true;\r\n        }\r\n\r\n        let actualLocation = this.getUbication(agent);\r\n        if(!actualLocation.has(agent))\r\n            return false;\r\n        \r\n        if(!actualLocation.isConnected(destination))\r\n            return false;\r\n        \r\n        this._ubications.set(agent.Name, destination.name);\r\n        actualLocation.remove(agent);\r\n        destination.append([ agent ]);\r\n        return true;\r\n    }\r\n\r\n    areInTheSameLocation(first: Agent, second: Agent): boolean{\r\n        if(first == null || second == null || !this._ubications.has(first.Name) || !this._ubications.has(second.Name))\r\n            return false;\r\n        \r\n        return this._ubications.get(first.Name) === this._ubications.get(second.Name);\r\n    }\r\n}","import { IDeliverer, IInteraction, Postconditions, Preconditions, Timing } from \"./interfaces\";\r\nimport { Phrase } from \"./phrase\";\r\nimport { Roles, RolesDescriptor } from \"./roles\";\r\nimport { Queue } from \"data-structs-n-algos\";\r\nimport { Agent } from \"./agent\";\r\nimport { TruthTable } from \"first-order-logic\";\r\n\r\nexport class Deliverer implements IDeliverer{\r\n    private _phrases: Queue<Phrase>;\r\n\r\n    constructor(phrases: Phrase[]){\r\n        if(phrases == null)\r\n            throw new Error(\"Phrases cannot be null.\");\r\n        \r\n        this._phrases = new Queue<Phrase>(phrases);\r\n    }\r\n\r\n    get isFinished(): boolean{\r\n        return this._phrases.isEmpty();\r\n    }\r\n\r\n    deliver(roles: Roles): Phrase {\r\n        if(!this.isFinished)\r\n            return this._phrases.dequeue();\r\n\r\n        throw new Error(\"No phrases to deliver.\");\r\n    }\r\n}\r\n\r\nexport abstract class BaseInteraction implements IInteraction{\r\n    private _name: string;\r\n    private _description: string;\r\n    private _preconditions: Preconditions;\r\n    private _postconditions: Postconditions;\r\n    private _timing: Timing;\r\n\r\n    protected _isIntimate: boolean;\r\n\r\n    constructor(\r\n        name: string, \r\n        description: string, \r\n        timing: Timing,\r\n        preconditions: Preconditions,\r\n        postconditions: Postconditions){\r\n\r\n        if(name == null || name.trim() === \"\")\r\n            throw new Error(\"Name cannot be empty.\");\r\n        \r\n        if(description == null || description.trim() === \"\")\r\n            throw new Error(\"Description cannot be empty.\");\r\n        \r\n        if(preconditions == null)\r\n            throw new Error(\"Preconditions cannot be null.\");\r\n        \r\n        if(postconditions == null)\r\n            throw new Error(\"Postconditions cannot be null.\");\r\n\r\n        this._name = name;\r\n        this._description = description;\r\n        this._timing = timing;\r\n        this._preconditions = preconditions;\r\n        this._postconditions = postconditions;\r\n        this._isIntimate = false;\r\n    }\r\n\r\n    get name(){\r\n        return this._name;\r\n    }\r\n\r\n    get description(){\r\n        return this._description;\r\n    }\r\n\r\n    get preconditions(){\r\n        return this._preconditions;\r\n    }\r\n\r\n    get postconditions(){\r\n        return this._postconditions;\r\n    }\r\n\r\n    get isIntimate(){\r\n        return this._isIntimate;\r\n    }\r\n\r\n    get timing(){\r\n        return this._timing;\r\n    }\r\n\r\n    abstract get deliverer(): IDeliverer;\r\n    abstract get rolesDescriptor(): RolesDescriptor;\r\n\r\n    abstract intimate(): IInteraction;\r\n\r\n    equals(interaction: IInteraction): boolean {\r\n        if(interaction == null) return false;\r\n\r\n        return this._name === interaction.name;\r\n    }\r\n\r\n    globallyEquals(interaction: IInteraction): boolean {\r\n        if(interaction == null) return false;\r\n\r\n        return this._name === interaction.name;\r\n    }\r\n\r\n    getPermutations(main: Agent, other: Agent[]): Roles[] {\r\n        let result: Roles[] = [];\r\n        let descriptor = this.rolesDescriptor;\r\n\r\n        if (other.length < descriptor.secondarys.length) return result;\r\n\r\n        let agentCombinations = this.calculateAgentCombinations(other, descriptor.secondarys.length);\r\n\r\n        for (let combination of agentCombinations)\r\n        {\r\n            if (combination.length === 0)\r\n            {\r\n                result.push(new Roles().match(descriptor.main, main));\r\n                continue;\r\n            }\r\n\r\n            for (let agent of combination)\r\n            {\r\n                var roles = new Roles().match(descriptor.main, main);\r\n\r\n                roles.match(descriptor.secondarys[0], agent);\r\n                var remainingSecondarys = descriptor.secondarys.filter(x => !roles.has(x));\r\n                var remainingAgents = combination.filter(x => !roles.matched(x));\r\n\r\n                this.fillRemainingPermutations(roles, remainingSecondarys, remainingAgents);\r\n\r\n                result.push(roles);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private calculateAgentCombinations(agents: Agent[], size: number): Agent[][]{\r\n        let oneElemSequences = agents.map(a => [ a ]);\r\n\r\n        let result: Agent[][] = [];\r\n        result.push([]);\r\n\r\n        for (let oneElemSequence of oneElemSequences)\r\n        {\r\n            let length: number = result.length;\r\n\r\n            for (let i = 0; i < length; i++)\r\n            {\r\n                if (result[i].length >= size)\r\n                    continue;\r\n\r\n                result.push(result[i].concat(oneElemSequence));\r\n            }\r\n        }\r\n\r\n        return result.filter(x => x.length === size);\r\n    }\r\n\r\n    private fillRemainingPermutations(roles: Roles, secondarys: string[], agents: Agent[]): void{\r\n        if (secondarys.length === 0) return;\r\n\r\n        for (let agent of agents)\r\n        {\r\n            roles.match(secondarys[0], agent);\r\n            var remainingSecondarys = secondarys.filter(x => !roles.has(x));\r\n            var remainingAgents = agents.filter(x => !roles.matched(x));\r\n\r\n            this.fillRemainingPermutations(roles, remainingSecondarys, remainingAgents);\r\n        }\r\n    }\r\n}\r\n\r\nexport class Interaction extends BaseInteraction{\r\n    private _phrases: Phrase[];\r\n    private _rolesDescriptor: RolesDescriptor;\r\n\r\n    constructor(\r\n        name: string, \r\n        description: string, \r\n        rolesDescriptor: RolesDescriptor,\r\n        phrases: Phrase[],\r\n        timing: Timing = Timing.Single,\r\n        preconditions: Preconditions = (table, roles, map) => true,\r\n        postconditions: Postconditions = (roles, map) => TruthTable.empty){\r\n        \r\n        super(name, description, timing, preconditions, postconditions);\r\n\r\n        if(rolesDescriptor == null)\r\n            throw new Error(\"Roles descriptor cannot be null.\");\r\n        \r\n        if(phrases == null || phrases.length === 0)\r\n            throw new Error(\"Interaction must have almost one phrase.\");\r\n        \r\n        this._rolesDescriptor = rolesDescriptor;\r\n        this._phrases = phrases;\r\n    }\r\n\r\n    get deliverer(): IDeliverer {\r\n        return new Deliverer(this._phrases);\r\n    }\r\n\r\n    get rolesDescriptor(): RolesDescriptor {\r\n        return this._rolesDescriptor;\r\n    }\r\n\r\n    intimate(): IInteraction {\r\n        this._isIntimate = true;\r\n\r\n        for(let phrase of this._phrases){\r\n            phrase.intimate();\r\n        }\r\n\r\n        return this;\r\n    }\r\n}","import { Effect, EffectDirection, EffectReaction, Reactions, Situation, apply } from \"npc-emotional\";\r\nimport { Phrase } from \"./phrase\";\r\nimport { IDeliverer, IInteraction } from \"./interfaces\";\r\nimport { TruthTable } from \"first-order-logic\";\r\nimport { Roles } from \"./roles\";\r\nimport { MapStructure, Location } from \"./location\";\r\nimport { Step } from \"./step\";\r\nimport { Input } from \"./input\";\r\nimport { Crowd } from \"./agent\";\r\n\r\nexport class OnGoingInteraction{\r\n    private _deliverer: IDeliverer;\r\n    private _effect: Effect;\r\n    private _performerRole:string;\r\n    private _targetRole:string;\r\n    private _actualPhrase: Phrase;\r\n    private _onGoingPostconditions: TruthTable;\r\n\r\n    private _roles: Roles;\r\n    private _map: MapStructure;\r\n    private _table: TruthTable;\r\n    private _interaction: IInteraction;\r\n\r\n    constructor(interaction: IInteraction, roles: Roles, map: MapStructure, table: TruthTable){\r\n        if(interaction == null)\r\n            throw new Error(\"Interaction cannot be null.\");\r\n        \r\n        if(roles == null)\r\n            throw new Error(\"Roles cannot be null.\");\r\n        \r\n        if(map == null)\r\n            throw new Error(\"Map cannot be null.\");\r\n        \r\n        if(table == null)\r\n            throw new Error(\"Postconditions table cannot be null.\");\r\n\r\n        this._interaction = interaction;\r\n        this._roles = roles;\r\n        this._map = map;\r\n        this._table = table;\r\n\r\n        this._effect = Effect.null();\r\n        this._performerRole = null;\r\n        this._targetRole = null;\r\n        this._onGoingPostconditions = new TruthTable();\r\n    }\r\n\r\n    get interaction(){\r\n        return this._interaction;\r\n    }\r\n\r\n    get roles(){\r\n        return this._roles;\r\n    }\r\n\r\n    get map(){\r\n        return this._map;\r\n    }\r\n\r\n    get isInteractionEnded(): boolean{\r\n        return this._deliverer.isFinished && this._effect.isNull;\r\n    }\r\n\r\n    get location(): Location{\r\n        return this._map.getUbication(this._roles.get(this._interaction.rolesDescriptor.main));\r\n    }\r\n\r\n    get postconditions(): TruthTable\r\n    {\r\n        this._onGoingPostconditions.join(this._interaction.postconditions(this._table, this._roles, this._map));\r\n        return this._onGoingPostconditions;\r\n    }\r\n\r\n    performStep(input: Input): Step{\r\n        this.initializeDeliverer();\r\n        \r\n        if (!this._effect.isNull)\r\n            return this.calculateAgentsReactions();\r\n\r\n        if (input.isVoid)\r\n        {\r\n            this._actualPhrase = this._deliverer.deliver(this._roles);\r\n            this.forcePhraseRelations(this._actualPhrase.performerRole, this._actualPhrase.targetRole);\r\n\r\n            if (this._roles.get(this._actualPhrase.performerRole).IsHuman && this._actualPhrase.isMultialternative)\r\n                return Step.fromChoices(this._actualPhrase\r\n                    .allAlternatives(this._roles)\r\n                    .map(alternative => this._roles.assignRoles(alternative)));\r\n            else\r\n                return this.executePhraseAction(input);\r\n        }\r\n        else\r\n            return this.executePhraseAction(input);\r\n    }\r\n\r\n    private initializeDeliverer(): void\r\n    {\r\n        if (this._deliverer == null)\r\n            this._deliverer = this._interaction.deliverer;\r\n    }\r\n\r\n    private forcePhraseRelations(performerRole: string, targetRole: string): void\r\n    {\r\n        if (targetRole != null && targetRole.trim() !== \"\")\r\n        {\r\n            this._roles.get(performerRole).Relations.get(this._roles.get(targetRole).Name);\r\n            this._roles.get(targetRole).Relations.get(this._roles.get(performerRole).Name);\r\n        }\r\n    }\r\n\r\n    private executePhraseAction(input: Input): Step{\r\n        let result = this._actualPhrase.action(\r\n            this._roles, \r\n            new Crowd(this.location.agents), \r\n            input.choiceIndex);\r\n\r\n        this._effect = result.effect;\r\n        this._performerRole = this._actualPhrase.performerRole;\r\n        this._targetRole = this._actualPhrase.targetRole;\r\n\r\n        if (result.hasSentence && !this._onGoingPostconditions.exists(result.sentence))\r\n            this._onGoingPostconditions.add(result.sentence);\r\n\r\n        return Step.fromContent(result.content, this.isInteractionEnded);\r\n    }\r\n\r\n    private calculateAgentsReactions(): Step{\r\n        let reactions = new Reactions();\r\n\r\n        if(this._effect.direction != EffectDirection.Neutral)\r\n        {\r\n            var situation = this._effect.isTargeted\r\n                ? new Situation(\r\n                    this._roles.get(this._performerRole),\r\n                    this._roles.get(this._effect.target),\r\n                    this._interaction.isIntimate\r\n                    ? this._effect.isThirdPerson\r\n                        ? [ this._roles.get(this._targetRole) ]\r\n                        : []\r\n                    : this.location.agents\r\n                        .filter(x => x.Name !== this._roles.get(this._effect.target).Name \r\n                            && x.Name !== this._roles.get(this._performerRole).Name))\r\n                : new Situation(\r\n                    this._roles.get(this._performerRole),\r\n                    null,\r\n                    this.location.agents\r\n                        .filter(x => x.Name !== this._roles.get(this._performerRole).Name));\r\n\r\n            reactions.append(apply(this._effect, situation, this._interaction.isIntimate));\r\n        }\r\n\r\n        this._effect = Effect.null();\r\n\r\n        return Step.fromReactions(reactions, this.isInteractionEnded);\r\n    }\r\n\r\n    equals(other: OnGoingInteraction): boolean{\r\n        return this._interaction.equals(other.interaction) && this._roles.equals(other.roles);\r\n    }\r\n\r\n    toString(): string\r\n    {\r\n        return this._roles.assignRoles(this._interaction.description);\r\n    }\r\n}","import { Agent } from \"./agent\";\r\nimport { OnGoingInteraction } from \"./ongoing\";\r\nimport { IInteraction } from \"./interfaces\";\r\n\r\nexport type Historic = {\r\n    agent: Agent;\r\n    ongoing: OnGoingInteraction;\r\n}\r\n\r\nexport class HistoricInteractions{\r\n    private _executions: Historic[];\r\n\r\n    constructor(){\r\n        this._executions = [];\r\n    }\r\n\r\n    add(agent: Agent, ongoing: OnGoingInteraction){\r\n        if(agent == null)\r\n            throw new Error(\"Agent cannot be null.\");\r\n        \r\n        if(ongoing == null)\r\n            throw new Error(\"On going interaction cannot be null.\");\r\n        \r\n        this._executions.push({\r\n            agent,\r\n            ongoing\r\n        });\r\n    }\r\n\r\n    hasExecutedInteraction(interaction: IInteraction): boolean{\r\n        return this._executions.some(e => e.ongoing.interaction.equals(interaction));\r\n    }\r\n\r\n    hasExecutedOnGoingInteraction(ongoing: OnGoingInteraction): boolean{\r\n        return this._executions.some(e => e.ongoing.equals(ongoing));\r\n    }\r\n}","import { modusPonens, TruthTable } from \"first-order-logic\";\r\nimport { OnGoingInteraction } from \"./ongoing\";\r\nimport { IInteraction, Timing } from \"./interfaces\";\r\nimport { Agent , Agents} from \"./agent\";\r\nimport { MapStructure } from \"./location\";\r\nimport { HistoricInteractions } from \"./historic\";\r\nimport { Input } from \"./input\";\r\nimport { Step } from \"./step\";\r\nimport { randomFromList } from \"role-methods\";\r\n\r\ninterface AgentPossibleInteractions{\r\n    agent: Agent;\r\n    possibleInteractions: OnGoingInteraction[]\r\n}\r\n\r\nexport type ScenarioCondition = (scenario: Scenario) => boolean;\r\n\r\nexport class FinishingConditions{\r\n    private _conditions: ScenarioCondition[];\r\n\r\n    constructor(){\r\n        this._conditions = [];\r\n    }\r\n\r\n    with(condition: ScenarioCondition): FinishingConditions{\r\n        if(condition == null)\r\n            throw new Error(\"Condition cannot be null\");\r\n        \r\n        this._conditions.push(condition);\r\n\r\n        return this;\r\n    }\r\n\r\n    allMet(scenario: Scenario): boolean{\r\n        return this._conditions.every(c => c(scenario));\r\n    }\r\n}\r\n\r\nexport class World{\r\n    private _scenarios: Scenario[];\r\n    private _lastScenario: Scenario;\r\n\r\n    constructor(){\r\n        this._scenarios = [];\r\n        this._lastScenario = null;\r\n    }\r\n\r\n    get currentScenario(): Scenario{\r\n        let notFinishedScenarios = this._scenarios.filter(s => !s.isFinished);\r\n\r\n        if(notFinishedScenarios.length === 0)\r\n            return null;\r\n\r\n        if(this._lastScenario === null){\r\n            this._lastScenario = notFinishedScenarios[0];\r\n        }else{\r\n            if(this._lastScenario.name !== notFinishedScenarios[0].name && notFinishedScenarios[0].isInheritor){\r\n                notFinishedScenarios[0].postconditions.join(this._lastScenario.postconditions);\r\n            }\r\n        }\r\n        \r\n        return notFinishedScenarios[0];\r\n    }\r\n\r\n    add(scenario: Scenario){\r\n        if(scenario == null)\r\n            throw new Error(\"Scenario cannot be null.\");\r\n        \r\n        this._scenarios.push(scenario);\r\n    }\r\n}\r\n\r\nexport type ScenarioTurnPassed = (turn: number, scenario: Scenario) => string;\r\nexport const ScenarioEndAllConditionsMet: string = \"0\";\r\nexport const ScenarioEndNoInteractions: string = \"1\";\r\n\r\nexport class Scenario{\r\n    private _interactions: IInteraction[];\r\n    private _finishingConditions: FinishingConditions;\r\n    private _globalPostconditions: TruthTable;\r\n    private _onTurnPassed: ScenarioTurnPassed;\r\n\r\n    private _currentInteraction: OnGoingInteraction;\r\n    private _selectableInteractions: OnGoingInteraction[];\r\n    private _interactor: Agent;\r\n\r\n    private get thereIsCurrentInteraction(): boolean{\r\n        return this._currentInteraction != null;\r\n    }\r\n\r\n    private _name: string;\r\n    private _map: MapStructure;\r\n    private _agents: Agents;\r\n    private _historic: HistoricInteractions;\r\n    private _isFinished: boolean;\r\n    private _turn: number;\r\n    private _isInheritor: boolean;\r\n\r\n    constructor(\r\n        name: string,\r\n        map: MapStructure,\r\n        agents: Agents,\r\n        interactions: IInteraction[],\r\n        finishingConditions: FinishingConditions,\r\n        onTurnPassed: ScenarioTurnPassed = null\r\n    ){\r\n        if(name == null || name.trim() === \"\")\r\n            throw new Error(\"Name cannot be empty.\");\r\n        \r\n        if(map == null)\r\n            throw new Error(\"Map cannot be null.\");\r\n        \r\n        if(agents == null)\r\n            throw new Error(\"Agents cannot be null.\");\r\n        \r\n        if(interactions == null)\r\n            throw new Error(\"Interactions cannot be null.\");\r\n        \r\n        if(finishingConditions == null)\r\n            throw new Error(\"FinishingConditions cannot be null.\");\r\n        \r\n        this._name = name;\r\n        this._map = map;\r\n        this._agents = agents;\r\n        this._interactions = interactions;\r\n        this._finishingConditions = finishingConditions;\r\n        this._onTurnPassed = onTurnPassed == null ? (turn: number, scenario: Scenario) => \"\" : onTurnPassed;\r\n\r\n        this._isFinished = false;\r\n        this._selectableInteractions = [];\r\n        this._interactor = null;\r\n        this._historic = new HistoricInteractions();\r\n        this._globalPostconditions = new TruthTable();\r\n        this._turn = 0;\r\n        this._isInheritor = false;\r\n    }\r\n\r\n    get name(){\r\n        return this._name;\r\n    }\r\n\r\n    get map(){\r\n        return this._map;\r\n    }\r\n\r\n    get agents(){\r\n        return this._agents;\r\n    }\r\n\r\n    get interactions(){\r\n        return this._interactions;\r\n    }\r\n\r\n    get historic(){\r\n        return this._historic;\r\n    }\r\n\r\n    get isFinished(){\r\n        return this._isFinished;\r\n    }\r\n\r\n    get turn(){\r\n        return this._turn;\r\n    }\r\n\r\n    get isInheritor(){\r\n        return this._isInheritor;\r\n    }\r\n\r\n    get postconditions(){\r\n        return this._globalPostconditions;\r\n    }\r\n\r\n    inheritor(): Scenario{\r\n        this._isInheritor  = true;\r\n        return this;\r\n    }\r\n\r\n    performStep(input: Input): Step{\r\n        return this.thereIsCurrentInteraction\r\n            ? this.performCurrentInteractionStep(input)\r\n            : input.isVoid\r\n                ? this.performIAInteraction()\r\n                : this.performHumanInteraction(input.choiceIndex);\r\n    }\r\n\r\n    private performIAInteraction(): Step{\r\n        if (this._finishingConditions.allMet(this))\r\n        {\r\n            this._isFinished = true;\r\n            return Step.fromContent(ScenarioEndAllConditionsMet);\r\n        }\r\n\r\n        let agentPossibleInteractions = this.getNextAgentWithInteractions();\r\n        if(agentPossibleInteractions.agent == null)\r\n            agentPossibleInteractions = this.getNextAgentWithInteractionsAll();\r\n\r\n        let agent = agentPossibleInteractions.agent;\r\n        let possibleInteractions = agentPossibleInteractions.possibleInteractions;\r\n\r\n        if (agent == null)\r\n        {\r\n            this._isFinished = true;\r\n            return Step.fromContent(ScenarioEndNoInteractions);\r\n        }\r\n\r\n        if (agent.IsHuman)\r\n        {\r\n            this._interactor = agent;\r\n\r\n            this._selectableInteractions = possibleInteractions;\r\n\r\n            if(this._selectableInteractions.length === 1)\r\n            {\r\n                this._currentInteraction = this._selectableInteractions[0];\r\n                this._historic.add(agent, this._currentInteraction);\r\n\r\n                return this.performCurrentInteractionStep(Input.void());\r\n            }\r\n\r\n            return Step.fromChoices(this._selectableInteractions.map(i => i.toString()));\r\n        }\r\n        else\r\n        {\r\n            this._currentInteraction = randomFromList(possibleInteractions);\r\n            this._historic.add(agent, this._currentInteraction);\r\n\r\n            return this.performCurrentInteractionStep(Input.void());\r\n        }\r\n    }\r\n\r\n    private getNextAgentWithInteractions(): AgentPossibleInteractions {\r\n        let agent: Agent = null;\r\n        let possibleInteractions: OnGoingInteraction[] = null;\r\n\r\n        let poppedAgents: number = 0;\r\n        while(agent == null && poppedAgents <= this._agents.count)\r\n        {\r\n            let candidate = this._agents.popRandomAgent();\r\n            poppedAgents++;\r\n\r\n            possibleInteractions = this.calculateAllAvailableInteractions(\r\n                candidate, \r\n                this._agents.allExcept(candidate));\r\n\r\n            if (possibleInteractions.length > 0)\r\n                agent = candidate;\r\n        }\r\n\r\n        return {\r\n            agent,\r\n            possibleInteractions\r\n        };\r\n    }\r\n\r\n    private getNextAgentWithInteractionsAll(): AgentPossibleInteractions {\r\n        let agent: Agent = null;\r\n        let possibleInteractions: OnGoingInteraction[] = null;\r\n\r\n        for(const candidate of this._agents.all){\r\n            possibleInteractions = this.calculateAllAvailableInteractions(\r\n                candidate, \r\n                this._agents.allExcept(candidate));\r\n\r\n            if (possibleInteractions.length > 0){\r\n                agent = candidate;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return {\r\n            agent,\r\n            possibleInteractions\r\n        };\r\n    }\r\n\r\n    private calculateAllAvailableInteractions(main: Agent, others: Agent[]): OnGoingInteraction[]\r\n    {\r\n        let result: OnGoingInteraction[] = [];\r\n\r\n        for (let interaction of this._interactions)\r\n        {\r\n            if (interaction.timing === Timing.GlobalSingle \r\n                && this._historic.hasExecutedInteraction(interaction))\r\n                continue;\r\n\r\n            let permutations = interaction.getPermutations(main, others);\r\n            for (let permutation of permutations)\r\n            {\r\n                if(interaction.preconditions(this._globalPostconditions, permutation, this._map))\r\n                {\r\n                    let possibleInteraction = new OnGoingInteraction(interaction, permutation, this._map, this._globalPostconditions);\r\n                    if (interaction.timing === Timing.Repeteable \r\n                        || !this._historic.hasExecutedOnGoingInteraction(possibleInteraction))\r\n                        result.push(possibleInteraction);\r\n                }\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private performCurrentInteractionStep(input: Input): Step\r\n    {\r\n        let step = this._currentInteraction.performStep(input);\r\n        if (step.isEnder)\r\n        {\r\n            let postconditions = this._currentInteraction.postconditions;\r\n\r\n            if (this._globalPostconditions.join(postconditions))\r\n            {\r\n                let listeningAgents = this._currentInteraction.interaction.isIntimate\r\n                    ? this._currentInteraction.roles.agents\r\n                    : this._currentInteraction.location.agents;\r\n\r\n                for (let agent of listeningAgents)\r\n                {\r\n                    if(agent.logic.rules.elements.length > 0){\r\n                        modusPonens(agent.logic.rules, agent.logic.population, agent.logic.table, postconditions.elements);\r\n                    }\r\n                }\r\n            }\r\n\r\n            this._currentInteraction = null;\r\n            for(let turnText of this.passTurn()){\r\n                step.append(turnText);\r\n            }\r\n        }\r\n\r\n        return step;\r\n    }\r\n\r\n    private performHumanInteraction(choiceIndex: number): Step\r\n    {\r\n        this._currentInteraction = this._selectableInteractions[choiceIndex];\r\n        this._historic.add(this._interactor, this._currentInteraction);\r\n\r\n        return this.performCurrentInteractionStep(Input.void());\r\n    }\r\n\r\n    private passTurn(): string[]\r\n    {\r\n        this._turn++;\r\n        let turnTexts: string[] = [this._onTurnPassed(this._turn, this)];\r\n\r\n        for(let text of this._agents.all.map(a => a.OnTurnPassed(this._turn, a))){\r\n            turnTexts.push(text);\r\n        }\r\n\r\n        return turnTexts;\r\n    }\r\n}"],"names":["Input","n","choiceIndex","_choiceIndex","this","_createClass","key","get","u","length","r","Math","floor","random","o","Low","None","High","PhraseResult","Timing","content","effect","sentence","_content","_effect","_sentence","trim","Error","Alternative","text","_text","roles","Effect","Phrase","performerRole","targetRole","_alternatives","_performerRole","_targetRole","_isIntimate","_proto","prototype","allAlternatives","map","a","withAlternative","alternative","push","intimate","action","crowd","alternativeIndex","chooseAlternative","textAlternative","includes","parts","split","uncorcheted","say","assignRoles","performerHasMeaningfulDesires","calculateAlternativeBasedOnDesires","calculateAlternativeBasedOnEmotions","desires","Desires","any","anyInvolved","all","_this","MinHeuristicValue","performer","selectedAlternative","highestPunctuation","_step","value","punctuation","direction","EffectDirection","Neutral","heuristicTotal","alternativeStatus","copy","situation","Situation","Name","target","isThirdPerson","filter","x","apply","_iterator","_createForOfIteratorHelperLoose","_loop","calculateEffectDirection","Happiness","calculateEffectDirectionWithRelation","Relations","directedAlternatives","randomFromList","happiness","isHappy","Positive","isUnhappy","Negative","relation","isPonderatedGood","isPonderatedBad","isPonderatedNeutral","isNeutral","input","replace","RolesDescriptor","main","secondarys","_main","_secondarys","Set","Array","from","values","concat","Roles","_roles","Map","match","role","agent","validateRole","validateAgent","set","has","matched","agents","some","assignedResult","keys","done","roleName","equals","other","size","_step2","_iterator2","toString","roleNames","join","Step","_ender","_choices","_reactions","append","fromContent","isEnder","step","fromChoices","choices","Choices","fromReactions","reactions","items","_items","isValidItem","index","Agent","name","aspect","relations","personality","likes","characteristics","human","onTurnPassed","_name","_aspect","_likes","_relations","_happiness","_personality","_isHuman","_characteristics","_desires","_onTurnPassed","_logic","_isActive","Characteristics","turn","LogicAgent","population","add","Individual","activate","deactivate","humanize","dehumanize","table","elements","passTurn","Crowd","_crowd","_proto2","Desire","heuristic","involved","_involved","_heuristic","desire","clear","_proto4","reduce","accumulated","Agents","_agents","_availableAgents","_proto5","allExcept","popRandomAgent","ponderatedAgents","i","Personality","introvertyExtroverty","selectedAgent","_table","TruthTable","_step3","_iterator3","characteristic","Sentence","build","is","exists","Location","_connections","remove","connectWith","location","isConnected","first","second","MapStructure","locations","_locations","_ubications","getLocation","getUbication","move","destination","actualLocation","areInTheSameLocation","Deliverer","phrases","_phrases","Queue","deliver","isFinished","dequeue","isEmpty","BaseInteraction","description","timing","preconditions","postconditions","_description","_preconditions","_postconditions","_timing","interaction","globallyEquals","getPermutations","result","descriptor","rolesDescriptor","agentCombinations","calculateAgentCombinations","combination","remainingSecondarys","remainingAgents","fillRemainingPermutations","oneElemSequences","oneElemSequence","_step4","_iterator4","Interaction","Single","empty","_rolesDescriptor","_step5","_iterator5","phrase","OnGoingInteraction","_deliverer","_actualPhrase","_onGoingPostconditions","_map","_interaction","performStep","initializeDeliverer","isNull","isVoid","forcePhraseRelations","IsHuman","isMultialternative","executePhraseAction","calculateAgentsReactions","deliverer","hasSentence","isInteractionEnded","_this2","Reactions","isTargeted","isIntimate","HistoricInteractions","_executions","ongoing","hasExecutedInteraction","e","hasExecutedOnGoingInteraction","FinishingConditions","_conditions","condition","allMet","scenario","every","c","World","_scenarios","_lastScenario","notFinishedScenarios","s","isInheritor","ScenarioEndAllConditionsMet","ScenarioEndNoInteractions","Scenario","interactions","finishingConditions","_interactions","_finishingConditions","_globalPostconditions","_currentInteraction","_selectableInteractions","_interactor","_historic","_isFinished","_turn","_isInheritor","_proto3","inheritor","thereIsCurrentInteraction","performCurrentInteractionStep","performIAInteraction","performHumanInteraction","agentPossibleInteractions","getNextAgentWithInteractions","getNextAgentWithInteractionsAll","possibleInteractions","poppedAgents","count","candidate","calculateAllAvailableInteractions","others","GlobalSingle","permutation","possibleInteraction","Repeteable","listeningAgents","logic","rules","modusPonens","_step6","turnTexts","_iterator6","OnTurnPassed"],"mappings":"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"}