Crossfire JXClient, Trunk
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) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.quests;
24 
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.Comparator;
32 import java.util.List;
33 import java.util.concurrent.CopyOnWriteArrayList;
34 import org.jetbrains.annotations.NotNull;
35 import org.jetbrains.annotations.Nullable;
36 
41 public class QuestsManager {
42 
46  @NotNull
47  private final List<Quest> quests = new CopyOnWriteArrayList<>();
48 
53  @NotNull
55 
60  @NotNull
61  private final Comparator<Quest> questComparator = new QuestComparator();
62 
67  @NotNull
68  @SuppressWarnings("FieldCanBeLocal")
70 
71  @Override
72  public void start() {
73  // ignore
74  }
75 
76  @Override
77  public void metaserver() {
78  // ignore
79  }
80 
81  @Override
82  public void preConnecting(@NotNull final String serverInfo) {
83  // ignore
84  }
85 
86  @Override
87  public void connecting(@NotNull final String serverInfo) {
88  quests.clear();
89  }
90 
91  @Override
92  public void connecting(@NotNull final ClientSocketState clientSocketState, @NotNull final String param) {
93  // ignore
94  }
95 
96  @Override
97  public void connected() {
98  // ignore
99  }
100 
101  @Override
102  public void connectFailed(@NotNull final String reason) {
103  // ignore
104  }
105 
106  };
107 
112  public QuestsManager(@NotNull final GuiStateManager guiStateManager) {
113  guiStateManager.addGuiStateListener(guiStateListener);
114  }
115 
120  public void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
121  listeners.add(listener);
122  }
123 
128  public void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener) {
129  listeners.remove(listener);
130  }
131 
143  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) {
144  final Quest key = new Quest(code, title, face, replay, parent, end, description);
145 
146  int index = Collections.binarySearch(quests, key, questComparator);
147  if (index < 0) {
148  index = -index-1;
149  quests.add(index, key);
150  } else {
151  final Quest quest = quests.get(index);
152  quest.setStep(end, description);
153  }
154 
155  for (final QuestsManagerListener listener : listeners) {
156  listener.questChanged(index);
157  }
158  }
159 
166  public void updateQuest(final int code, final boolean end, @NotNull final String step) {
167  for (int index = 0; index < quests.size(); index++) {
168  final Quest quest = quests.get(index);
169  if (quest.getCode() == code) {
170  quest.setStep(end, step);
171  for (final QuestsManagerListener listener : listeners) {
172  listener.questChanged(index);
173  }
174  return;
175  }
176  }
177  }
178 
183  public int getCount() {
184  return quests.size();
185  }
186 
192  @Nullable
193  public Quest getQuest(final int index) {
194  return 0 <= index && index < quests.size() ? quests.get(index) : null;
195  }
196 
197  @Nullable
198  public Quest getQuestByCode(final int code) {
199  for (final Quest quest : quests) {
200  if (quest.getCode() == code) {
201  return quest;
202  }
203  }
204  return null;
205  }
206 
212  public boolean displaysFace(final int faceNum) {
213  for (Quest quest : quests) {
214  if (quest.getFace() == faceNum) {
215  return true;
216  }
217  }
218 
219  return false;
220  }
221 
225  public void selectCharacter() {
226  quests.clear();
227  }
228 
233  public List<Quest> getQuests() {
234  return new ArrayList<>(quests);
235  }
236 
237 }
com.realtime.crossfire.jxclient.quests.Quest.getCode
int getCode()
Definition: Quest.java:102
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.guistate.ClientSocketState
Definition: ClientSocketState.java:30
com.realtime.crossfire.jxclient.quests.QuestsManager.getCount
int getCount()
Definition: QuestsManager.java:183
com.realtime.crossfire.jxclient.quests.QuestsManager.QuestsManager
QuestsManager(@NotNull final GuiStateManager guiStateManager)
Definition: QuestsManager.java:112
com.realtime.crossfire.jxclient.quests.QuestsManager.displaysFace
boolean displaysFace(final int faceNum)
Definition: QuestsManager.java:212
com.realtime.crossfire.jxclient.util.EventListenerList2
Definition: EventListenerList2.java:37
com.realtime.crossfire.jxclient.quests.QuestsManager.quests
final List< Quest > quests
Definition: QuestsManager.java:47
com.realtime.crossfire.jxclient.quests.QuestsManager.listeners
final EventListenerList2< QuestsManagerListener > listeners
Definition: QuestsManager.java:54
com.realtime.crossfire.jxclient.guistate.GuiStateManager
Definition: GuiStateManager.java:34
com.realtime.crossfire.jxclient.guistate
Definition: ClientSocketState.java:23
com.realtime.crossfire.jxclient.quests.QuestsManager.getQuests
List< Quest > getQuests()
Definition: QuestsManager.java:233
com.realtime.crossfire.jxclient.quests.Quest
Definition: Quest.java:32
com.realtime.crossfire.jxclient.guistate.GuiStateListener
Definition: GuiStateListener.java:32
com.realtime.crossfire.jxclient.quests.QuestsManager.questComparator
final Comparator< Quest > questComparator
Definition: QuestsManager.java:61
com.realtime.crossfire.jxclient.quests.QuestsManager.addQuest
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)
Definition: QuestsManager.java:143
com.realtime.crossfire.jxclient.quests.QuestsManager.getQuest
Quest getQuest(final int index)
Definition: QuestsManager.java:193
com.realtime.crossfire.jxclient.quests.QuestsManager.getQuestByCode
Quest getQuestByCode(final int code)
Definition: QuestsManager.java:198
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.quests.QuestsManager.guiStateListener
final GuiStateListener guiStateListener
Definition: QuestsManager.java:69
com.realtime.crossfire.jxclient.quests.QuestsManager.removeCrossfireQuestChangedListener
void removeCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Definition: QuestsManager.java:128
com.realtime.crossfire.jxclient.quests.QuestsManager
Definition: QuestsManager.java:41
com.realtime.crossfire
com.realtime.crossfire.jxclient.quests.QuestsManager.selectCharacter
void selectCharacter()
Definition: QuestsManager.java:225
com.realtime
com.realtime.crossfire.jxclient.quests.Quest.setStep
void setStep(final boolean end, @NotNull final String step)
Definition: Quest.java:136
com
com.realtime.crossfire.jxclient.quests.QuestsManager.addCrossfireQuestChangedListener
void addCrossfireQuestChangedListener(@NotNull final QuestsManagerListener listener)
Definition: QuestsManager.java:120
com.realtime.crossfire.jxclient.quests.QuestsManagerListener
Definition: QuestsManagerListener.java:31
com.realtime.crossfire.jxclient.quests.QuestsManager.updateQuest
void updateQuest(final int code, final boolean end, @NotNull final String step)
Definition: QuestsManager.java:166
com.realtime.crossfire.jxclient.quests.QuestComparator
Definition: QuestComparator.java:33