one模拟器中carmovement的代码分析

package movement;
import java.util.List;
import movement.map.DijkstraPathFinder;
import movement.map.MapNode;
import core.Coord;
import core.Settings;

/**
 * CarMovement类表示car移动子模型 ,  carmovement继承了MapBasedMovement这个父类,在接口SwitchableMovement, TransportMovement 中对方法进行声明,在类MapBasedMovement(MapBasedMovement )中对该方法进行实现。  
 	 */

public class CarMovement extends MapBasedMovement implements
SwitchableMovement, TransportMovement {

private Coord from;//初始起点
private Coord to;//初始终点

private DijkstraPathFinder pathFinder;//寻找路径的方式

/**
 * 汽车运动的构造函数
 	 */
public CarMovement(Settings settings) {
	super(settings);          //由配置文件创建对象。
	pathFinder = new DijkstraPathFinder(getOkMapNodeTypes());
}

/**
 * 从原型构造一个新的CarMovement实例
 * @param proto
 */
public CarMovement(CarMovement proto) {
	super(proto);
	this.pathFinder = proto.pathFinder;
}

/**
 * Sets the next route to be taken
 * 设置下一个使用的路径,将nodeLocation赋值给from,nodeDestination赋值给to
 * @param nodeLocation
 * @param nodeDestination
 */
public void setNextRoute(Coord nodeLocation, Coord nodeDestination) {
	from = nodeLocation.clone();
	to = nodeDestination.clone();
}
/**
 * 从from和to变量中获取其在地图上的节点对象MapNode,由pathFinder工具寻找出一条from到to的最短路径,将路径上的节点存入List<MapNode> nodePath,用这个表创建出一条路径。
 	 */
@Override
public Path getPath() {
	Path path = new Path(generateSpeed());
	MapNode fromNode = getMap().getNodeByCoord(from);
	MapNode toNode = getMap().getNodeByCoord(to);
	List<MapNode> nodePath = pathFinder.getShortestPath(fromNode, toNode);
	for (MapNode node : nodePath) { // create a Path from the shortest path
	path.addWaypoint(node.getLocation());
	}
	lastMapNode = toNode;
	return path;
}
	/**
 * @see SwitchableMovement
 * @return true
 */
public boolean isReady() {
	return true;
}

}

猜你喜欢

转载自blog.csdn.net/qq_43477676/article/details/87928715