diff -r 9a7cc0f29430 -r 10011f051f9c project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/EngineProtocol/Team.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/EngineProtocol/Team.java Sun Oct 09 20:41:17 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,345 +0,0 @@ -/* - * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game - * Copyright (c) 2011 Richard Deurwaarder <xeli@xelification.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - */ - -package org.hedgewars.mobile.EngineProtocol; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlPullParserFactory; -import org.xmlpull.v1.XmlSerializer; - -import android.os.Parcel; -import android.os.Parcelable; -import android.util.Xml; - -public class Team implements Parcelable{ - - public static final String DIRECTORY_TEAMS = "teams"; - private static final Integer[] TEAM_COLORS = { - 0xd12b42, /* red */ - 0x4980c1, /* blue */ - 0x6ab530, /* green */ - 0xbc64c4, /* purple */ - 0xe76d14, /* orange */ - 0x3fb6e6, /* cyan */ - 0xe3e90c, /* yellow */ - 0x61d4ac, /* mint */ - 0xf1c3e1, /* pink */ - /* add new colors here */ - }; - -// private static final Integer[] TEAM_COLORS = { -// 0xff0000, /* red */ -// 0x00ff00, /* blue */ -// 0x0000ff, /* green */ -// }; - - private static final int STATE_START = 0; - private static final int STATE_ROOT = 1; - private static final int STATE_HOG_ROOT = 2; - - public String name, grave, flag, voice, fort, hash; - - public static int maxNumberOfHogs = 0; - public static int maxNumberOfTeams = 0; - - static{ - maxNumberOfHogs = PascalExports.HWgetMaxNumberOfHogs(); - maxNumberOfTeams = PascalExports.HWgetMaxNumberOfTeams(); - } - public String[] hats = new String[maxNumberOfHogs]; - public String[] hogNames = new String[maxNumberOfHogs]; - public int[] levels = new int[maxNumberOfHogs]; - - public int hogCount = 4; - public int color = TEAM_COLORS[0]; - - public Team(){ - } - - public Team(Parcel in){ - readFromParcel(in); - } - - public boolean equals(Object o){ - if(super.equals(o)) return true; - else if(o instanceof Team){ - Team t = (Team)o; - boolean ret = name.equals(t.name); - ret &= grave.equals(t.grave); - ret &= flag.equals(t.flag); - ret &= voice.equals(t.voice); - ret &= fort.equals(t.fort); - ret &= hash.equals(t.hash); - return ret; - }else{ - return false; - } - } - - public void setRandomColor(int[] illegalcolors){ - Integer[] colorsToPickFrom = TEAM_COLORS; - if(illegalcolors != null){ - ArrayList<Integer> colors = new ArrayList<Integer>(); - for(int color : TEAM_COLORS){ - boolean validColor = true; - for(int illegal : illegalcolors){ - if(color == illegal) validColor = false; - } - if(validColor) colors.add(color); - } - if(colors.size() != 0) colorsToPickFrom = colors.toArray(new Integer[1]); - } - int index = (int)Math.round(Math.random()*(colorsToPickFrom.length-1)); - color = colorsToPickFrom[index]; - } - - - public void sendToEngine(EngineProtocolNetwork epn, int hogCount, int health) throws IOException{ - epn.sendToEngine(String.format("eaddteam %s %d %s", hash, color, name)); - epn.sendToEngine(String.format("egrave %s", grave)); - epn.sendToEngine(String.format("efort %s", fort)); - epn.sendToEngine(String.format("evoicepack %s", voice)); - epn.sendToEngine(String.format("eflag %s", flag)); - - for(int i = 0; i < hogCount; i++){ - epn.sendToEngine(String.format("eaddhh %d %d %s", levels[i], health, hogNames[i])); - epn.sendToEngine(String.format("ehat %s", hats[i])); - } - } - - /* - * XML METHODS - */ - - /** - * Read the xml file path and convert it to a Team object - * @param path absolute path to the xml file - * @return - */ - public static Team getTeamFromXml(String path){ - try { - XmlPullParserFactory xmlPullFactory = XmlPullParserFactory.newInstance(); - XmlPullParser xmlPuller = xmlPullFactory.newPullParser(); - - BufferedReader br = new BufferedReader(new FileReader(path), 1024); - xmlPuller.setInput(br); - Team team = new Team(); - int hogCounter = 0; - - int eventType = xmlPuller.getEventType(); - int state = STATE_START; - while(eventType != XmlPullParser.END_DOCUMENT){ - switch(state){ - case STATE_START: - if(eventType == XmlPullParser.START_TAG && xmlPuller.getName().equals("team")) state = STATE_ROOT; - else if(eventType != XmlPullParser.START_DOCUMENT) throwException(path, eventType); - break; - case STATE_ROOT: - if(eventType == XmlPullParser.START_TAG){ - if(xmlPuller.getName().toLowerCase().equals("name")){ - team.name = getXmlText(xmlPuller, "name"); - }else if(xmlPuller.getName().toLowerCase().equals("flag")){ - team.flag= getXmlText(xmlPuller, "flag"); - }else if(xmlPuller.getName().toLowerCase().equals("voice")){ - team.voice = getXmlText(xmlPuller, "voice"); - }else if(xmlPuller.getName().toLowerCase().equals("grave")){ - team.grave = getXmlText(xmlPuller, "grave"); - }else if(xmlPuller.getName().toLowerCase().equals("fort")){ - team.fort = getXmlText(xmlPuller, "fort"); - }else if(xmlPuller.getName().toLowerCase().equals("hash")){ - team.hash = getXmlText(xmlPuller, "hash"); - }else if(xmlPuller.getName().toLowerCase().equals("hog")){ - state = STATE_HOG_ROOT; - }else throwException(xmlPuller.getName(), eventType); - }else if(eventType == XmlPullParser.END_TAG) state = STATE_START; - else throwException(xmlPuller.getText(), eventType); - break; - case STATE_HOG_ROOT: - if(eventType == XmlPullParser.START_TAG){ - if(xmlPuller.getName().toLowerCase().equals("name")){ - team.hogNames[hogCounter] = getXmlText(xmlPuller, "name"); - }else if(xmlPuller.getName().toLowerCase().equals("hat")){ - team.hats[hogCounter] = getXmlText(xmlPuller, "hat"); - }else if(xmlPuller.getName().toLowerCase().equals("level")){ - team.levels[hogCounter] = Integer.parseInt(getXmlText(xmlPuller, "level")); - }else throwException(xmlPuller.getText(), eventType); - }else if(eventType == XmlPullParser.END_TAG){ - hogCounter++; - state = STATE_ROOT; - }else throwException(xmlPuller.getText(), eventType); - break; - } - eventType = getEventType(xmlPuller); - }//end while(eventtype != END_DOCUMENT - return team; - } catch (NumberFormatException e){ - e.printStackTrace(); - } catch (XmlPullParserException e) { - e.printStackTrace(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - private static String getXmlText(XmlPullParser xmlPuller, String parentTag)throws XmlPullParserException, IOException{ - if(getEventType(xmlPuller) == XmlPullParser.TEXT){ - String txt = xmlPuller.getText(); - if(getEventType(xmlPuller) == XmlPullParser.END_TAG && xmlPuller.getName().toLowerCase().equals(parentTag)){ - return txt; - } - } - throw new XmlPullParserException("malformed xml file on string read from tag: " + parentTag); - } - - /** - * Skips whitespaces.. - */ - private static int getEventType(XmlPullParser xmlPuller)throws XmlPullParserException, IOException{ - int eventType = xmlPuller.next(); - while(eventType == XmlPullParser.TEXT && xmlPuller.isWhitespace()){ - eventType = xmlPuller.next(); - } - return eventType; - } - - private static void throwException(String file, int eventType){ - throw new IllegalArgumentException(String.format("Xml file: %s malformed with error: %d.", file, eventType)); - } - - public void writeToXml(OutputStream os){ - XmlSerializer serializer = Xml.newSerializer(); - try{ - serializer.setOutput(os, "UTF-8"); - serializer.startDocument("UTF-8", true); - serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); - - serializer.startTag(null, "team"); - serializer.startTag(null, "name"); - serializer.text(name); - serializer.endTag(null, "name"); - serializer.startTag(null, "flag"); - serializer.text(flag); - serializer.endTag(null, "flag"); - serializer.startTag(null, "fort"); - serializer.text(fort); - serializer.endTag(null, "fort"); - serializer.startTag(null, "grave"); - serializer.text(grave); - serializer.endTag(null, "grave"); - serializer.startTag(null, "voice"); - serializer.text(voice); - serializer.endTag(null, "voice"); - serializer.startTag(null, "hash"); - serializer.text(hash); - serializer.endTag(null, "hash"); - - for(int i = 0; i < maxNumberOfHogs; i++){ - serializer.startTag(null, "hog"); - serializer.startTag(null, "name"); - serializer.text(hogNames[i]); - serializer.endTag(null, "name"); - serializer.startTag(null, "hat"); - serializer.text(hats[i]); - serializer.endTag(null, "hat"); - serializer.startTag(null, "level"); - serializer.text(String.valueOf(levels[i])); - serializer.endTag(null, "level"); - - serializer.endTag(null, "hog"); - } - serializer.endTag(null, "team"); - serializer.endDocument(); - serializer.flush(); - - } catch (IOException e) { - e.printStackTrace(); - }finally{ - try { - os.close(); - } catch (IOException e) {} - } - } - /* - * END XML METHODS - */ - - - - /* - * PARCABLE METHODS - */ - - public int describeContents() { - return 0; - } - - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(name); - dest.writeString(grave); - dest.writeString(flag); - dest.writeString(voice); - dest.writeString(fort); - dest.writeString(hash); - dest.writeStringArray(hats); - dest.writeStringArray(hogNames); - dest.writeIntArray(levels); - dest.writeInt(color); - dest.writeInt(hogCount); - } - - - public void readFromParcel(Parcel src){ - name = src.readString(); - grave = src.readString(); - flag = src.readString(); - voice = src.readString(); - fort = src.readString(); - hash = src.readString(); - src.readStringArray(hats); - src.readStringArray(hogNames); - src.readIntArray(levels); - color = src.readInt(); - hogCount = src.readInt(); - } - - public static final Parcelable.Creator<Team> CREATOR = new Parcelable.Creator<Team>() { - public Team createFromParcel(Parcel source) { - return new Team(source); - } - public Team[] newArray(int size) { - return new Team[size]; - } - - }; - - /* - * END PARCABLE METHODS - */ - -}