Files
Fishing2/Assets/Infinity Code/Real World Terrain/Scripts/OSM/RealWorldTerrainOSMBase.cs
2025-06-09 00:11:54 +08:00

90 lines
2.9 KiB
C#

/* INFINITY CODE 2013-2019 */
/* http://www.infinity-code.com */
using System.Collections.Generic;
using System.Linq;
namespace InfinityCode.RealWorldTerrain.OSM
{
/// <summary>
/// The base class for the Open Street Map objects.
/// </summary>
public class RealWorldTerrainOSMBase
{
/// <summary>
/// ID.
/// </summary>
public string id;
/// <summary>
/// List of tags.
/// </summary>
public List<RealWorldTerrainOSMTag> tags;
public bool Equals(RealWorldTerrainOSMBase other)
{
if (ReferenceEquals(other, null)) return false;
if (ReferenceEquals(this, other)) return true;
return id == other.id;
}
public override int GetHashCode()
{
return id.GetHashCode();
}
/// <summary>
/// Gets tag value by key.
/// </summary>
/// <param name="key">Tag key.</param>
/// <returns>Tag value or string.Empty.</returns>
public string GetTagValue(string key)
{
List<RealWorldTerrainOSMTag> curTags = tags.Where(tag => tag.key == key).ToList();
if (curTags.Count > 0) return curTags[0].value;
return string.Empty;
}
/// <summary>
/// Checks tag with the specified pair (key, value).
/// </summary>
/// <param name="key">Tag key.</param>
/// <param name="value">Tag value.</param>
/// <returns>True - success, False - otherwise.</returns>
public bool HasTag(string key, string value)
{
return tags.Any(t => t.key == key && t.value == value);
}
/// <summary>
/// Checks whether there is a tag with at least one of the keys.
/// </summary>
/// <param name="keys">Keys</param>
/// <returns>True - success, False - otherwise.</returns>
public bool HasTagKey(params string[] keys)
{
return keys.Any(key => tags.Any(t => t.key == key));
}
/// <summary>
/// Checks whether there is a tag with at least one of the values.
/// </summary>
/// <param name="values">Values</param>
/// <returns>True - success, False - otherwise.</returns>
public bool HasTagValue(params string[] values)
{
return values.Any(val => tags.Any(t => t.value == val));
}
/// <summary>
/// Checks whether there is a tag with key and at least one of the values.
/// </summary>
/// <param name="key">Key</param>
/// <param name="values">Values</param>
/// <returns>True - success, False - otherwise.</returns>
public bool HasTags(string key, params string[] values)
{
return tags.Any(tag => tag.key == key && values.Any(v => v == tag.value));
}
}
}