Split project
This commit is contained in:
64
Modules/Extensions/CommunicateModuleExtension.cs
Normal file
64
Modules/Extensions/CommunicateModuleExtension.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
|
||||
using Nocturnis.Communicators;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using TabulaSmaragdina;
|
||||
using TabulaSmaragdina.Constants;
|
||||
using TabulaSmaragdina.Controls;
|
||||
|
||||
namespace Enigmos.Modules.Extensions;
|
||||
|
||||
public static class CommunicateModuleExtension
|
||||
{
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user