using System; using UnityEngine; /// /// JPS 算法专用节点 /// public sealed class JPSNode : IComparable { /// /// 节点的x轴坐标 /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:命名样式", Justification = "<挂起>")] public float x { get { return position.x; } set { position = new Vector2(value, y); } } /// /// 节点的y轴坐标 /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:命名样式", Justification = "<挂起>")] public float y { get { return position.y; } set { position = new Vector2(x, value); } } private Vector2 m_Position; /// /// 获得节点的二维坐标 /// /// 节点的二维坐标 [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:命名样式", Justification = "<挂起>")] public Vector2 position { get { return m_Position; } set { m_Position = value; } } /// /// 节点的权值 /// public float f; /// /// 起点达到目前遍历节点的距离 /// public float g; /// /// 目前遍历的节点到达终点的距离 /// public float h; /// /// 节点状态 /// public GlobalEnum.NodeStatu nodeStatu; /// /// 该节点的父节点 /// public JPSNode father; public JPSNode(float x, float y, GlobalEnum.NodeStatu nodeStatu) { m_Position = new Vector2(x, y); this.nodeStatu = nodeStatu; } public int CompareTo(JPSNode other) { return f.CompareTo(other.f); } public override bool Equals(object obj) { return obj is JPSNode other && position.Equals(other.position); } public override int GetHashCode() { return position.GetHashCode(); } public static bool operator ==(JPSNode left, JPSNode right) { return left?.position.Equals(right?.position) ?? right is null; } public static bool operator !=(JPSNode left, JPSNode right) { return !(left == right); } }