diff -r 45b9f25ff611 -r 2fb781bbdd51 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/frontlib/Frontlib.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/frontlib/Frontlib.java Mon Aug 06 22:39:36 2012 +0200 @@ -0,0 +1,793 @@ +package org.hedgewars.hedgeroid.frontlib; +import java.nio.Buffer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.hedgewars.hedgeroid.Datastructures.Hog; +import org.hedgewars.hedgeroid.Datastructures.MetaScheme; +import org.hedgewars.hedgeroid.Datastructures.MetaScheme.Mod; +import org.hedgewars.hedgeroid.Datastructures.MetaScheme.Setting; +import org.hedgewars.hedgeroid.Datastructures.RoomlistRoom; +import org.hedgewars.hedgeroid.Datastructures.Scheme; +import org.hedgewars.hedgeroid.Datastructures.Team; +import org.hedgewars.hedgeroid.Datastructures.TeamInGame; +import org.hedgewars.hedgeroid.Datastructures.TeamIngameAttributes; +import org.hedgewars.hedgeroid.EngineProtocol.GameConfig; + +import com.sun.jna.Callback; +import com.sun.jna.Library; +import com.sun.jna.Memory; +import com.sun.jna.NativeLong; +import com.sun.jna.Pointer; +import com.sun.jna.PointerType; +import com.sun.jna.Structure; + +public interface Frontlib extends Library { + static final int NATIVE_INT_SIZE = 4; + static final int NATIVE_BOOL_SIZE = 1; + + static final int NETCONN_STATE_CONNECTING = 0; + static final int NETCONN_STATE_LOBBY = 1; + static final int NETCONN_STATE_ROOM = 2; + static final int NETCONN_STATE_INGAME = 3; + static final int NETCONN_STATE_DISCONNECTED = 10; + + static final int NETCONN_DISCONNECT_NORMAL = 0; + static final int NETCONN_DISCONNECT_SERVER_TOO_OLD = 1; + static final int NETCONN_DISCONNECT_AUTH_FAILED = 2; + static final int NETCONN_DISCONNECT_CONNLOST = 3; + static final int NETCONN_DISCONNECT_INTERNAL_ERROR = 100; + + static final int NETCONN_ROOMLEAVE_ABANDONED = 0; + static final int NETCONN_ROOMLEAVE_KICKED = 1; + + static final int NETCONN_MSG_TYPE_PLAYERINFO = 0; + static final int NETCONN_MSG_TYPE_SERVERMESSAGE = 1; + static final int NETCONN_MSG_TYPE_WARNING = 2; + static final int NETCONN_MSG_TYPE_ERROR = 3; + + static final int NETCONN_MAPCHANGE_FULL = 0; + static final int NETCONN_MAPCHANGE_MAP = 1; + static final int NETCONN_MAPCHANGE_MAPGEN = 2; + static final int NETCONN_MAPCHANGE_DRAWNMAP = 3; + static final int NETCONN_MAPCHANGE_MAZE_SIZE = 4; + static final int NETCONN_MAPCHANGE_TEMPLATE = 5; + static final int NETCONN_MAPCHANGE_THEME = 6; + static final int NETCONN_MAPCHANGE_SEED = 7; + + static final int GAME_END_FINISHED = 0; + static final int GAME_END_INTERRUPTED = 1; + static final int GAME_END_HALTED = 2; + static final int GAME_END_ERROR = 3; + + static final int HEDGEHOGS_PER_TEAM = 8; + + public static class NetconnPtr extends PointerType { } + public static class MapconnPtr extends PointerType { } + public static class GameconnPtr extends PointerType { } + public static class MetaschemePtr extends PointerType { } + + public static class RoomArrayPtr extends PointerType { + /** + * Returns the (native-owned) rooms in this list + */ + public RoomlistRoom[] getRooms(int count) { + Pointer ptr = getPointer(); + if(ptr == null) { + return new RoomlistRoom[0]; + } + Pointer[] untypedPtrs = ptr.getPointerArray(0, count); + RoomlistRoom[] result = new RoomlistRoom[count]; + for(int i=0; i hogs = new ArrayList(); + for(int i=0; i deref() { + return deref(getPointer()); + } + + public static List deref(Pointer p) { + SchemelistStruct sls = new SchemelistStruct(p); + sls.read(); + return sls.toSchemeList(); + } + + public static SchemelistPtr createJavaOwned(List schemes) { + SchemelistPtr result = new SchemelistPtr(); + result.javaOwnedInstance = new SchemelistStruct(); + result.javaOwnedInstance.fillFrom(schemes); + result.javaOwnedInstance.autoWrite(); + result.setPointer(result.javaOwnedInstance.getPointer()); + return result; + } + } + + public static class GameSetupPtr extends PointerType { + public static GameSetupPtr createJavaOwned(GameConfig conf) { + GameSetupStruct gss = GameSetupStruct.from(conf); + gss.write(); + GameSetupPtr result = new GameSetupPtr(); + result.setPointer(gss.getPointer()); + return result; + } + } + + static class HogStruct extends Structure { + public static class ByVal extends HogStruct implements Structure.ByValue {} + public static class ByRef extends HogStruct implements Structure.ByReference {} + private static String[] FIELD_ORDER = new String[] {"name", "hat", "rounds", "kills", "deaths", "suicides", "difficulty", "initialHealth", "weaponset"}; + + public HogStruct() { super(); setFieldOrder(FIELD_ORDER); } + public HogStruct(Pointer ptr) { super(ptr); setFieldOrder(FIELD_ORDER); } + + public static HogStruct from(Hog hog) { + HogStruct hs = new HogStruct(); + hs.difficulty = hog.level; + hs.hat = hog.hat; + hs.name = hog.name; + // TODO weaponset + // TODO initialHealth + return hs; + } + + public String name; + public String hat; + + public int rounds; + public int kills; + public int deaths; + public int suicides; + + public int difficulty; + + public int initialHealth; + public WeaponsetPtr weaponset; + } + + static class TeamStruct extends Structure { + public static class ByVal extends TeamStruct implements Structure.ByValue {} + public static class ByRef extends TeamStruct implements Structure.ByReference {} + private static String[] FIELD_ORDER = new String[] {"hogs", "name", "grave", "fort", "voicepack", "flag", "bindings", "bindingCount", "rounds", "wins", "campaignProgress", "colorIndex", "hogsInGame", "remoteDriven", "ownerName"}; + + public TeamStruct() { super(); setFieldOrder(FIELD_ORDER); } + public TeamStruct(Pointer ptr) { super(ptr); setFieldOrder(FIELD_ORDER); } + + public static TeamStruct from(Team team, TeamIngameAttributes attrs) { + TeamStruct ts = new TeamStruct(); + if(team != null) { + ts.name = team.name; + ts.grave = team.grave; + ts.flag = team.flag; + ts.voicepack = team.voice; + ts.fort = team.fort; + if(team.hogs.size() != HEDGEHOGS_PER_TEAM) { + throw new IllegalArgumentException(); + } + for(int i=0; i settingList = new ArrayList(settingCount); + List modList = new ArrayList(modCount); + + Structure[] settingStructs = settings.toArray(settingCount); + Structure[] modStructs = mods.toArray(modCount); + + for(int i=0; i settingsMap = new HashMap(); + for(int i=0; i modsMap = new HashMap(); + for(int i=0; i toSchemeList() { + if(schemeCount<=0) { + return new ArrayList(); + } else { + List schemeList = new ArrayList(schemeCount); + + Structure[] schemePtrStructs = schemes.toArray(schemeCount); + + for(int i=0; i schemeList) { + schemeCount = schemeList.size(); + schemes = new SchemePointerByReference(); + Structure[] schemePtrStructs = schemes.toArray(schemeCount); + + for(int i=0; i