using UnityEngine;
namespace Gley.UrbanSystem.Internal
{
///
/// Store path finding waypoints.
///
[System.Serializable]
public class PathFindingWaypoint : IHeapItem
{
[SerializeField] private int[] _allowedAgents;
[SerializeField] private int[] _neighbours;
[SerializeField] private int[] _movementPenalty;
[SerializeField] private Vector3 _worldPosition;
[SerializeField] private int _listIndex;
internal int[] Neighbours => _neighbours;
internal int[] AllowedAgents => _allowedAgents;
internal int[] MovementPenalty => _movementPenalty;
internal Vector3 WorldPosition => _worldPosition;
internal int ListIndex => _listIndex;
internal int FCost
{
get
{
return GCost + HCost;
}
}
internal int Parent { get; set; }
internal int GCost { get; set; }
internal int HCost { get; set; }
public int HeapIndex { get; set; }
public PathFindingWaypoint(int listIndex, Vector3 worldPosition, int gCost, int hCost, int parent, int[] neighbours, int[] movementPenalty, int[] allowedAgents)
{
_listIndex = listIndex;
_worldPosition = worldPosition;
_neighbours = neighbours;
_movementPenalty = movementPenalty;
_allowedAgents = allowedAgents;
GCost = gCost;
HCost = hCost;
Parent = parent;
}
public int CompareTo(PathFindingWaypoint nodeToCompare)
{
int compare = FCost.CompareTo(nodeToCompare.FCost);
if (compare == 0)
{
compare = HCost.CompareTo(nodeToCompare.HCost);
}
return -compare;
}
}
}