Skip to content

Commit

Permalink
Reimplement quest dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanmoffat committed Apr 6, 2022
1 parent dc51324 commit ca9599e
Show file tree
Hide file tree
Showing 10 changed files with 283 additions and 272 deletions.
2 changes: 1 addition & 1 deletion EOLib/Domain/Interact/Quest/QuestActions.cs
Expand Up @@ -39,6 +39,6 @@ public void RespondToQuestDialog(DialogReply reply, byte linkId = 0)

public interface IQuestActions
{
void RespondToQuestDialog(DialogReply reply, byte linkId);
void RespondToQuestDialog(DialogReply reply, byte linkId = 0);
}
}
1 change: 1 addition & 0 deletions EndlessClient/Content/ContentProvider.cs
Expand Up @@ -89,6 +89,7 @@ private void RefreshTextures()
private void RefreshFonts()
{
_fonts[Constants.FontSize08] = _content.Load<SpriteFont>(Constants.FontSize08);
_fonts[Constants.FontSize09] = _content.Load<SpriteFont>(Constants.FontSize09);
}
}
}
4 changes: 4 additions & 0 deletions EndlessClient/Controllers/NPCInteractionController.cs
Expand Up @@ -32,6 +32,10 @@ public void ShowNPCDialog(INPC npc)
_mapNpcActions.RequestShop(npc.Index);
_inGameDialogActions.ShowShopDialog();
break;
case EOLib.IO.NPCType.Quest:
_mapNpcActions.RequestQuest(npc.Index, data.VendorID);
_inGameDialogActions.ShowQuestDialog(npc);
break;
}
}
}
Expand Down
28 changes: 27 additions & 1 deletion EndlessClient/Dialogs/Actions/InGameDialogActions.cs
@@ -1,7 +1,9 @@
using AutomaticTypeMapper;
using EndlessClient.Dialogs.Factories;
using EOLib.Domain.Character;
using EOLib.Domain.Interact.Quest;
using EOLib.Domain.Interact.Shop;
using EOLib.Domain.NPC;
using Optional;

namespace EndlessClient.Dialogs.Actions
Expand All @@ -13,19 +15,25 @@ public class InGameDialogActions : IInGameDialogActions
private readonly IPaperdollDialogFactory _paperdollDialogFactory;
private readonly IActiveDialogRepository _activeDialogRepository;
private readonly IShopDataRepository _shopDataRepository;
private readonly IQuestDataRepository _questDataRepository;
private readonly IShopDialogFactory _shopDialogFactory;
private readonly IQuestDialogFactory _questDialogFactory;

public InGameDialogActions(IFriendIgnoreListDialogFactory friendIgnoreListDialogFactory,
IPaperdollDialogFactory paperdollDialogFactory,
IActiveDialogRepository activeDialogRepository,
IShopDataRepository shopDataRepository,
IShopDialogFactory shopDialogFactory)
IQuestDataRepository questDataRepository,
IShopDialogFactory shopDialogFactory,
IQuestDialogFactory questDialogFactory)
{
_friendIgnoreListDialogFactory = friendIgnoreListDialogFactory;
_paperdollDialogFactory = paperdollDialogFactory;
_activeDialogRepository = activeDialogRepository;
_shopDataRepository = shopDataRepository;
_questDataRepository = questDataRepository;
_shopDialogFactory = shopDialogFactory;
_questDialogFactory = questDialogFactory;
}

public void ShowFriendListDialog()
Expand Down Expand Up @@ -79,6 +87,22 @@ public void ShowShopDialog()
dlg.Show();
});
}

public void ShowQuestDialog(INPC npc)
{
_activeDialogRepository.QuestDialog.MatchNone(() =>
{
var dlg = _questDialogFactory.Create(npc);
dlg.DialogClosed += (_, _) =>
{
_activeDialogRepository.QuestDialog = Option.None<QuestDialog>();
_questDataRepository.ResetState();
};
_activeDialogRepository.QuestDialog = Option.Some(dlg);
dlg.Show();
});
}
}

