-
Notifications
You must be signed in to change notification settings - Fork 16
/
InGameDialogActions.cs
242 lines (206 loc) · 9.6 KB
/
InGameDialogActions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
using AutomaticTypeMapper;
using EndlessClient.Dialogs.Factories;
using EOLib.Domain.Character;
using EOLib.Domain.Interact;
using EOLib.Domain.Interact.Quest;
using EOLib.Domain.Interact.Shop;
using EOLib.Domain.Interact.Skill;
using EOLib.IO;
using Optional;
namespace EndlessClient.Dialogs.Actions
{
[AutoMappedType]
public class InGameDialogActions : IInGameDialogActions, INPCInteractionNotifier
{
private readonly IFriendIgnoreListDialogFactory _friendIgnoreListDialogFactory;
private readonly IPaperdollDialogFactory _paperdollDialogFactory;
private readonly ISessionExpDialogFactory _sessionExpDialogFactory;
private readonly IQuestStatusDialogFactory _questStatusDialogFactory;
private readonly IActiveDialogRepository _activeDialogRepository;
private readonly IShopDataRepository _shopDataRepository;
private readonly IQuestDataRepository _questDataRepository;
private readonly ISkillDataRepository _skillDataRepository;
private readonly IChestDialogFactory _chestDialogFactory;
private readonly ILockerDialogFactory _lockerDialogFactory;
private readonly IBankAccountDialogFactory _bankAccountDialogFactory;
private readonly ISkillmasterDialogFactory _skillmasterDialogFactory;
private readonly IShopDialogFactory _shopDialogFactory;
private readonly IQuestDialogFactory _questDialogFactory;
public InGameDialogActions(IFriendIgnoreListDialogFactory friendIgnoreListDialogFactory,
IPaperdollDialogFactory paperdollDialogFactory,
ISessionExpDialogFactory sessionExpDialogFactory,
IQuestStatusDialogFactory questStatusDialogFactory,
IShopDialogFactory shopDialogFactory,
IQuestDialogFactory questDialogFactory,
IActiveDialogRepository activeDialogRepository,
IShopDataRepository shopDataRepository,
IQuestDataRepository questDataRepository,
ISkillDataRepository skillDataRepository,
IChestDialogFactory chestDialogFactory,
ILockerDialogFactory lockerDialogFactory,
IBankAccountDialogFactory bankAccountDialogFactory,
ISkillmasterDialogFactory skillmasterDialogFactory)
{
_friendIgnoreListDialogFactory = friendIgnoreListDialogFactory;
_paperdollDialogFactory = paperdollDialogFactory;
_sessionExpDialogFactory = sessionExpDialogFactory;
_questStatusDialogFactory = questStatusDialogFactory;
_activeDialogRepository = activeDialogRepository;
_shopDataRepository = shopDataRepository;
_questDataRepository = questDataRepository;
_skillDataRepository = skillDataRepository;
_chestDialogFactory = chestDialogFactory;
_lockerDialogFactory = lockerDialogFactory;
_bankAccountDialogFactory = bankAccountDialogFactory;
_skillmasterDialogFactory = skillmasterDialogFactory;
_shopDialogFactory = shopDialogFactory;
_questDialogFactory = questDialogFactory;
}
public void ShowFriendListDialog()
{
_activeDialogRepository.FriendIgnoreDialog.MatchNone(() =>
{
var dlg = _friendIgnoreListDialogFactory.Create(isFriendList: true);
dlg.DialogClosed += (_, _) => _activeDialogRepository.FriendIgnoreDialog = Option.None<ScrollingListDialog>();
_activeDialogRepository.FriendIgnoreDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowIgnoreListDialog()
{
_activeDialogRepository.FriendIgnoreDialog.MatchNone(() =>
{
var dlg = _friendIgnoreListDialogFactory.Create(isFriendList: false);
dlg.DialogClosed += (_, _) => _activeDialogRepository.FriendIgnoreDialog = Option.None<ScrollingListDialog>();
_activeDialogRepository.FriendIgnoreDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowSessionExpDialog()
{
_activeDialogRepository.SessionExpDialog.MatchNone(() =>
{
var dlg = _sessionExpDialogFactory.Create();
dlg.DialogClosed += (_, _) => _activeDialogRepository.SessionExpDialog = Option.None<SessionExpDialog>();
_activeDialogRepository.SessionExpDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowQuestStatusDialog()
{
_activeDialogRepository.QuestStatusDialog.MatchNone(() =>
{
var dlg = _questStatusDialogFactory.Create();
dlg.DialogClosed += (_, _) => _activeDialogRepository.QuestStatusDialog = Option.None<QuestStatusDialog>();
_activeDialogRepository.QuestStatusDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowPaperdollDialog(ICharacter character, bool isMainCharacter)
{
_activeDialogRepository.PaperdollDialog.MatchNone(() =>
{
var dlg = _paperdollDialogFactory.Create(character, isMainCharacter);
dlg.DialogClosed += (_, _) => _activeDialogRepository.PaperdollDialog = Option.None<PaperdollDialog>();
_activeDialogRepository.PaperdollDialog = Option.Some(dlg);
dlg.Show();
});
}
public void NotifyInteractionFromNPC(NPCType npcType)
{
// originally, these methods were called directly from NPCInteractionController
// however, this resulted in empty responses (e.g. no shop or quest) showing an empty dialog
// instead, wait for the response packet to notify this class and then show the dialog
// once data has been received from the server
switch (npcType)
{
case NPCType.Shop: ShowShopDialog(); break;
case NPCType.Quest: ShowQuestDialog(); break;
case NPCType.Skills: ShowSkillmasterDialog(); break;
}
}
public void ShowShopDialog()
{
_activeDialogRepository.ShopDialog.MatchNone(() =>
{
var dlg = _shopDialogFactory.Create();
dlg.DialogClosed += (_, _) =>
{
_activeDialogRepository.ShopDialog = Option.None<ShopDialog>();
_shopDataRepository.ResetState();
};
_activeDialogRepository.ShopDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowQuestDialog()
{
_activeDialogRepository.QuestDialog.MatchNone(() =>
{
var dlg = _questDialogFactory.Create();
dlg.DialogClosed += (_, _) =>
{
_activeDialogRepository.QuestDialog = Option.None<QuestDialog>();
_questDataRepository.ResetState();
};
_activeDialogRepository.QuestDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowChestDialog()
{
_activeDialogRepository.ChestDialog.MatchNone(() =>
{
var dlg = _chestDialogFactory.Create();
dlg.DialogClosed += (_, _) => _activeDialogRepository.ChestDialog = Option.None<ChestDialog>();
_activeDialogRepository.ChestDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowLockerDialog()
{
_activeDialogRepository.LockerDialog.MatchNone(() =>
{
var dlg = _lockerDialogFactory.Create();
dlg.DialogClosed += (_, _) => _activeDialogRepository.LockerDialog = Option.None<LockerDialog>();
_activeDialogRepository.LockerDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowBankAccountDialog()
{
_activeDialogRepository.BankAccountDialog.MatchNone(() =>
{
var dlg = _bankAccountDialogFactory.Create();
dlg.DialogClosed += (_, _) => _activeDialogRepository.BankAccountDialog = Option.None<BankAccountDialog>();
_activeDialogRepository.BankAccountDialog = Option.Some(dlg);
dlg.Show();
});
}
public void ShowSkillmasterDialog()
{
var dlg = _skillmasterDialogFactory.Create();
dlg.DialogClosed += (_, _) =>
{
_activeDialogRepository.SkillmasterDialog = Option.None<SkillmasterDialog>();
_skillDataRepository.ResetState();
};
_activeDialogRepository.SkillmasterDialog = Option.Some(dlg);
dlg.Show();
}
}
public interface IInGameDialogActions
{
void ShowFriendListDialog();
void ShowIgnoreListDialog();
void ShowSessionExpDialog();
void ShowQuestStatusDialog();
void ShowPaperdollDialog(ICharacter character, bool isMainCharacter);
void ShowShopDialog();
void ShowQuestDialog();
void ShowChestDialog();
void ShowLockerDialog();
void ShowBankAccountDialog();
void ShowSkillmasterDialog();
}
}