1 /** 2 * BaseUnrealEnvironment, an implementation of the environment interface standard that 3 * facilitates the connection between GOAL and the UT2004 engine. 4 * 5 * Copyright (C) 2012 BaseUnrealEnvironment authors. 6 * 7 * This program is free software: you can redistribute it and/or modify it under 8 * the terms of the GNU General Public License as published by the Free Software 9 * Foundation, either version 3 of the License, or (at your option) any later 10 * version. 11 * 12 * This program is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 15 * details. 16 * 17 * You should have received a copy of the GNU General Public License along with 18 * this program. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 package nl.tudelft.goal.unreal.messages; 21 22 import java.util.logging.Level; 23 24 /** 25 * List of valid parameter keys that can be used to initialize the environment. 26 * 27 * 28 * @author M.P. Korstanje 29 * 30 */ 31 public enum Key { 32 33 /** 34 * List of names for bots. 35 * 36 * The number of names provided matches the number of bots launched by the 37 * environment. 38 */ 39 BOTNAMES("botNames"), 40 /** 41 * Address of the control server. 42 * 43 * Should be of the form protocol//host:port 44 */ 45 CONTROLSERVER("controlServer"), 46 /** 47 * Weather or not the bot aims ahead of the target. 48 * 49 * Either "true" of "false". 50 */ 51 LEADTARGET("leadTarget"), 52 /** 53 * Log level used. Controls how many messages are displayed on the console. 54 * 55 * Valid log levels are any from {@link Level}. 56 */ 57 LOGLEVEL("logLevel"), 58 /** 59 * Address of the unreal server. 60 * 61 * Should be of the form protocol//host:port 62 */ 63 BOTSERVER("botServer"), 64 /** 65 * Name used by the server. Any string. 66 */ 67 CONTROLSERVERNAME("controlServerName"), 68 /** 69 * Skill of the bot between 0 (poor) and 7 (good). 70 * 71 * Controls how well the bot aims. 72 */ 73 SKILL("skill"), 74 /** 75 * Skin used by the bot. 76 * 77 * Any one of {@link Skin} will do. 78 */ 79 SKIN("skin"), 80 /** 81 * Team of the bot. 82 * 83 * Either 0 (red) or 1 (blue). 84 * 85 */ 86 TEAM("team"), 87 /** 88 * Address for the visualizer service. 89 * 90 */ 91 VISUALIZERSERVER("visualizer"), 92 93 /** 94 * Start location for the bot. 95 */ 96 STARTLOCATION("startLocation"), 97 98 /** 99 * Start rotation for the bot. 100 */ 101 STARTROTATION("startRotation"); 102 103 // Human readable (camelCase) form of the enum. 104 private String key; 105 106 private Key(String name) { 107 this.key = name; 108 } 109 110 /** 111 * 112 * @return a human readable name. 113 */ 114 @Override 115 public String toString() { 116 return key; 117 } 118 119 /** 120 * 121 * @return a list of valid values as a string. 122 */ 123 private static String listValid() { 124 String ret = ""; 125 126 Key[] keys = Key.values(); 127 for (int i = 0; i < keys.length; i++) { 128 ret += keys[i].toString(); 129 130 if (i < keys.length - 1) 131 ret += ", "; 132 } 133 return ret; 134 } 135 136 /** 137 * Returns the enum with the value of the string. matches. 138 * 139 * @param value 140 * @return an ParameterKey. 141 * @throws IllegalArgumentException 142 * if the provided value was not a valid parameter key. 143 */ 144 public static Key parseKey(String value) throws IllegalArgumentException { 145 assert value != null; 146 147 for (Key key : Key.values()) { 148 if (key.key.equalsIgnoreCase(value)) { 149 return key; 150 } 151 } 152 153 String message = "%s is not a valid parameter key. Valid keys are: %s."; 154 message = String.format(message, value, listValid()); 155 throw new IllegalArgumentException(message); 156 } 157 158 public Object getKey() { 159 return key; 160 } 161 }