mirror of
https://github.com/kwsch/NHSE.git
synced 2026-04-22 00:17:27 -05:00
58 lines
2.0 KiB
C#
58 lines
2.0 KiB
C#
using System.Linq;
|
|
|
|
namespace NHSE.Core
|
|
{
|
|
public interface IVillagerOrigin
|
|
{
|
|
string PlayerName { get; }
|
|
string TownName { get; }
|
|
byte[] GetTownIdentity();
|
|
byte[] GetPlayerIdentity();
|
|
}
|
|
|
|
public static class VillagerOriginExtensions
|
|
{
|
|
public static bool IsOriginatedFrom(this IVillagerOrigin visit, IVillagerOrigin host)
|
|
{
|
|
return visit.IsSameTown(host) && visit.IsSamePlayer(host);
|
|
}
|
|
|
|
public static bool IsSameTown(this IVillagerOrigin visit, IVillagerOrigin host)
|
|
{
|
|
var hostTown = host.GetTownIdentity();
|
|
var visitTown = visit.GetTownIdentity();
|
|
return hostTown.SequenceEqual(visitTown);
|
|
}
|
|
|
|
public static bool IsSamePlayer(this IVillagerOrigin visit, IVillagerOrigin host)
|
|
{
|
|
var hostPlayer = host.GetPlayerIdentity();
|
|
var visitPlayer = visit.GetPlayerIdentity();
|
|
return hostPlayer.SequenceEqual(visitPlayer);
|
|
}
|
|
|
|
public static void ChangeOrigins(this IVillagerOrigin visit, IVillagerOrigin host, byte[] visitData)
|
|
{
|
|
visit.ChangeToHostTown(host, visitData);
|
|
visit.ChangeToHostPlayer(host, visitData);
|
|
}
|
|
|
|
private static void ChangeToHostTown(this IVillagerOrigin visit, IVillagerOrigin host, byte[] visitData)
|
|
{
|
|
var hostTown = host.GetTownIdentity();
|
|
var visitTown = visit.GetTownIdentity();
|
|
if (hostTown.SequenceEqual(visitTown))
|
|
return;
|
|
visitData.ReplaceOccurrences(visitTown, hostTown);
|
|
}
|
|
|
|
private static void ChangeToHostPlayer(this IVillagerOrigin visit, IVillagerOrigin host, byte[] visitData)
|
|
{
|
|
var hostPlayer = host.GetPlayerIdentity();
|
|
var visitPlayer = visit.GetPlayerIdentity();
|
|
if (hostPlayer.SequenceEqual(visitPlayer))
|
|
return;
|
|
visitData.ReplaceOccurrences(visitPlayer, hostPlayer);
|
|
}
|
|
}
|
|
} |