UNPKG

npc-aspect

Version:

Library for NPC aspect modelling.

1 lines 25 kB
{"version":3,"file":"index.mjs","sources":["../src/enumerations.ts","../src/aspect.ts","../src/likes.ts"],"sourcesContent":["export enum AgeKind\r\n{\r\n Kid,\r\n Teenager,\r\n Young,\r\n Midage,\r\n Old\r\n}\r\n\r\nexport enum ComplexionKind\r\n{\r\n Skinny,\r\n Thin,\r\n Fat,\r\n Athletic,\r\n Strongman\r\n}\r\n\r\nexport enum EyeColor\r\n{\r\n Black,\r\n Brown,\r\n Blue,\r\n Green\r\n}\r\n\r\nexport enum HairColor\r\n{\r\n White,\r\n Black,\r\n Brown,\r\n Red,\r\n Blond,\r\n Blue\r\n}\r\n\r\nexport enum HaircutStyle\r\n{\r\n Shaved,\r\n Short,\r\n StraightLong,\r\n CurvyLong,\r\n Bald\r\n}\r\n\r\nexport enum OriginKind\r\n{\r\n European,\r\n African,\r\n Asian,\r\n American,\r\n Arabic,\r\n Oceanic\r\n}\r\n\r\nexport enum SexKind\r\n{\r\n Male,\r\n Female,\r\n Androgynous\r\n}\r\n\r\nexport enum SpecieKind\r\n{\r\n Human,\r\n Dwarf,\r\n Elf,\r\n Goblin,\r\n Orc,\r\n Troll\r\n}\r\n\r\nexport const Complexions: ComplexionKind[] = [\r\n ComplexionKind.Athletic,\r\n ComplexionKind.Fat,\r\n ComplexionKind.Skinny,\r\n ComplexionKind.Strongman,\r\n ComplexionKind.Thin\r\n];\r\n\r\nexport const Eyes: EyeColor[] = [\r\n EyeColor.Black,\r\n EyeColor.Blue,\r\n EyeColor.Brown,\r\n EyeColor.Green\r\n];\r\n\r\nexport const HairColors: HairColor[] = [\r\n HairColor.Black,\r\n HairColor.Blond,\r\n HairColor.Blue,\r\n HairColor.Brown,\r\n HairColor.Red,\r\n HairColor.White\r\n];\r\n\r\nexport const HairCuts: HaircutStyle[] = [\r\n HaircutStyle.Bald,\r\n HaircutStyle.CurvyLong,\r\n HaircutStyle.Shaved,\r\n HaircutStyle.Short,\r\n HaircutStyle.StraightLong\r\n];\r\n\r\nexport const Origins: OriginKind[] = [\r\n OriginKind.African,\r\n OriginKind.American,\r\n OriginKind.Arabic,\r\n OriginKind.Asian,\r\n OriginKind.European,\r\n OriginKind.Oceanic\r\n];\r\n\r\nexport const Sexes: SexKind[] = [\r\n SexKind.Androgynous,\r\n SexKind.Female,\r\n SexKind.Male\r\n];\r\n\r\nexport const Species: SpecieKind[] = [\r\n SpecieKind.Dwarf,\r\n SpecieKind.Elf,\r\n SpecieKind.Goblin,\r\n SpecieKind.Human,\r\n SpecieKind.Orc,\r\n SpecieKind.Troll\r\n];\r\n\r\nexport const GoodSpecies: SpecieKind[] = [\r\n SpecieKind.Dwarf,\r\n SpecieKind.Elf,\r\n SpecieKind.Human\r\n];\r\n\r\nexport const BadSpecies: SpecieKind[] = [\r\n SpecieKind.Human,\r\n SpecieKind.Goblin,\r\n SpecieKind.Orc,\r\n SpecieKind.Troll\r\n];\r\n\r\nexport const Ages: AgeKind[] = [\r\n AgeKind.Kid,\r\n AgeKind.Midage,\r\n AgeKind.Old,\r\n AgeKind.Teenager,\r\n AgeKind.Young\r\n];\r\n\r\nexport function getAgeKind(age: number): AgeKind{\r\n if(age >= 12 && age <= 18) return AgeKind.Teenager;\r\n else if(age >= 19 && age <= 35) return AgeKind.Young;\r\n else if(age >= 36 && age <= 65) return AgeKind.Midage;\r\n else if(age >= 66) return AgeKind.Old;\r\n else return AgeKind.Kid;\r\n}","import {\r\n AgeKind, \r\n EyeColor, \r\n ComplexionKind, \r\n HairColor, \r\n HaircutStyle, \r\n OriginKind, \r\n SexKind, \r\n SpecieKind,\r\n Sexes,\r\n Origins,\r\n Eyes,\r\n HairColors,\r\n HairCuts,\r\n Complexions,\r\n Species,\r\n Ages\r\n} from \"./enumerations\";\r\nimport { random, randomFromList } from \"role-methods\";\r\n\r\nexport class Aspect{\r\n private _sex: SexKind;\r\n private _origin: OriginKind;\r\n private _eye: EyeColor;\r\n private _hair: HairColor;\r\n private _haircut: HaircutStyle;\r\n private _complexion: ComplexionKind;\r\n private _specie: SpecieKind;\r\n private _height: number;\r\n private _age: number;\r\n\r\n constructor(\r\n sex: SexKind = SexKind.Male,\r\n origin: OriginKind = OriginKind.European,\r\n eye: EyeColor = EyeColor.Black,\r\n hair: HairColor = HairColor.Black,\r\n haircut: HaircutStyle = HaircutStyle.Shaved,\r\n complexion: ComplexionKind = ComplexionKind.Thin,\r\n specie: SpecieKind = SpecieKind.Human,\r\n height: number = 180,\r\n age: number = 30)\r\n {\r\n this._sex = sex;\r\n this._origin = origin;\r\n this._eye = eye;\r\n this._hair = hair;\r\n this._haircut = haircut;\r\n this._complexion = complexion;\r\n this._height = height;\r\n this._age = age;\r\n this._specie = specie;\r\n }\r\n\r\n get sex(){\r\n return this._sex;\r\n }\r\n\r\n get origin(){\r\n return this._origin;\r\n }\r\n\r\n get eye(){\r\n return this._eye;\r\n }\r\n\r\n get hair(){\r\n return this._hair;\r\n }\r\n\r\n get haircut(){\r\n return this._haircut;\r\n }\r\n\r\n get complexion(){\r\n return this._complexion;\r\n }\r\n\r\n get specie(){\r\n return this._specie;\r\n }\r\n\r\n get height(){\r\n return this._height;\r\n }\r\n\r\n get age(){\r\n return this._age;\r\n }\r\n\r\n static generateHuman(\r\n sex: SexKind,\r\n origin: OriginKind,\r\n eye: EyeColor,\r\n hair: HairColor,\r\n haircut: HaircutStyle,\r\n complexion: ComplexionKind,\r\n height: number,\r\n age: number): Aspect{\r\n \r\n return new Aspect(\r\n sex,\r\n origin,\r\n eye,\r\n hair,\r\n haircut,\r\n complexion,\r\n SpecieKind.Human,\r\n height,\r\n age\r\n );\r\n }\r\n\r\n static generateAgeKindHuman(\r\n sex: SexKind,\r\n origin: OriginKind,\r\n eye: EyeColor,\r\n hair: HairColor,\r\n haircut: HaircutStyle,\r\n complexion: ComplexionKind,\r\n height: number,\r\n ageKind: AgeKind): Aspect{\r\n \r\n return this.generateHuman(\r\n sex,\r\n origin,\r\n eye,\r\n hair,\r\n haircut,\r\n complexion,\r\n height,\r\n this.getRandomAgeByAgeKind(ageKind)\r\n );\r\n }\r\n\r\n static generateRandomAgeKind(ageKind: AgeKind): Aspect{\r\n \r\n let selectedSpecie = randomFromList(Species);\r\n return new Aspect(\r\n randomFromList(Sexes),\r\n randomFromList(Origins),\r\n randomFromList(Eyes),\r\n randomFromList(HairColors),\r\n randomFromList(HairCuts),\r\n randomFromList(Complexions),\r\n selectedSpecie,\r\n this.getRandomHeightBySpecie(selectedSpecie),\r\n this.getRandomAgeByAgeKind(ageKind));\r\n }\r\n\r\n static generateOriginHuman(origin: OriginKind): Aspect{\r\n return this.generateOriginAndSexHuman(\r\n origin,\r\n randomFromList(Sexes));\r\n }\r\n\r\n static generateRandomSpecie(specie: SpecieKind): Aspect{\r\n return this.generateRandomSpecieAndSex(\r\n specie, \r\n randomFromList(Sexes));\r\n }\r\n\r\n static generateOriginAndSexHuman(origin: OriginKind, sex: SexKind): Aspect{\r\n return this.generateOriginAgeAndSexHuman(\r\n origin, \r\n randomFromList(Ages), \r\n sex);\r\n }\r\n\r\n static generateOriginAndAgeHuman(origin: OriginKind, age: AgeKind): Aspect{\r\n return this.generateOriginAgeAndSexHuman(\r\n origin, \r\n age, \r\n randomFromList(Sexes));\r\n }\r\n\r\n static generateOriginAgeAndSexHuman(origin: OriginKind, age: AgeKind, sex: SexKind): Aspect{\r\n return new Aspect(\r\n sex,\r\n origin,\r\n randomFromList(Eyes),\r\n randomFromList(HairColors),\r\n randomFromList(HairCuts),\r\n randomFromList(Complexions),\r\n SpecieKind.Human,\r\n this.getRandomHeightBySpecie(SpecieKind.Human),\r\n this.getRandomAgeByAgeKind(age));\r\n }\r\n\r\n static generateRandomSpecieAndSex(specie: SpecieKind, sex: SexKind): Aspect{\r\n return this.generateRandomSpecieAgeAndSex(\r\n specie, \r\n randomFromList(Ages), \r\n sex);\r\n }\r\n\r\n static generateRandomSpecieAndAge(specie: SpecieKind, age: AgeKind): Aspect{\r\n return this.generateRandomSpecieAgeAndSex(\r\n specie, \r\n age, \r\n randomFromList(Sexes));\r\n }\r\n\r\n static generateRandomSpecieAgeAndSex(specie: SpecieKind, age: AgeKind, sex: SexKind): Aspect{\r\n return new Aspect(\r\n sex,\r\n randomFromList(Origins),\r\n randomFromList(Eyes),\r\n randomFromList(HairColors),\r\n randomFromList(HairCuts),\r\n randomFromList(Complexions),\r\n specie,\r\n this.getRandomHeightBySpecie(specie),\r\n this.getRandomAgeByAgeKind(age));\r\n }\r\n\r\n copy(): Aspect{\r\n return new Aspect(\r\n this._sex, \r\n this._origin, \r\n this._eye, this._hair, \r\n this._haircut, \r\n this._complexion, \r\n this._specie, \r\n this._height, \r\n this._age);\r\n }\r\n\r\n private static getRandomAgeByAgeKind(age: AgeKind): number{\r\n switch(age){\r\n case AgeKind.Kid:\r\n return 5 + random(6);\r\n case AgeKind.Teenager:\r\n return 12 + random(6);\r\n case AgeKind.Young:\r\n return 19 + random(16);\r\n case AgeKind.Midage:\r\n return 36 + random(29);\r\n case AgeKind.Old:\r\n return 66 + random(34);\r\n }\r\n }\r\n\r\n private static getRandomHeightBySpecie(specie: SpecieKind): number\r\n {\r\n let baseHeight = 150;\r\n let increase = 51; \r\n \r\n if(specie == SpecieKind.Dwarf || specie == SpecieKind.Goblin)\r\n {\r\n baseHeight = 100;\r\n increase = 61;\r\n }\r\n \r\n return baseHeight + random(increase);\r\n }\r\n}","import { random } from \"role-methods\";\r\nimport { Aspect } from \"./aspect\";\r\nimport { \r\n SexKind, \r\n OriginKind, \r\n EyeColor, \r\n HairColor, \r\n HaircutStyle, \r\n ComplexionKind, \r\n SpecieKind, \r\n AgeKind, \r\n Sexes, \r\n Ages, \r\n Complexions, \r\n Eyes, \r\n HairColors, \r\n HairCuts, \r\n Origins, \r\n Species,\r\n getAgeKind\r\n} from \"./enumerations\";\r\n\r\nconst MaxLike = 100;\r\nconst MinLike = 0;\r\n\r\nexport class Likes{\r\n private _sexMap: Map<SexKind, number>;\r\n private _originMap: Map<OriginKind, number>;\r\n private _eyeColorMap: Map<EyeColor, number>;\r\n private _hairColorMap: Map<HairColor, number>;\r\n private _hairCutMap: Map<HaircutStyle, number>;\r\n private _complexionMap: Map<ComplexionKind, number>;\r\n private _specieMap: Map<SpecieKind, number>;\r\n private _ageMap: Map<AgeKind, number>;\r\n\r\n constructor(){\r\n this._sexMap = new Map<SexKind, number>();\r\n this._originMap = new Map<OriginKind, number>();\r\n this._eyeColorMap = new Map<EyeColor, number>();\r\n this._hairColorMap = new Map<HairColor, number>();\r\n this._hairCutMap = new Map<HaircutStyle, number>();\r\n this._complexionMap = new Map<ComplexionKind, number>();\r\n this._specieMap = new Map<SpecieKind, number>();\r\n this._ageMap = new Map<AgeKind, number>();\r\n\r\n this.initializeMaps();\r\n }\r\n\r\n static likesSpecie(specie: SpecieKind): Likes{\r\n let likes = new Likes();\r\n \r\n this.minimizeAspectMap(likes._specieMap);\r\n likes._specieMap.set(specie, MaxLike);\r\n \r\n return likes;\r\n }\r\n\r\n static likesSex(sex: SexKind): Likes{\r\n let likes = new Likes();\r\n \r\n this.minimizeAspectMap(likes._sexMap);\r\n likes._sexMap.set(sex, MaxLike);\r\n \r\n return likes;\r\n }\r\n\r\n static likesSpecieAndSex(specie: SpecieKind, sex: SexKind): Likes{\r\n let likes = this.likesSpecie(specie);\r\n \r\n this.minimizeAspectMap(likes._sexMap);\r\n likes._sexMap.set(sex, MaxLike);\r\n \r\n return likes;\r\n }\r\n\r\n static likesConcreteHuman(\r\n sex: SexKind,\r\n preferredOrigin: OriginKind, \r\n preferredEye: EyeColor, \r\n preferredHair: HairColor, \r\n preferredHaircut: HaircutStyle,\r\n preferredComplexion: ComplexionKind,\r\n preferredAge: AgeKind): Likes{\r\n \r\n return this.likesConcreteSpecie(\r\n SpecieKind.Human,\r\n sex,\r\n preferredOrigin,\r\n preferredEye,\r\n preferredHair,\r\n preferredHaircut,\r\n preferredComplexion,\r\n preferredAge);\r\n }\r\n\r\n static likesConcreteSpecie(\r\n specie: SpecieKind,\r\n sex: SexKind,\r\n preferredOrigin: OriginKind, \r\n preferredEye: EyeColor, \r\n preferredHair: HairColor, \r\n preferredHaircut: HaircutStyle,\r\n preferredComplexion: ComplexionKind,\r\n preferredAge: AgeKind): Likes{\r\n let likes = this.likesSpecieAndSex(specie, sex);\r\n \r\n likes._originMap.set(preferredOrigin, MaxLike);\r\n likes._eyeColorMap.set(preferredEye, MaxLike);\r\n likes._hairColorMap.set(preferredHair, MaxLike);\r\n likes._hairCutMap.set(preferredHaircut, MaxLike);\r\n likes._complexionMap.set(preferredComplexion, MaxLike);\r\n likes._ageMap.set(preferredAge, MaxLike);\r\n\r\n return likes;\r\n }\r\n\r\n static likesAspect(aspect: Aspect){\r\n let likes = new Likes();\r\n\r\n likes._specieMap.set(aspect.specie, MaxLike);\r\n likes._sexMap.set(aspect.sex, MaxLike);\r\n likes._originMap.set(aspect.origin, MaxLike);\r\n likes._eyeColorMap.set(aspect.eye, MaxLike);\r\n likes._hairColorMap.set(aspect.hair, MaxLike);\r\n likes._hairCutMap.set(aspect.haircut, MaxLike);\r\n likes._complexionMap.set(aspect.complexion, MaxLike);\r\n likes._ageMap.set(getAgeKind(aspect.age), MaxLike);\r\n \r\n return likes;\r\n }\r\n\r\n Eval(aspect: Aspect): number{\r\n let sum = this._sexMap.get(aspect.sex) * 4;\r\n sum += this._originMap.get(aspect.origin);\r\n sum += this._eyeColorMap.get(aspect.eye);\r\n sum += this._hairColorMap.get(aspect.hair);\r\n sum += this._hairCutMap.get(aspect.haircut);\r\n sum += this._complexionMap.get(aspect.complexion);\r\n sum += this._ageMap.get(getAgeKind(aspect.age));\r\n sum += this._specieMap.get(aspect.specie) * 4;\r\n \r\n return sum / 14;\r\n }\r\n\r\n private initializeMaps(): void{\r\n this.initializeAspectMap(this._sexMap, Sexes);\r\n this.initializeAspectMap(this._originMap, Origins);\r\n this.initializeAspectMap(this._eyeColorMap, Eyes);\r\n this.initializeAspectMap(this._hairColorMap, HairColors);\r\n this.initializeAspectMap(this._hairCutMap, HairCuts);\r\n this.initializeAspectMap(this._complexionMap, Complexions);\r\n this.initializeAspectMap(this._specieMap, Species);\r\n this.initializeAspectMap(this._ageMap, Ages);\r\n }\r\n\r\n private initializeAspectMap<T>(map: Map<T, number>, values: T[]): void {\r\n for(let value of values){\r\n map.set(value, random(MaxLike));\r\n }\r\n }\r\n\r\n private static minimizeAspectMap<T>(map: Map<T, number>): void {\r\n for(let key of map.keys()){\r\n map.set(key, MinLike);\r\n }\r\n }\r\n\r\n copy(): Likes{\r\n let copy = new Likes();\r\n\r\n Likes.copyMap(this._sexMap, copy._sexMap);\r\n Likes.copyMap(this._originMap, copy._originMap);\r\n Likes.copyMap(this._eyeColorMap, copy._eyeColorMap);\r\n Likes.copyMap(this._hairColorMap, copy._hairColorMap);\r\n Likes.copyMap(this._hairCutMap, copy._hairCutMap);\r\n Likes.copyMap(this._complexionMap, copy._complexionMap);\r\n Likes.copyMap(this._specieMap, copy._specieMap);\r\n Likes.copyMap(this._ageMap, copy._ageMap);\r\n\r\n return copy;\r\n }\r\n\r\n private static copyMap<T>(origin: Map<T, number>, destiny: Map<T, number>): void{\r\n for(let key of origin.keys()){\r\n destiny.set(key, origin.get(key));\r\n }\r\n }\r\n}\r\n"],"names":["AgeKind","ComplexionKind","EyeColor","HairColor","HaircutStyle","OriginKind","SexKind","SpecieKind","Complexions","Athletic","Fat","Skinny","Strongman","Thin","Eyes","Black","Blue","Brown","Green","HairColors","Blond","Red","White","HairCuts","Bald","CurvyLong","Shaved","Short","StraightLong","Origins","African","American","Arabic","Asian","European","Oceanic","Sexes","Androgynous","Female","Male","Species","Dwarf","Elf","Goblin","Human","Orc","Troll","Ages","Kid","Midage","Old","Teenager","Young","getAgeKind","age","Aspect","sex","origin","eye","hair","haircut","complexion","specie","height","_sex","_origin","_eye","_hair","_haircut","_complexion","_specie","_height","_age","this","generateHuman","generateAgeKindHuman","ageKind","getRandomAgeByAgeKind","generateRandomAgeKind","selectedSpecie","randomFromList","getRandomHeightBySpecie","generateOriginHuman","generateOriginAndSexHuman","generateRandomSpecie","generateRandomSpecieAndSex","generateOriginAgeAndSexHuman","generateOriginAndAgeHuman","generateRandomSpecieAgeAndSex","generateRandomSpecieAndAge","copy","random","baseHeight","increase","Likes","_sexMap","_originMap","_eyeColorMap","_hairColorMap","_hairCutMap","_complexionMap","_specieMap","_ageMap","Map","initializeMaps","likesSpecie","likes","minimizeAspectMap","set","likesSex","likesSpecieAndSex","likesConcreteHuman","preferredOrigin","preferredEye","preferredHair","preferredHaircut","preferredComplexion","preferredAge","likesConcreteSpecie","likesAspect","aspect","Eval","sum","get","initializeAspectMap","map","values","keys","copyMap","destiny","key"],"mappings":"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"}