63 lines
2.3 KiB
C#
63 lines
2.3 KiB
C#
using Nocturnis.Communicators;
|
|
using Nocturnis.GlobalManagement.Constants;
|
|
using Nocturnis.GlobalManagement.Controls;
|
|
using Nocturnis.GlobalManagement.Providers;
|
|
|
|
namespace Nocturnis.Enigmos.Modules;
|
|
|
|
public static class ECommunicateModule
|
|
{
|
|
public static bool Paired(this ICommunicateModule module) => module.PairedCommunicator != null;
|
|
|
|
/// <summary>
|
|
/// Determine if the module can be paired with given communicator
|
|
/// </summary>
|
|
public static bool IsMatch(this ICommunicateModule module, IBaseCommunicator communicator) =>
|
|
module.CommunicationDataType == communicator.CommunicationDataType &&
|
|
GlobalProvider.EnigmosProvider!.CommunicationDirectionCompatible(
|
|
module.CommunicationDirection,
|
|
communicator.CommunicationDirection
|
|
);
|
|
/// <summary>
|
|
/// Pair the module with given communicator
|
|
/// </summary>
|
|
public static void Pair(this ICommunicateModule module, IBaseCommunicator communicator)
|
|
{
|
|
if(module.Paired())
|
|
module.Unpair();
|
|
module.PairedCommunicator = communicator;
|
|
communicator.PairedModule = module;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Unpair the module with its paired communicator
|
|
/// </summary>
|
|
public static void Unpair(this ICommunicateModule module)
|
|
{
|
|
if (!module.Paired())
|
|
return;
|
|
module.PairedCommunicator!.PairedModule = null;
|
|
module.PairedCommunicator = null;
|
|
}
|
|
|
|
public static void SendData(this ICommunicateModule module)
|
|
{
|
|
if (!module.Paired() || module.CommunicationDirection == EnigmosConstant.CommunicationDirections.Receive)
|
|
return;
|
|
module.PairedCommunicator!.DataBuffer.Assign(module.DataBuffer, module.CommunicationDataType);
|
|
}
|
|
|
|
|
|
public static void ReceiveData(this ICommunicateModule module)
|
|
{
|
|
if (!module.Paired() || module.CommunicationDirection == EnigmosConstant.CommunicationDirections.Send)
|
|
return;
|
|
module.DataBuffer.Assign(module.PairedCommunicator!.DataBuffer, module.CommunicationDataType);
|
|
}
|
|
|
|
public static IBaseCommunicator[] CompatibleCommunicators(this ICommunicateModule module) =>
|
|
CreatureControl.Instance.CurrentCharacter!.DashboardTab.AllCommunicators
|
|
.Where(module.IsMatch)
|
|
.ToArray();
|
|
}
|