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 }