Crossfire JXClient, Trunk  R20561
QuestsManager.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2011 Nicolas Weeger.
19  */
20 
21 package com.realtime.crossfire.jxclient.quests;
22 
27 import java.util.Collections;
28 import java.util.Comparator;
29 import java.util.List;
30 import java.util.concurrent.CopyOnWriteArrayList;
31 import org.jetbrains.annotations.NotNull;
32 import org.jetbrains.annotations.Nullable;
33 
38 public class QuestsManager {
39 
43  @NotNull
44  private final List<Quest> quests = new CopyOnWriteArrayList<>();
45 
50  @NotNull
52 
57  @NotNull
58  private final Comparator<Quest> questComparator = new QuestComparator();
59 
64  @NotNull
65  @SuppressWarnings("FieldCanBeLocal")
67 
68  @Override
69  public void start() {
70  // ignore
71  }
72 
73  @Override
74  public void metaserver() {
75  // ignore
76  }
77 
78  @Override
79  public void preConnecting(@NotNull final String serverInfo) {
80  // ignore
81  }
82 
83  @Override
84  public void connecting(@NotNull final String serverInfo) {
85  quests.clear();
86  }
87 
88  @Override
89  public void connecting(@NotNull final ClientSocketState clientSocketState) {
90  // ignore
91  }
92 
93  @Override
94  public void connected() {
95  // ignore
96  }
97 
98  @Override
99  public void connectFailed(@NotNull final String reason) {
100  // ignore
101  }
102 
103  };
104 
109  public QuestsManager(@NotNull final GuiStateManager guiStateManager) {
110  guiStateManager.addGuiStateListener(guiStateListener);
111  }
112 
117  public void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
118  listeners.add(listener);
119  }
120 
125  public void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
126  listeners.remove(listener);
127  }
128 
140  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) {
141  final Quest key = new Quest(code, title, face, replay, parent, end, description);
142 
143  int index = Collections.binarySearch(quests, key, questComparator);
144  if (index < 0) {
145  index = -index-1;
146  quests.add(index, key);
147  } else {
148  final Quest quest = quests.get(index);
149  quest.setStep(end, description);
150  }
151 
152  for (final QuestsManagerListener listener : listeners) {
153  listener.questAdded(index);
154  }
155  }
156 
163  public void updateQuest(final int code, final boolean end, @NotNull final String step) {
164  for (final Quest quest : quests) {
165  if (quest.getCode() == code) {
166  quest.setStep(end, step);
167  break;
168  }
169  }
170  }
171 
176  public int getQuests() {
177  return quests.size();
178  }
179 
185  @Nullable
186  public Quest getQuest(final int index) {
187  return 0 <= index && index < quests.size() ? quests.get(index) : null;
188  }
189 
195  public boolean displaysFace(final int faceNum) {
196  for (final Quest quest : quests) {
197  if (quest.getFace() == faceNum) {
198  return true;
199  }
200  }
201 
202  return false;
203  }
204 
208  public void selectCharacter() {
209  quests.clear();
210  }
211 
212 }
Interface for listeners interested gui state changes.
final Comparator< Quest > questComparator
A Comparator to compare Quest instances by title and code.
Describes an in-game quest.
Definition: Quest.java:30
void updateQuest(final int code, final boolean end, @NotNull final String step)
Updates quest information.
A Comparator to compare Quest instances by title and code.
void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Removes a QuestsManagerListener to notify about changes.
int getQuests()
Returns the number of current quests.
boolean displaysFace(final int faceNum)
Returns whether any quest has the given face.
QuestsManager(@NotNull final GuiStateManager guiStateManager)
Creates a new instance.
final GuiStateListener guiStateListener
The GuiStateListener for detecting established or dropped connections.
void add(@NotNull final T listener)
Adds a listener.
final EventListenerList2< QuestsManagerListener > listeners
The QuestsManagerListeners to notify about changes.
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)
Adds a new quest.
Interface for listeners interested in QuestsManager events.
void setStep(final boolean end, @NotNull final String step)
Update the quest&#39;s state.
Definition: Quest.java:126
void selectCharacter()
A character name was sent to the server.
void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Adds a QuestsManagerListener to notify about changes.
void remove(@NotNull final T listener)
Removes a listener.
Connection progress states of the Crossfire server connection.
Quest getQuest(final int index)
Returns a Quest instance by index.