public interface IInGameDialogActions
Expand All @@ -90,5 +114,7 @@ public interface IInGameDialogActions
void ShowPaperdollDialog(ICharacter character, bool isMainCharacter);

void ShowShopDialog();

void ShowQuestDialog(INPC npc);
}
}
8 changes: 8 additions & 0 deletions EndlessClient/Dialogs/ActiveDialogRepository.cs
Expand Up @@ -15,6 +15,8 @@ public interface IActiveDialogProvider : IDisposable

Option<ShopDialog> ShopDialog { get; }

Option<QuestDialog> QuestDialog { get; }

IReadOnlyList<Option<IXNADialog>> ActiveDialogs { get; }
}

Expand All @@ -26,6 +28,8 @@ public interface IActiveDialogRepository : IDisposable

Option<ShopDialog> ShopDialog { get; set; }

Option<QuestDialog> QuestDialog { get; set; }

IReadOnlyList<Option<IXNADialog>> ActiveDialogs { get; }
}

Expand All @@ -38,6 +42,8 @@ public class ActiveDialogRepository : IActiveDialogRepository, IActiveDialogProv

public Option<ShopDialog> ShopDialog { get; set; }

public Option<QuestDialog> QuestDialog { get; set; }

IReadOnlyList<Option<IXNADialog>> ActiveDialogs
{
get
Expand All @@ -47,6 +53,7 @@ IReadOnlyList<Option<IXNADialog>> ActiveDialogs
FriendIgnoreDialog.Map(d => (IXNADialog)d),
PaperdollDialog.Map(d => (IXNADialog)d),
ShopDialog.Map(d => (IXNADialog)d),
QuestDialog.Map(d => (IXNADialog)d),
}.ToList();
}
}
Expand All @@ -63,6 +70,7 @@ public void Dispose()
FriendIgnoreDialog = Option.None<ScrollingListDialog>();
PaperdollDialog = Option.None<PaperdollDialog>();
ShopDialog = Option.None<ShopDialog>();
QuestDialog = Option.None<QuestDialog>();
}
}
}
52 changes: 52 additions & 0 deletions EndlessClient/Dialogs/Factories/QuestDialogFactory.cs
@@ -0,0 +1,52 @@
using AutomaticTypeMapper;
using EndlessClient.Content;
using EndlessClient.Dialogs.Services;
using EOLib.Domain.Interact.Quest;
using EOLib.Domain.NPC;
using EOLib.Graphics;
using EOLib.IO.Repositories;

namespace EndlessClient.Dialogs.Factories
{
[AutoMappedType]
public class QuestDialogFactory : IQuestDialogFactory
{
private readonly INativeGraphicsManager _nativeGraphicsManager;
private readonly IQuestActions _questActions;
private readonly IEODialogButtonService _dialogButtonService;
private readonly IQuestDataProvider _questDataProvider;
private readonly IENFFileProvider _enfFileProvider;
private readonly IContentProvider _contentProvider;

public QuestDialogFactory(INativeGraphicsManager nativeGraphicsManager,
IQuestActions questActions,
IEODialogButtonService dialogButtonService,
IQuestDataProvider questDataProvider,
IENFFileProvider enfFileProvider,
IContentProvider contentProvider)
{
_nativeGraphicsManager = nativeGraphicsManager;
_questActions = questActions;
_dialogButtonService = dialogButtonService;
_questDataProvider = questDataProvider;
_enfFileProvider = enfFileProvider;
_contentProvider = contentProvider;
}

public QuestDialog Create(INPC npc)
{
return new QuestDialog(_nativeGraphicsManager,
_questActions,
_dialogButtonService,
_questDataProvider,
_enfFileProvider,
_contentProvider,
npc);
}
}

public interface IQuestDialogFactory
{
QuestDialog Create(INPC npc);
}
}

0 comments on commit ca9599e

Please sign in to comment.