View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.agent.navigation.astar;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.List;
6   
7   import cz.cuni.amis.pathfinding.map.IPFKnownMap;
8   import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
9   import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPoint;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPointNeighbourLink;
11  import cz.cuni.amis.utils.maps.LazyMap;
12  
13  public class UT2004PFMap implements IPFKnownMap<NavPoint> {
14  
15  	private LazyMap<NavPoint, List<NavPoint>> neighbours = new LazyMap<NavPoint, List<NavPoint>>() {
16  
17  		@Override
18  		protected List<NavPoint> create(NavPoint key) {
19  			List<NavPoint> list = new ArrayList<NavPoint>(key.getOutgoingEdges().size());
20  			for (NavPointNeighbourLink link : key.getOutgoingEdges().values()) {
21  				list.add(link.getToNavPoint());
22  			}
23  			return list;
24  		}
25  		
26  	};
27  	
28  	private IWorldView worldView;
29  	
30  	public UT2004PFMap(IWorldView worldView) {
31  		this.worldView = worldView;
32  	}
33  	
34  	@Override
35  	public int getNodeCost(NavPoint node) {
36  		return 0;
37  	}
38  
39  	@Override
40  	public Collection<NavPoint> getNeighbors(NavPoint node) {
41  		return neighbours.get(node);
42  	}
43  
44  	@Override
45  	public int getArcCost(NavPoint nodeFrom, NavPoint nodeTo) {
46  		NavPointNeighbourLink link = nodeFrom.getOutgoingEdges().get(nodeTo.getId());
47  		if (link == null) return Integer.MAX_VALUE;
48  		return (int)Math.round(nodeTo.getLocation().getDistance(nodeFrom.getLocation()));
49  	}
50  
51  	@Override
52  	public Collection<NavPoint> getNodes() {
53  		return worldView.getAll(NavPoint.class).values();
54  	}
55  
56  	public void mapChanged() {
57  		neighbours.clear();
58  	}
59  
60  }