/** Construct the list of available spells for the character. */ private void buildAvailableNodes() { availableSpellNodes.clearContents(); // Scan character classes for spell classes List<PCClass> classList = getCharactersSpellcastingClasses(); // Look at each spell on each spellcasting class for (PCClass pcClass : classList) { DoubleKeyMapToList<SpellFacade, String, SpellNode> existingSpells = buildExistingSpellMap(availableSpellNodes, pcClass); for (Spell spell : pc.getAllSpellsInLists(charDisplay.getSpellLists(pcClass))) { // Create SpellNodeImpl for each spell CharacterSpell charSpell = new CharacterSpell(pcClass, spell); SpellFacadeImplem spellImplem = new SpellFacadeImplem(pc, spell, charSpell, null); HashMapToList<CDOMList<Spell>, Integer> levelInfo = pc.getSpellLevelInfo(spell); for (CDOMList<Spell> spellList : charDisplay.getSpellLists(pcClass)) { List<Integer> levels = levelInfo.getListFor(spellList); if (levels != null) { for (Integer level : levels) { SpellNodeImpl node = new SpellNodeImpl(spellImplem, pcClass, String.valueOf(level), null); if (!existingSpells.containsInList(spellImplem, node.getSpellLevel(), node)) { // Add to list availableSpellNodes.addElement(node); } } } } } } }
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); } } } }
/* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } SpellNodeImpl other = (SpellNodeImpl) obj; if (!getOuterType().equals(other.getOuterType())) { return false; } if (level == null) { if (other.level != null) { return false; } } else if (!level.equals(other.level)) { return false; } if (spell == null) { if (other.spell != null) { return false; } } else if (!spell.equals(other.spell)) { return false; } if (cls == null) { if (other.cls != null) { return false; } } else if (!cls.equals(other.cls)) { return false; } if (rootNode == null) { if (other.rootNode != null) { return false; } } else if (!rootNode.equals(other.rootNode)) { return false; } return true; }