00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 package com.realtime.crossfire.jxclient.quests;
00022
00023 import com.realtime.crossfire.jxclient.guistate.ClientSocketState;
00024 import com.realtime.crossfire.jxclient.guistate.GuiStateListener;
00025 import com.realtime.crossfire.jxclient.guistate.GuiStateManager;
00026 import com.realtime.crossfire.jxclient.util.EventListenerList2;
00027 import java.util.Collections;
00028 import java.util.Comparator;
00029 import java.util.List;
00030 import java.util.concurrent.CopyOnWriteArrayList;
00031 import org.jetbrains.annotations.NotNull;
00032 import org.jetbrains.annotations.Nullable;
00033
00038 public class QuestsManager {
00039
00043 @NotNull
00044 private final List<Quest> quests = new CopyOnWriteArrayList<Quest>();
00045
00050 @NotNull
00051 private final EventListenerList2<QuestsManagerListener> listeners = new EventListenerList2<QuestsManagerListener>(QuestsManagerListener.class);
00052
00056 @NotNull
00057 private final Comparator<Quest> questComparator = new QuestComparator();
00058
00063 @NotNull
00064 private final GuiStateListener guiStateListener = new GuiStateListener() {
00065
00066 @Override
00067 public void start() {
00068
00069 }
00070
00071 @Override
00072 public void metaserver() {
00073
00074 }
00075
00076 @Override
00077 public void preConnecting(@NotNull final String serverInfo) {
00078
00079 }
00080
00081 @Override
00082 public void connecting(@NotNull final String serverInfo) {
00083 quests.clear();
00084 }
00085
00086 @Override
00087 public void connecting(@NotNull final ClientSocketState clientSocketState) {
00088
00089 }
00090
00091 @Override
00092 public void connected() {
00093
00094 }
00095
00096 @Override
00097 public void connectFailed(@NotNull final String reason) {
00098
00099 }
00100
00101 };
00102
00107 public QuestsManager(@NotNull final GuiStateManager guiStateManager) {
00108 guiStateManager.addGuiStateListener(guiStateListener);
00109 }
00110
00115 public void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
00116 listeners.add(listener);
00117 }
00118
00123 public void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
00124 listeners.remove(listener);
00125 }
00126
00137 public void addQuest(final int code, @NotNull final String title, final int face, final boolean replay, final int parent, final boolean end, @NotNull final String description) {
00138 final Quest key = new Quest(code, title, face, replay, parent, end, description);
00139
00140 int index = Collections.binarySearch(quests, key, questComparator);
00141 if (index < 0) {
00142 index = -index-1;
00143 quests.add(index, key);
00144 } else {
00145 final Quest quest = quests.get(index);
00146 quest.setStep(end, description);
00147 }
00148
00149 for (final QuestsManagerListener listener : listeners.getListeners()) {
00150 listener.questAdded(index);
00151 }
00152 }
00153
00160 public void updateQuest(final int code, final boolean end, @NotNull final String step) {
00161 for (final Quest quest : quests) {
00162 if (quest.getCode() == code) {
00163 quest.setStep(end, step);
00164 break;
00165 }
00166 }
00167 }
00168
00173 public int getQuests() {
00174 return quests.size();
00175 }
00176
00182 @Nullable
00183 public Quest getQuest(final int index) {
00184 return 0 <= index && index < quests.size() ? quests.get(index) : null;
00185 }
00186
00192 public boolean displaysFace(final int faceNum) {
00193 for (final Quest quest : quests) {
00194 if (quest.getFace() == faceNum) {
00195 return true;
00196 }
00197 }
00198
00199 return false;
00200 }
00201
00205 public void selectCharacter() {
00206 quests.clear();
00207 }
00208
00209 }