View Javadoc

1   package nl.tudelft.goal.ut3.selector;
2   
3   import java.util.Collection;
4   import java.util.List;
5   import java.util.Map;
6   
7   import cz.cuni.amis.pogamut.base.utils.math.DistanceUtils;
8   import cz.cuni.amis.pogamut.base3d.worldview.object.ILocated;
9   import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
11  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Player;
12  import cz.cuni.amis.pogamut.ut3.communication.messages.UT3ItemType;
13  import cz.cuni.amis.utils.IFilter;
14  import cz.cuni.amis.utils.collections.MyCollections;
15  
16  /**
17   * Selects the closest friendly {@link Player}.
18   * 
19   * @author mpkorstanje
20   * 
21   */
22  public final class NearestFriendlyWithLinkGun extends ContextSelector {
23  
24  	/* (non-Javadoc)
25  	 * @see java.lang.Object#toString()
26  	 */
27  	@Override
28  	public String toString() {
29  		return "NearestFriendlyWithLinkGun";
30  	}
31  
32  	@Override
33  	public ILocated select(Collection<? extends ILocated> targets) {
34  		
35  		//Optimization, faster then selecting from collection.
36  		Map<UnrealId, Player> friends = modules.getPlayers().getVisibleFriends();
37  		List<Player> friendsWithLinkGun = MyCollections.getFiltered(friends.values(), new IFilter<Player>() {
38  
39  			@Override
40  			public boolean isAccepted(Player p) {
41  				return UT3ItemType.LINK_GUN.equals(UT3ItemType.getItemType(p.getWeapon()));
42  			}
43  		});
44  		
45  		return DistanceUtils.getNearest(friendsWithLinkGun, modules.getInfo().getLocation());
46  	}
47  
48  }