//
// NameString.cs
//
// Copyright (c) František Boháček. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
namespace NosSmooth.PacketSerializer.Abstractions.Common;
///
/// Represents name in the game replacing "^" for " ".
///
public class NameString
{
///
/// Gets the character used to separate words.
///
public static char WordSeparator => '^';
///
/// Creates instance from the given name retrieved from a packet.
///
/// The name from the packet.
/// A name string instance.
public static NameString FromPacket(string packetName)
{
return new NameString(packetName, true);
}
///
/// Creates instance from the given name retrieved from a packet.
///
/// The name from the packet.
/// A name string instance.
public static NameString FromString(string packetName)
{
return new NameString(packetName, true);
}
private NameString(string name, bool packet)
{
if (packet)
{
PacketName = name;
Name = name.Replace(WordSeparator, ' ');
}
else
{
Name = name;
PacketName = name.Replace(' ', WordSeparator);
}
}
///
/// The real name.
///
public string Name { get; }
///
/// The original name in the packet.
///
public string PacketName { get; }
///
public override string ToString()
{
return Name;
}
///
/// Converts name string to regular string.
/// Returns the real name.
///
/// The name string to convert.
/// The real name.
public static implicit operator string(NameString nameString)
{
return nameString.Name;
}
///
/// Converts regular string to name string.
///
/// The string to convert.
/// The name string.
public static implicit operator NameString(string name)
{
return FromString(name);
}
///
public override bool Equals(object? obj)
{
if (!(obj is NameString nameString))
{
return false;
}
return Name.Equals(nameString.Name);
}
///
public override int GetHashCode()
{
return Name.GetHashCode();
}
}