models/gang.js

import Model from "./model.js";
import { Builder } from "../string_utils.js";
import { COMBAT_TRAITS } from "../constants.js";

function gangName(b, gang) {
  b.if(
    !!gang.name,
    `The ${gang.name} (${gang.kind}): `,
    `${gang.members.length} member ${gang.kind}: `
  );
  return b;
}
/**
 * Remove uninteresting traists from the description.
 * @param builder
 * @param character
 */
function combatantString(character) {
  var traits = {};
  Object.values(COMBAT_TRAITS).forEach(function (traitName) {
    if (character.trait(traitName) > 0) {
      traits[traitName] = character.trait(traitName);
    }
  });
  // This is destructive, which is not great
  character.traits = traits;
  character.description = [];
  return character.toString();
}

export default class Gang extends Model {
  constructor({ kind, name, members = [], tags = [] } = {}) {
    super({ tags });
    this.members = members;
    this.kind = kind;
    this.name = name;
  }
  add(character) {
    this.members.push(character);
  }
  toString() {
    var b = new Builder();
    gangName(b, this);
    b.append("\n\n");
    b.append(this.members.map((m) => combatantString(m)).join("\n\n"));
    return b.toString();
  }
}