00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.skills;
00023
00024 import com.realtime.crossfire.jxclient.util.EventListenerList2;
00025 import org.jetbrains.annotations.NotNull;
00026
00032 public class Skill {
00033
00037 @NotNull
00038 private final EventListenerList2<SkillListener> listeners = new EventListenerList2<SkillListener>(SkillListener.class);
00039
00043 @NotNull
00044 private final String name;
00045
00049 private long experience = 0;
00050
00054 private int level = 0;
00055
00060 public Skill(@NotNull final String name) {
00061 this.name = name;
00062 }
00063
00069 public void set(final int level, final long experience) {
00070 if (this.level == level && this.experience == experience) {
00071 return;
00072 }
00073
00074 final boolean oldKnown = isKnown();
00075 this.level = level;
00076 this.experience = experience;
00077 fireEvents(oldKnown);
00078 }
00079
00084 public long getExperience() {
00085 return experience;
00086 }
00087
00092 public int getLevel() {
00093 return level;
00094 }
00095
00100 private boolean isKnown() {
00101 return experience != 0 || level != 0;
00102 }
00103
00107 @NotNull
00108 @Override
00109 public String toString() {
00110 return name;
00111 }
00112
00117 private void fireEvents(final boolean oldKnown) {
00118 final boolean newKnown = isKnown();
00119
00120 if (!oldKnown) {
00121 assert newKnown;
00122 fireAddSkill();
00123 } else if (!newKnown) {
00124 fireDelSkill();
00125 } else {
00126 fireUpdSkill();
00127 }
00128 }
00129
00133 private void fireAddSkill() {
00134 for (final SkillListener listener : listeners.getListeners()) {
00135 listener.gainedSkill();
00136 }
00137 }
00138
00142 private void fireDelSkill() {
00143 for (final SkillListener listener : listeners.getListeners()) {
00144 listener.lostSkill();
00145 }
00146 }
00147
00151 private void fireUpdSkill() {
00152 for (final SkillListener listener : listeners.getListeners()) {
00153 listener.changedSkill();
00154 }
00155 }
00156
00161 public void addSkillListener(@NotNull final SkillListener listener) {
00162 listeners.add(listener);
00163 }
00164
00169 public void removeSkillListener(@NotNull final SkillListener listener) {
00170 listeners.remove(listener);
00171 }
00172
00173 }