我们要添加一个ConnectionAgent来监视与PDPRoadModel
的特定连接,以支持保留。但是,这些ConnectionAgent具有CommDevice
,需要一个位置才能有用,这意味着设备必须为PDPObject
。
如果我们将它们实现为Vehicle
,它们可能会与现有车辆发生碰撞,而我们仍要模拟碰撞,因此这是不可能的。如果我们将它们实现为Parcel
,它们将显示在网格上,该网格将覆盖实际的Parcel
,这是我们要避免的事情。
由于PDPType
对象受保护,因此我们无法实现新的PDPType
,这意味着我们目前无法正确实现ConnectionAgent。
最佳答案
您可以通过将PDPRoadModel
作为物理实体而不是作为具有一定位置的虚拟通信实体添加到模型中来解决ConnectionAgent
的限制。例如,可以类似于以下方式实现该代理:
public class ConnectionAgent implements CommUser {
final Point position;
public ConnectionAgent(Connection<LengthData> c) {
position = Point.centroid(asList(c.from(), c.to()));
}
@Override
public Optional<Point> getPosition() {
return Optional.of(position);
}
@Override
public void setCommDevice(CommDeviceBuilder builder) {}
}
如果您希望每个连接都有一个代理,则可以在图中的连接上循环,然后创建
ConnectionAgent
并将其添加到模拟器。