@Override public final boolean isLearnable(ICharm charm) { if (isAlienCharm(charm)) { ICasteType casteType = context.getBasicCharacterContext().getCasteType(); if (!getCharmTemplateForCharacterType().isAllowedAlienCharms(casteType)) { return false; } if (charm.hasAttribute(ICharmData.NATIVE)) { return false; } } if (charm.isBlockedByAlternative(context.getMagicCollection())) { return false; } if (isMartialArtsCharm(charm)) { boolean isSiderealFormCharm = isFormCharm(charm) && hasLevel(Sidereal, charm); MartialArtsCharmConfiguration martialArtsConfiguration = new DefaultMartialArtsCharmConfiguration( this, context.getMagicCollection(), context.getBasicCharacterContext()); if (isSiderealFormCharm && !martialArtsConfiguration.isAnyCelestialStyleCompleted()) { return false; } if (!getMartialArtsRulesForCharacterType() .isCharmAllowed(charm, martialArtsConfiguration, isExperienced())) { return false; } } ICharm[] learnedCharms = getLearnedCharms(true); for (IndirectCharmRequirement requirement : charm.getAttributeRequirements()) { if (!requirement.isFulfilled(learnedCharms)) { return false; } } if (!(new CharmTraitRequirementChecker(getPrerequisiteModifyingCharms(), context, this) .areTraitMinimumsSatisfied(charm))) { return false; } for (ICharm parentCharm : charm.getLearnPrerequisitesCharms(this)) { if (!isLearnable(parentCharm)) { return false; } } return true; }
@Override public void setPrerequisiteVisuals(IndirectCharmRequirement requirement) { view.setCharmVisuals(requirement.getStringRepresentation(), RGBColor.White); }