project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/EngineProtocol/Team.java
branchhedgeroid
changeset 5506 2b0c4fcde4c6
parent 5463 83c53a80f7ff
child 5532 3d7ac2b3b703
equal deleted inserted replaced
5504:96d735b83d43 5506:2b0c4fcde4c6
     3 import java.io.BufferedReader;
     3 import java.io.BufferedReader;
     4 import java.io.FileNotFoundException;
     4 import java.io.FileNotFoundException;
     5 import java.io.FileReader;
     5 import java.io.FileReader;
     6 import java.io.IOException;
     6 import java.io.IOException;
     7 import java.io.OutputStream;
     7 import java.io.OutputStream;
       
     8 import java.util.ArrayList;
     8 
     9 
     9 import org.xmlpull.v1.XmlPullParser;
    10 import org.xmlpull.v1.XmlPullParser;
    10 import org.xmlpull.v1.XmlPullParserException;
    11 import org.xmlpull.v1.XmlPullParserException;
    11 import org.xmlpull.v1.XmlPullParserFactory;
    12 import org.xmlpull.v1.XmlPullParserFactory;
    12 import org.xmlpull.v1.XmlSerializer;
    13 import org.xmlpull.v1.XmlSerializer;
    16 import android.util.Xml;
    17 import android.util.Xml;
    17 
    18 
    18 public class Team implements Parcelable{
    19 public class Team implements Parcelable{
    19 
    20 
    20 	public static final String DIRECTORY_TEAMS = "teams";
    21 	public static final String DIRECTORY_TEAMS = "teams";
       
    22 //	private static final Integer[] TEAM_COLORS = {
       
    23 //		0xffd12b42, /* red    */ 
       
    24 //		0xff4980c1, /* blue   */ 
       
    25 //		0xff6ab530, /* green  */ 
       
    26 //		0xffbc64c4, /* purple */ 
       
    27 //		0xffe76d14, /* orange */ 
       
    28 //		0xff3fb6e6, /* cyan   */ 
       
    29 //		0xffe3e90c, /* yellow */ 
       
    30 //		0xff61d4ac, /* mint   */ 
       
    31 //		0xfff1c3e1, /* pink   */ 
       
    32 //		/* add new colors here */
       
    33 //	};
       
    34 
       
    35 	private static final Integer[] TEAM_COLORS = {
       
    36 		0xff0000, /* red    */ 
       
    37 		0x00ff00, /* blue   */ 
       
    38 		0x0000ff, /* green  */ 
       
    39 	};
       
    40 
       
    41 	private static final int STATE_START = 0;
       
    42 	private static final int STATE_ROOT = 1;
       
    43 	private static final int STATE_HOG_ROOT = 2;
    21 
    44 
    22 	public String name, grave, flag, voice, fort, hash;
    45 	public String name, grave, flag, voice, fort, hash;
    23 
    46 
    24 	public static int maxNumberOfHogs = 0;
    47 	public static int maxNumberOfHogs = 0;
    25 	public static int maxNumberOfTeams = 0;
    48 	public static int maxNumberOfTeams = 0;
    29 		maxNumberOfTeams = PascalExports.HWgetMaxNumberOfTeams();
    52 		maxNumberOfTeams = PascalExports.HWgetMaxNumberOfTeams();
    30 	}
    53 	}
    31 	public String[] hats = new String[maxNumberOfHogs];
    54 	public String[] hats = new String[maxNumberOfHogs];
    32 	public String[] hogNames = new String[maxNumberOfHogs];
    55 	public String[] hogNames = new String[maxNumberOfHogs];
    33 	public int[] levels = new int[maxNumberOfHogs];
    56 	public int[] levels = new int[maxNumberOfHogs];
    34 	
    57 
       
    58 	public int hogCount = 4;
       
    59 	public int color = TEAM_COLORS[0];
       
    60 
    35 	public Team(){
    61 	public Team(){
    36 	}
    62 	}
    37 	
    63 
    38 	public Team(Parcel in){
    64 	public Team(Parcel in){
    39 		readFromParcel(in);
    65 		readFromParcel(in);
    40 	}
    66 	}
    41 
    67 
    42 	public boolean equals(Object o){
    68 	public boolean equals(Object o){
    52 			return ret;
    78 			return ret;
    53 		}else{
    79 		}else{
    54 			return false;
    80 			return false;
    55 		}
    81 		}
    56 	}
    82 	}
    57 	
    83 
    58 	
    84 	public void setRandomColor(int[] illegalcolors){
    59 	public void sendToEngine(OutputStream os, int hogCount, int health, int color) throws IOException{
    85 		Integer[] colorsToPickFrom = TEAM_COLORS;
    60 		os.write(String.format("eaddteam %s %d %s", hash, color, name).getBytes());
    86 		if(illegalcolors != null){
    61 		os.write(String.format("egrave %s", grave).getBytes());
    87 			ArrayList<Integer> colors = new ArrayList<Integer>();
    62 		os.write(String.format("efort %s", fort).getBytes());
    88 			for(int color : TEAM_COLORS){
    63 		os.write(String.format("evoicepack %s", voice).getBytes());
    89 				boolean validColor = true;
    64 		os.write(String.format("eflag %s", flag).getBytes());
    90 				for(int illegal : illegalcolors){
    65 		
    91 					if(color == illegal) validColor = false;
       
    92 				}
       
    93 				if(validColor) colors.add(color);
       
    94 			}
       
    95 			if(colors.size() != 0) colorsToPickFrom = colors.toArray(new Integer[1]);
       
    96 		}
       
    97 		int index = (int)Math.round(Math.random()*(colorsToPickFrom.length-1));
       
    98 		color = colorsToPickFrom[index];
       
    99 	}
       
   100 
       
   101 
       
   102 	public void sendToEngine(EngineProtocolNetwork epn, int hogCount, int health) throws IOException{
       
   103 		epn.sendToEngine(String.format("eaddteam %s %d %s", hash, color, name));
       
   104 		epn.sendToEngine(String.format("egrave %s", grave));
       
   105 		epn.sendToEngine(String.format("efort %s", fort));
       
   106 		epn.sendToEngine(String.format("evoicepack %s", voice));
       
   107 		epn.sendToEngine(String.format("eflag %s", flag));
       
   108 
    66 		for(int i = 0; i < hogCount; i++){
   109 		for(int i = 0; i < hogCount; i++){
    67 			os.write(String.format("eaddhh %d %d %s", levels[i], health, hogNames[i]).getBytes());
   110 			epn.sendToEngine(String.format("eaddhh %d %d %s", levels[i], health, hogNames[i]));
    68 			os.write(String.format("ehat %s", hats[i]).getBytes());
   111 			epn.sendToEngine(String.format("ehat %s", hats[i]));
    69 		}
   112 		}
    70 		os.flush();
   113 	}
    71 	}
   114 
    72 	
   115 	/*
    73 	public static final int STATE_START = 0;
   116 	 * XML METHODS
    74 	public static final int STATE_ROOT = 1;
   117 	 */
    75 	public static final int STATE_HOG_ROOT = 2;
       
    76 	public static final int STATE_HOG_HAT = 3;
       
    77 	public static final int STATE_HOG_NAME = 4;
       
    78 	public static final int STATE_HOG_LEVEL = 5;
       
    79 
   118 
    80 	/**
   119 	/**
    81 	 * Read the xml file path and convert it to a Team object
   120 	 * Read the xml file path and convert it to a Team object
    82 	 * @param path absolute path to the xml file
   121 	 * @param path absolute path to the xml file
    83 	 * @return
   122 	 * @return
   179 		XmlSerializer serializer = Xml.newSerializer();
   218 		XmlSerializer serializer = Xml.newSerializer();
   180 		try{
   219 		try{
   181 			serializer.setOutput(os, "UTF-8");	
   220 			serializer.setOutput(os, "UTF-8");	
   182 			serializer.startDocument("UTF-8", true);
   221 			serializer.startDocument("UTF-8", true);
   183 			serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
   222 			serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
   184 			
   223 
   185 			serializer.startTag(null, "team");
   224 			serializer.startTag(null, "team");
       
   225 			serializer.startTag(null, "name");
       
   226 			serializer.text(name);
       
   227 			serializer.endTag(null, "name");
       
   228 			serializer.startTag(null, "flag");
       
   229 			serializer.text(flag);
       
   230 			serializer.endTag(null, "flag");
       
   231 			serializer.startTag(null, "fort");
       
   232 			serializer.text(fort);
       
   233 			serializer.endTag(null, "fort");
       
   234 			serializer.startTag(null, "grave");
       
   235 			serializer.text(grave);
       
   236 			serializer.endTag(null, "grave");
       
   237 			serializer.startTag(null, "voice");
       
   238 			serializer.text(voice);
       
   239 			serializer.endTag(null, "voice");
       
   240 			serializer.startTag(null, "hash");
       
   241 			serializer.text(hash);
       
   242 			serializer.endTag(null, "hash");
       
   243 
       
   244 			for(int i = 0; i < maxNumberOfHogs; i++){
       
   245 				serializer.startTag(null, "hog");
   186 				serializer.startTag(null, "name");
   246 				serializer.startTag(null, "name");
   187 				serializer.text(name);
   247 				serializer.text(hogNames[i]);
   188 				serializer.endTag(null, "name");
   248 				serializer.endTag(null, "name");
   189 				serializer.startTag(null, "flag");
   249 				serializer.startTag(null, "hat");
   190 				serializer.text(flag);
   250 				serializer.text(hats[i]);
   191 				serializer.endTag(null, "flag");
   251 				serializer.endTag(null, "hat");
   192 				serializer.startTag(null, "fort");
   252 				serializer.startTag(null, "level");
   193 				serializer.text(fort);
   253 				serializer.text(String.valueOf(levels[i]));
   194 				serializer.endTag(null, "fort");
   254 				serializer.endTag(null, "level");
   195 				serializer.startTag(null, "grave");
   255 
   196 				serializer.text(grave);
   256 				serializer.endTag(null, "hog");
   197 				serializer.endTag(null, "grave");
   257 			}
   198 				serializer.startTag(null, "voice");
       
   199 				serializer.text(voice);
       
   200 				serializer.endTag(null, "voice");
       
   201 				serializer.startTag(null, "hash");
       
   202 				serializer.text(hash);
       
   203 				serializer.endTag(null, "hash");
       
   204 				
       
   205 				for(int i = 0; i < maxNumberOfHogs; i++){
       
   206 					serializer.startTag(null, "hog");
       
   207 					serializer.startTag(null, "name");
       
   208 					serializer.text(hogNames[i]);
       
   209 					serializer.endTag(null, "name");
       
   210 					serializer.startTag(null, "hat");
       
   211 					serializer.text(hats[i]);
       
   212 					serializer.endTag(null, "hat");
       
   213 					serializer.startTag(null, "level");
       
   214 					serializer.text(String.valueOf(levels[i]));
       
   215 					serializer.endTag(null, "level");
       
   216 					
       
   217 					serializer.endTag(null, "hog");
       
   218 				}
       
   219 			serializer.endTag(null, "team");
   258 			serializer.endTag(null, "team");
   220 			serializer.endDocument();
   259 			serializer.endDocument();
   221 			serializer.flush();
   260 			serializer.flush();
   222 			
   261 
   223 		} catch (IOException e) {
   262 		} catch (IOException e) {
   224 			e.printStackTrace();
   263 			e.printStackTrace();
   225 		}finally{
   264 		}finally{
   226 			try {
   265 			try {
   227 				os.close();
   266 				os.close();
   228 			} catch (IOException e) {}
   267 			} catch (IOException e) {}
   229 		}
   268 		}
   230 	}
   269 	}
       
   270 	/*
       
   271 	 * END XML METHODS
       
   272 	 */
       
   273 
       
   274 
       
   275 
       
   276 	/*
       
   277 	 * PARCABLE METHODS
       
   278 	 */
   231 
   279 
   232 	public int describeContents() {
   280 	public int describeContents() {
   233 		return 0;
   281 		return 0;
   234 	}
   282 	}
   235 
   283 
   241 		dest.writeString(fort);
   289 		dest.writeString(fort);
   242 		dest.writeString(hash);
   290 		dest.writeString(hash);
   243 		dest.writeStringArray(hats);
   291 		dest.writeStringArray(hats);
   244 		dest.writeStringArray(hogNames);
   292 		dest.writeStringArray(hogNames);
   245 		dest.writeIntArray(levels);
   293 		dest.writeIntArray(levels);
   246 	}
   294 		dest.writeInt(color);
   247 		
   295 		dest.writeInt(hogCount);
   248 	
   296 	}
       
   297 
       
   298 
   249 	public void readFromParcel(Parcel src){
   299 	public void readFromParcel(Parcel src){
   250 		name = src.readString();
   300 		name = src.readString();
   251 		grave = src.readString();
   301 		grave = src.readString();
   252 		flag = src.readString();
   302 		flag = src.readString();
   253 		voice = src.readString();
   303 		voice = src.readString();
   254 		fort = src.readString();
   304 		fort = src.readString();
   255 		hash = src.readString();
   305 		hash = src.readString();
   256 		src.readStringArray(hats);
   306 		src.readStringArray(hats);
   257 		src.readStringArray(hogNames);
   307 		src.readStringArray(hogNames);
   258 		src.readIntArray(levels);
   308 		src.readIntArray(levels);
       
   309 		color = src.readInt();
       
   310 		hogCount = src.readInt();
   259 	}
   311 	}
   260 
   312 
   261 	public static final Parcelable.Creator<Team> CREATOR = new Parcelable.Creator<Team>() {
   313 	public static final Parcelable.Creator<Team> CREATOR = new Parcelable.Creator<Team>() {
   262 		public Team createFromParcel(Parcel source) {
   314 		public Team createFromParcel(Parcel source) {
   263 			return new Team(source);
   315 			return new Team(source);
   264 		}
   316 		}
   265 		public Team[] newArray(int size) {
   317 		public Team[] newArray(int size) {
   266 			return new Team[size];
   318 			return new Team[size];
   267 		}
   319 		}
   268 		
   320 
   269 	};
   321 	};
   270 	
   322 
       
   323 	/*
       
   324 	 * END PARCABLE METHODS
       
   325 	 */
       
   326 
   271 }
   327 }