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.gui.gauge;
00023
00024 import com.realtime.crossfire.jxclient.items.CfItem;
00025 import com.realtime.crossfire.jxclient.items.ItemSet;
00026 import com.realtime.crossfire.jxclient.items.ItemSetListener;
00027 import com.realtime.crossfire.jxclient.stats.ExperienceTable;
00028 import com.realtime.crossfire.jxclient.stats.Stats;
00029 import com.realtime.crossfire.jxclient.stats.StatsListener;
00030 import com.realtime.crossfire.jxclient.util.Formatter;
00031 import org.jetbrains.annotations.NotNull;
00032 import org.jetbrains.annotations.Nullable;
00033
00038 public class StatGaugeUpdater extends GaugeUpdater {
00039
00044 private static final int LOWFOOD_LIMIT = 100;
00045
00049 private final int stat;
00050
00054 @NotNull
00055 private final Stats stats;
00056
00060 @NotNull
00061 private final ItemSet itemSet;
00062
00066 private boolean active = false;
00067
00071 @NotNull
00072 private final StatsListener statsListener = new StatsListener() {
00073
00074 @Override
00075 public void reset() {
00076
00077 }
00078
00079 @Override
00080 public void statChanged(final int statNo, final int value) {
00081 switch (stat) {
00082 case Stats.CS_STAT_HP:
00083 if (statNo == Stats.CS_STAT_HP) {
00084 setValues(value, 0, stats.getStat(Stats.CS_STAT_MAXHP));
00085 } else if (statNo == Stats.CS_STAT_MAXHP) {
00086 setValues(stats.getStat(Stats.CS_STAT_HP), 0, value);
00087 }
00088 break;
00089
00090 case Stats.CS_STAT_SP:
00091 if (statNo == Stats.CS_STAT_SP) {
00092 setValues(value, 0, stats.getStat(Stats.CS_STAT_MAXSP));
00093 } else if (statNo == Stats.CS_STAT_MAXSP) {
00094 setValues(stats.getStat(Stats.CS_STAT_SP), 0, value);
00095 }
00096 break;
00097
00098 case Stats.CS_STAT_FOOD:
00099 if (statNo == Stats.CS_STAT_FOOD) {
00100 setValues(value, 0, 999);
00101 }
00102 break;
00103
00104 case Stats.C_STAT_LOWFOOD:
00105 if (statNo == Stats.C_STAT_LOWFOOD) {
00106 setValues(active && stats.getStat(Stats.CS_STAT_FOOD) < LOWFOOD_LIMIT ? 1 : 0, 0, 1);
00107 }
00108 break;
00109
00110 case Stats.CS_STAT_GRACE:
00111 if (statNo == Stats.CS_STAT_GRACE) {
00112 setValues(value, 0, stats.getStat(Stats.CS_STAT_MAXGRACE));
00113 } else if (statNo == Stats.CS_STAT_MAXGRACE) {
00114 setValues(stats.getStat(Stats.CS_STAT_GRACE), 0, value);
00115 }
00116 break;
00117
00118 case Stats.C_STAT_POISONED:
00119 if (statNo == Stats.C_STAT_POISONED) {
00120 setValues(value, 0, 1);
00121 }
00122 break;
00123
00124 case Stats.CS_STAT_GOLEM_HP:
00125 if (statNo == Stats.CS_STAT_GOLEM_HP) {
00126 setValues(value, 0, stats.getStat(Stats.CS_STAT_GOLEM_MAXHP));
00127 } else if (statNo == Stats.CS_STAT_GOLEM_MAXHP) {
00128 setValues(stats.getStat(Stats.CS_STAT_GOLEM_HP), 0, value);
00129 }
00130 break;
00131
00132 default:
00133 if (Stats.CS_STAT_RESIST_START <= stat && stat <= Stats.CS_STAT_RESIST_END && statNo == stat) {
00134 setValues(value, 0, 100);
00135 }
00136 break;
00137 }
00138 }
00139
00140 @Override
00141 public void simpleWeaponSpeedChanged(final boolean simpleWeaponSpeed) {
00142
00143 }
00144
00145 @Override
00146 public void titleChanged(@NotNull final String title) {
00147
00148 }
00149
00150 @Override
00151 public void rangeChanged(@NotNull final String range) {
00152
00153 }
00154
00155 @Override
00156 public void activeSkillChanged(@NotNull final String activeSkill) {
00157
00158 }
00159
00160 @Override
00161 public void experienceChanged(final long exp) {
00162 if (stat == Stats.C_STAT_EXP_NEXT_LEVEL) {
00163 updateExperienceNextLevel();
00164 }
00165 }
00166
00167 @Override
00168 public void experienceNextLevelChanged(final long expNextLevel) {
00169 if (stat == Stats.C_STAT_EXP_NEXT_LEVEL) {
00170 updateExperienceNextLevel();
00171 }
00172 }
00173
00174 };
00175
00179 @NotNull
00180 private final ItemSetListener itemSetListener = new ItemSetListener() {
00181
00182 @Override
00183 public void itemAdded(@NotNull final CfItem item) {
00184
00185 }
00186
00187 @Override
00188 public void itemMoved(@NotNull final CfItem item) {
00189
00190 }
00191
00192 @Override
00193 public void itemChanged(@NotNull final CfItem item) {
00194
00195 }
00196
00197 @Override
00198 public void itemRemoved(@NotNull final CfItem item) {
00199
00200 }
00201
00202 @Override
00203 public void playerChanged(@Nullable final CfItem player) {
00204 active = player != null;
00205 }
00206
00207 @Override
00208 public void openContainerChanged(final int tag) {
00209
00210 }
00211
00212 };
00213
00221 public StatGaugeUpdater(@NotNull final ExperienceTable experienceTable, final int stat, @NotNull final Stats stats, @NotNull final ItemSet itemSet) {
00222 super(experienceTable, stat == Stats.CS_STAT_GOLEM_HP);
00223 this.stat = stat;
00224 this.stats = stats;
00225 this.itemSet = itemSet;
00226 this.stats.addCrossfireStatsListener(statsListener);
00227 this.itemSet.addItemSetListener(itemSetListener);
00228 }
00229
00233 @Override
00234 public void dispose() {
00235 itemSet.removeItemSetListener(itemSetListener);
00236 stats.removeCrossfireStatsListener(statsListener);
00237 }
00238
00242 private void updateExperienceNextLevel() {
00243 final int level = stats.getStat(Stats.CS_STAT_LEVEL);
00244 final long experience = stats.getExperience();
00245 final int percents = getPercentsToNextLevel(level, experience);
00246 setValues(percents, 0, 99, percents+"%", level+"<br>Experience:"+Formatter.formatLong(experience)+"<br>Next level:"+Formatter.formatLong(getExperienceToNextLevel(level, experience)));
00247 }
00248
00249 }