예제 #1
0
  private void buildKnownPreparedSpellsForCDOMObject(CDOMObject pObject) {
    Collection<? extends CharacterSpell> sp = charDisplay.getCharacterSpells(pObject);
    List<CharacterSpell> cSpells = new ArrayList<>(sp);

    // Add in the spells granted by objects
    pc.addBonusKnownSpellsToList(pObject, cSpells);
    PCClass pcClass = (PCClass) (pObject instanceof PCClass ? pObject : null);

    for (CharacterSpell charSpell : cSpells) {
      for (SpellInfo spellInfo : charSpell.getInfoList()) {
        // Create SpellNodeImpl for each spell
        String book = spellInfo.getBook();
        boolean isKnown = Globals.getDefaultSpellBook().equals(book);
        SpellFacadeImplem spellImplem =
            new SpellFacadeImplem(pc, charSpell.getSpell(), charSpell, spellInfo);
        SpellNodeImpl node;
        if (pcClass != null) {
          node =
              new SpellNodeImpl(
                  spellImplem,
                  pcClass,
                  String.valueOf(spellInfo.getActualLevel()),
                  getRootNode(book));
        } else {
          node =
              new SpellNodeImpl(
                  spellImplem, String.valueOf(spellInfo.getActualLevel()), getRootNode(book));
        }
        if (spellInfo.getTimes() > 1) {
          node.addCount(spellInfo.getTimes() - 1);
        }
        boolean isSpellBook =
            charDisplay.getSpellBookByName(book).getType() == SpellBook.TYPE_SPELL_BOOK;
        // Add to list
        if (isKnown) {
          allKnownSpellNodes.addElement(node);
          knownSpellNodes.addElement(node);
        } else if (isSpellBook) {
          bookSpellNodes.addElement(node);
        } else if (pObject instanceof Race) {
          allKnownSpellNodes.addElement(node);
        } else {
          preparedSpellNodes.addElement(node);
        }
      }
    }
  }
예제 #2
0
  /**
   * Add a spell to the named book for the character. The request will be validated and any errors
   * shown to the user by the UIDelegate.
   *
   * @param spell The spell to be added.
   * @param bookName The book to add the spell to.
   * @param metamagicFeats List of the metamagic feats that should be applied to this spell.
   * @return The new SpellNode, or null if the selection was invalid.
   */
  private SpellNode addSpellToCharacter(
      SpellNode spell, String bookName, List<Ability> metamagicFeats) {
    if (!(spell.getSpell() instanceof SpellFacadeImplem)) {
      return null;
    }
    if (spell.getSpellcastingClass() == null) {
      return null;
    }
    CharacterSpell charSpell = ((SpellFacadeImplem) spell.getSpell()).getCharSpell();
    if (charSpell == null) {
      return null;
    }
    int level = Integer.parseInt(spell.getSpellLevel());
    for (Ability ability : metamagicFeats) {
      level += ability.getSafe(IntegerKey.ADD_SPELL_LEVEL);
    }

    String errorMsg =
        pc.addSpell(
            charSpell,
            metamagicFeats,
            spell.getSpellcastingClass().getKeyName(),
            bookName,
            level,
            level);
    if (!StringUtils.isEmpty(errorMsg)) {
      delegate.showErrorMessage(Constants.APPLICATION_NAME, errorMsg);
      return null;
    }

    SpellInfo spellInfo = charSpell.getSpellInfoFor(bookName, level, metamagicFeats);
    boolean isKnown = Globals.getDefaultSpellBook().equals(bookName);
    SpellFacadeImplem spellImplem =
        new SpellFacadeImplem(pc, charSpell.getSpell(), charSpell, spellInfo);
    SpellNodeImpl node =
        new SpellNodeImpl(
            spellImplem,
            spell.getSpellcastingClass(),
            String.valueOf(spellInfo.getActualLevel()),
            getRootNode(bookName));
    return node;
  }