package com.zy.acs.manager.core.service.astart; import lombok.Data; import java.io.Serializable; import java.util.Optional; @Data public class RetreatNavigateNode implements Comparable, Cloneable, Serializable { private static final long serialVersionUID = 1L; protected int x; //坐标x protected int y; //坐标y protected int z; //坐标z(高度) protected int F; //综合花费的步数 protected int G; //已经花费的步数 protected int H; //将要花费的步数 protected RetreatNavigateNode parent; //父节点 protected Boolean turningPoint; //是否为拐点 protected String direction; //行走方向 protected Integer lastDistance; // 距离上个节点距离 protected Integer moveDistance; // 总行走距离 protected String codeData; protected int weight; public RetreatNavigateNode(int x, int y) { this.x = x; this.y = y; } public RetreatNavigateNode(int x, int y, String codeData) { this.x = x; this.y = y; this.codeData = codeData; } public void initNode(RetreatNavigateNode father, int weight) { this.parent = father; if (this.parent != null) { this.G = father.G + Optional.ofNullable(this.lastDistance).orElse(0); this.H = father.H + weight; } else { this.G = 0; this.H = weight; } this.F = this.G + this.H; } @Override public int compareTo(RetreatNavigateNode o) { // asc return Integer.compare(this.F, o.F); } @Override public RetreatNavigateNode clone() { try { return (RetreatNavigateNode) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } }