/* * Copyright (c) Thomas Parker, 2012. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package pcgen.cdom.facet.input; import pcgen.cdom.base.TransitionChoice; import pcgen.cdom.enumeration.CharID; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.facet.DefaultClassSkillListFacet; import pcgen.cdom.facet.FacetLibrary; import pcgen.cdom.facet.PlayerCharacterTrackingFacet; import pcgen.cdom.facet.SubClassFacet; import pcgen.cdom.facet.base.AbstractScopeFacet; import pcgen.cdom.facet.event.ScopeFacetChangeEvent; import pcgen.cdom.facet.event.ScopeFacetChangeListener; import pcgen.cdom.facet.model.ClassFacet; import pcgen.cdom.facet.model.SkillListFacet; import pcgen.cdom.facet.model.ClassFacet.ClassLevelChangeEvent; import pcgen.cdom.facet.model.ClassFacet.ClassLevelChangeListener; import pcgen.cdom.facet.model.ClassFacet.ClassLevelObjectChangeEvent; import pcgen.cdom.list.ClassSkillList; import pcgen.core.PCClass; import pcgen.core.PlayerCharacter; import pcgen.core.SubClass; /** * ClassSkillListFacet stores the ClassSkillListFacet choices for a * PCClass of a Player Character * * @author Thomas Parker (thpr [at] yahoo.com) */ public class ClassSkillListFacet extends AbstractScopeFacet<CharID, PCClass, ClassSkillList> implements ClassLevelChangeListener, ScopeFacetChangeListener<CharID, PCClass, String> { private final PlayerCharacterTrackingFacet trackingFacet = FacetLibrary .getFacet(PlayerCharacterTrackingFacet.class); private ClassFacet classFacet; private DefaultClassSkillListFacet defaultClassSkillListFacet; private SubClassFacet subClassFacet; private SkillListFacet skillListFacet; @Override public void levelChanged(ClassLevelChangeEvent lce) { if ((lce.getOldLevel() == 0) && (lce.getNewLevel() > 0)) { PCClass cl = lce.getPCClass(); CharID id = lce.getCharID(); TransitionChoice<ClassSkillList> csc = cl.get(ObjectKey.SKILLLIST_CHOICE); if (csc == null) { ClassSkillList l = cl.get(ObjectKey.CLASS_SKILLLIST); if (l != null) { defaultClassSkillListFacet.add(id, cl, l, cl); } } else { PlayerCharacter pc = trackingFacet.getPC(id); for (ClassSkillList st : csc.driveChoice(pc)) { add(id, cl, st, cl); } } } else if ((lce.getOldLevel() > 0) && (lce.getNewLevel() == 0)) { removeAllFromSource(lce.getCharID(), lce.getPCClass()); } } @Override public void levelObjectChanged(ClassLevelObjectChangeEvent lce) { //ignore } @Override public void dataAdded(ScopeFacetChangeEvent<CharID, PCClass, String> dfce) { PCClass cl = dfce.getScope(); String subClassKey = dfce.getCDOMObject(); SubClass subclass = cl.getSubClassKeyed(subClassKey); if (subclass != null) { ClassSkillList scl = subclass.get(ObjectKey.CLASS_SKILLLIST); defaultClassSkillListFacet.add(dfce.getCharID(), cl, scl, subclass); } } @Override public void dataRemoved(ScopeFacetChangeEvent<CharID, PCClass, String> dfce) { PCClass cl = dfce.getScope(); String subClassKey = dfce.getCDOMObject(); SubClass subclass = cl.getSubClassKeyed(subClassKey); if (subclass != null) { ClassSkillList scl = subclass.get(ObjectKey.CLASS_SKILLLIST); defaultClassSkillListFacet.add(dfce.getCharID(), cl, scl, subclass); } } public void setClassFacet(ClassFacet classFacet) { this.classFacet = classFacet; } public void setSubClassFacet(SubClassFacet subClassFacet) { this.subClassFacet = subClassFacet; } public void setDefaultClassSkillListFacet( DefaultClassSkillListFacet defaultClassSkillListFacet) { this.defaultClassSkillListFacet = defaultClassSkillListFacet; } public void setSkillListFacet(SkillListFacet skillListFacet) { this.skillListFacet = skillListFacet; } public void init() { classFacet.addLevelChangeListener(this); subClassFacet.addScopeFacetChangeListener(this); addScopeFacetChangeListener(skillListFacet); } }