123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- setup.generateNPC = function(dict:NPCsDict,purpose:string,flags:NPCGenerateOptions):NPC{
- const npcId = dict.create(purpose);
- const npc = dict.npc(npcId);
- const generators = flags.generators ?? ['default'];
- for(const generatorId of generators){
- if(!setup.npcGenerators[generatorId]){
- console.warn('Generator missing in setup.generateNPC:',generatorId);
- continue;
- }
- const generator = setup.npcGenerators[generatorId];
- flags = generator(flags);
- }
- for(const [fieldKey,fieldValue] of Object.entries(flags.fields ?? {}))
- npc[fieldKey] = fieldValue;
- return npc;
- }
- setup.npcGenerators = {};
- setup.npcGenerators.default = function(flags:NPCGenerateOptions){
- if(flags.fields.gender == EGender.FEMALE)
- flags = setup.npcGenerators.female(flags);
- else
- flags = setup.npcGenerators.male(flags);
- flags.fields.lastname ??= setup.randomName('sur');
- flags.fields.rel ??= 50;
- flags.fields.fam ??= 0;
- flags.fields.desc = '';
- return flags;
- }
- setup.npcGenerators.female = function(flags:NPCGenerateOptions){
- flags.fields.firstname ??= setup.randomName('female');
- return flags;
- };
- setup.npcGenerators.male = function(flags:NPCGenerateOptions){
- flags.fields.firstname ??= setup.randomName('male');
- flags.fields.image = setup.getRandomNpcImage({gender:EGender.MALE}).path;
- return flags;
- };
- const enum EAgeBracket{
- UNKNOWN=-1,
- /**
- * 0-0.5
- */
- Newborn,
- /**
- * 0.5-1
- */
- Infant,
- /**
- * 2-4
- */
- Toddler,
- /**
- * 5-12
- */
- Kid,
- /**
- * 13-17
- */
- Teen,
- /**
- * 18-29
- */
- YoungAdult,
- /**
- * 30-44
- */
- Adult,
- /**
- * 45-64
- */
- MiddleAged,
- /**
- * 65-79
- */
- Old,
- /**
- * 80+
- */
- Ancient,
- }
- setup.getRandomNpcImage = function(filters:{[key:string]:any}):NPCImageDefinition{
-
- const filterFunction = function(npcImage:NPCImageDefinition){
- for(const [filterKey,filterValue] of Object.entries(filters)){
- if(npcImage[filterKey] !== filterValue)
- return false;
- }
- return true;
- }
-
- const allImagesAsArray = Object.entries(setup.npcImages).map(entry=>Object.assign({id:entry[0]},entry[1]));
- const allImagesFiltered = allImagesAsArray.filter(filterFunction);
- if(allImagesFiltered.length)
- return allImagesFiltered.random();
- console.error('Failed to retrieve random image in getRandomNpcImage with filters:',filters);
- return {path:'characters/random/null.webp', gender: EGender.UNKNOWN,age:EAgeBracket.UNKNOWN};
- }
- setup.npcImages = {};
- setup.npcImages.i10 = {
- path:'characters/random/10.jpg',
- gender: EGender.FEMALE,
- age: EAgeBracket.Teen
- }
|