View Javadoc

1   package cz.cuni.amis.pogamut.ut2004.utils;
2   
3   import java.util.ArrayList;
4   
5   /**
6    * This is enum for edge flag between navpoints. <br>
7    * Each navpoint has a list of neighbour navpoints (getOutgoingEdges()), each 
8    * edge (NavPointNeighbourLink instance) has also property flag (getFlag())
9    * <br>
10   * Here is the list of respective bits according to http://wiki.beyondunreal.com/wiki/ReachSpec
11   * <p><p>
12   * Use getFlags() to obtain the list of enums from a particular integer.
13   */
14  public enum LinkFlag {
15  
16  	WALK(1), // walking required
17  	FLY(2),  // flying required
18  	SWIM(4), // swimming required
19  	JUMP(8), // jumping required
20  	DOOR(16), 
21  	SPECIAL(32), 
22  	LADDER(64), 
23  	PROSCRIBED(128), 
24  	FORCED(256), 
25  	PLAYERONLY(512);
26  
27  	private int flag = 0;
28  
29  	private LinkFlag(int flag) {
30  		this.flag = flag;
31  	}
32  
33  	/**
34  	 * Returns integer of the flag.
35  	 */
36  	public int get() {
37  		return flag;
38  	}
39  
40  	/**
41  	 * @param flag
42  	 * @return whether the flag is raised.
43  	 */
44  	public boolean isSet(int flag) {
45  		return (this.flag & flag) != 0;
46  	}
47  
48  	/**
49  	 * Returns list of flags, which are raised.
50  	 * 
51  	 * @param flags
52  	 * @return list of raised flags
53  	 */
54  	public static ArrayList<LinkFlag> getFlags(int flags) {
55  		ArrayList<LinkFlag> list = new ArrayList<LinkFlag>();
56  
57  		for (LinkFlag flag : LinkFlag.values()) {
58  			if ((flags & flag.get()) != 0) {
59  				list.add(flag);
60  			}
61  		}
62  		return list;
63  	}
64  
65  	public static String getFlagsString(int flags) {
66  		ArrayList<LinkFlag> allFlags = getFlags(flags);
67  		String str = "";
68  		if (allFlags.size() == 0)
69  			return "none";
70  		str = allFlags.get(0).name();
71  		allFlags.remove(0);
72  		for (LinkFlag flag : allFlags) {
73  			str = ", " + flag.name();
74  		}
75  		return str;
76  	}
77  }