UNPKG

rpg-table-randomizer

Version:

Module for random tables for use in roleplaying games

78 lines (76 loc) 2.19 kB
import { randomString } from './randomizer.js'; import { defaultToJSON } from './r_helpers.js'; /** * Class for name data. */ export default class RandomNameType { /** * * @param {String} key Key to identify uniquely in tokens and methods. * @param {String} label Human readable label. * @param {String[]} male Names. * @param {String[]} female Names. * @param {String[]} surname Names. */ constructor ({ key = '', label = '', male = [], female = [], surname = [] }) { this.key = key; this.label = label || key; this.male = Array.isArray(male) ? male : []; this.female = Array.isArray(female) ? female : []; this.surname = Array.isArray(surname) ? surname : []; } /** * Returns all personal names. * @returns {String[]} */ getAllPersonalNames () { return Array.prototype.concat(this.male, this.female); } /** * Return a personal name list. * @param {String} gender Mixed, random, male, female * @returns {String[]} */ getPersonalNameList (gender = 'random') { // Mixed gets all the personal names. if (gender === 'mixed' || gender === '') { return this.getAllPersonalNames(); } // If specific gender is requested // return regardless of if it's empty if (gender === 'male') { return this.male; } if (gender === 'female') { return this.female; } // Else return a random list const randomList = []; if (this.male.length > 0) { randomList.push('male'); } if (this.female.length > 0) { randomList.push('female'); } if (randomList.length === 0) { return []; } gender = randomString(randomList); return this[gender]; } /** * Custom JSON handler because Map doesn't JSON stringify automatically. * @returns {Object} */ toJSON () { const obj = defaultToJSON.call(this); obj.className = 'RandomNameType'; return obj; } }