public int GetDirectionRelativeValue(DirectionRelativeParent direction) { //斜对角√2 * 10 直线 1 * 10 switch (direction) { case DirectionRelativeParent.UP: case DirectionRelativeParent.DOWN: case DirectionRelativeParent.LEFT: case DirectionRelativeParent.RIGHT: return(10); case DirectionRelativeParent.LEFT_UP: case DirectionRelativeParent.LEFT_DOWN: case DirectionRelativeParent.RIGHT_UP: case DirectionRelativeParent.RIGHT_DOWN: return(14); case DirectionRelativeParent.START: case DirectionRelativeParent.END: return(0); default: return(0); } }
public Point GetOffsetValueByDirection(DirectionRelativeParent direction) { switch (direction) { case DirectionRelativeParent.UP: return(new Point(0, 1)); case DirectionRelativeParent.DOWN: return(new Point(0, -1)); case DirectionRelativeParent.LEFT: return(new Point(-1, 0)); case DirectionRelativeParent.RIGHT: return(new Point(1, 0)); case DirectionRelativeParent.LEFT_UP: return(new Point(-1, 1)); case DirectionRelativeParent.LEFT_DOWN: return(new Point(-1, -1)); case DirectionRelativeParent.RIGHT_UP: return(new Point(1, 1)); case DirectionRelativeParent.RIGHT_DOWN: return(new Point(1, -1)); case DirectionRelativeParent.START: case DirectionRelativeParent.END: case DirectionRelativeParent.UNKNOWN: default: return(new Point(0, 0)); } }
public float CalculateGValue(DirectionRelativeParent direction, float parentGValue) { if (direction == DirectionRelativeParent.END) { return(0); } return(GetDirectionRelativeValue(direction) + parentGValue); }
public void GenerateRoundNode(NodeInfo parentNode) { //直线 for (DirectionRelativeParent i = DirectionRelativeParent.UP; i <= DirectionRelativeParent.RIGHT; i++) { CreateNodeByDirection(i, parentNode); } //对角线 if (isCalcDiagonal) { for (DirectionRelativeParent i = DirectionRelativeParent.LEFT_UP; i <= DirectionRelativeParent.RIGHT_DOWN; i++) { CreateNodeByDirection(i, parentNode); } } //排序 openNodeList.SortOpenList(); }
public void CreateNodeByDirection(DirectionRelativeParent direction, NodeInfo parentNode) { Point offset = GetOffsetValueByDirection(direction); int girdX = parentNode.gridX + offset.x; int gridY = parentNode.gridY + offset.y; //如果是障碍物,则不创建 if (IsBlock(girdX, gridY)) { return; } //如果已经在closelist 则不创建 if (closeNodeList.IsAlreadyInCloseList(girdX, gridY)) { return; } //创建并加入Open列表 openNodeList.AddNode(CreateNode(girdX, gridY, parentNode)); }