Changeset 7c832f6


Ignore:
Timestamp:
Aug 14, 2010, 4:31:40 PM (8 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
fbcf983
Parents:
b01abbe
Message:

sc2replay:
replay.details of version 3 replays is parsed correctly;
Improved parsing routine for move screen actions;
Improved support of unknown version 3 actions;
Fixed a bug that caused players to appear as both, a player and an observer;
Removed unnecessary action classes;
APMPlot supports computer opponents

Files:
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • gui.swing/src/main/java/de/erichseifert/warp/gui/swing/APMPlot.java

    rb01abbe r7c832f6  
    7676                        Player player = players[playerIndex];
    7777                        List<? extends GameAction> actions = player.getActions();
     78                        if (actions.isEmpty()) {
     79                                continue;
     80                        }
    7881                        actionFilter = ActionFilterFactory.getInstance().getFilter(actions.get(0));
    7982
     
    123126                plot = new XYPlot(dataByPlayer.values().toArray(seriesArray));
    124127                // Configure plot
    125                 plot.setSetting(XYPlot.TITLE, "Actions per minute (Smoothed)");
     128                plot.setSetting(XYPlot.TITLE, "Actions per minute (smoothed)");
    126129                plot.setInsets(new Insets2D.Double(20.0, 60.0, 80.0, 40.0));
    127130                // Configure legend
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayDetail.java

    rb01abbe r7c832f6  
    2222package de.erichseifert.warp.sc2replay;
    2323
     24import java.awt.Color;
    2425import java.io.IOException;
    2526import java.nio.ByteBuffer;
     
    5253                        DataStruct colorMap = playerInfo.getDataStruct(3);
    5354
    54                         /*Color color = new Color(
     55                        Color color = new Color(
    5556                                colorMap.getDataStruct(1).getInt(),
    5657                                colorMap.getDataStruct(2).getInt(),
     
    6061                        if (!name.isEmpty()) {
    6162                                SC2Player player = new SC2Player(name);
    62                                 player.setRealID(playerDetails.getDataStruct(3).getString());
     63                                // Real ID is stored as a string or an integer, depending on the replay version
     64                                String realID = null;
     65                                try {
     66                                        realID = playerDetails.getDataStruct(3).getString();
     67                                } catch (NullPointerException e) {
     68                                        realID = String.valueOf(playerDetails.getDataStruct(4).getInt());
     69                                }
     70                                player.setRealID(realID);
    6371                                player.setRace(raceLocalized);
    6472                                player.setColor(color);
    6573                                players.add(player);
    66                         }*/
     74                        }
    6775                }
    6876        }
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser_v2.java

    rb01abbe r7c832f6  
    126126                for (int playerIndex = playerList.size(); playerIndex < playerNames.size(); playerIndex++) {
    127127                        String name = playerNames.get(playerIndex);
    128                         SC2Player observer = new SC2Player(name);
    129                         observer.setObserver(true);
    130                         playerList.add(observer);
     128                        boolean observer = true;
     129                        // Check, if the player name is contained in the player list of replay.details
     130                        for (SC2Player player : playerList) {
     131                                if (player.getName().equals(name)) {
     132                                        observer = false;
     133                                }
     134                        }
     135                        if (observer) {
     136                                SC2Player observerPlayer = new SC2Player(name);
     137                                observerPlayer.setObserver(true);
     138                                playerList.add(observerPlayer);
     139                        }
    131140                }
    132141
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser_v3.java

    rb01abbe r7c832f6  
    118118                for (int playerIndex = playerList.size(); playerIndex < playerNames.size(); playerIndex++) {
    119119                        String name = playerNames.get(playerIndex);
    120                         SC2Player observer = new SC2Player(name);
    121                         observer.setObserver(true);
    122                         playerList.add(observer);
     120                        boolean observer = true;
     121                        // Check, if the player name is contained in the player list of replay.details
     122                        for (SC2Player player : playerList) {
     123                                if (player.getName().equals(name)) {
     124                                        observer = false;
     125                                }
     126                        }
     127                        if (observer) {
     128                                SC2Player observerPlayer = new SC2Player(name);
     129                                observerPlayer.setObserver(true);
     130                                playerList.add(observerPlayer);
     131                        }
    123132                }
    124133
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/actions/SC2ActionFactory_v1v2.java

    rb01abbe r7c832f6  
    8282                        }
    8383                        else {
    84                                 action = new Unknown3(timeStamp);
     84                                action = new Unknown(timeStamp);
    8585                        }
    8686                        //System.out.println("Select action: offset="+pos+", length="+(src.position()-pos)+" bytes");
     
    9797                }
    9898                else if (code == CODE_UNKOWN2) {
    99                         action = new Unknown2(timeStamp);
     99                        action = new Unknown(timeStamp);
    100100                        src.position(src.position()+25);
    101101                        //System.out.println("Request resources action: offset="+pos+", length="+(src.position()-pos)+" bytes");
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/actions/SC2ActionFactory_v3.java

    rb01abbe r7c832f6  
    3838        private static final byte CODE_MOVE_SCREEN = 0x01;
    3939        private static final byte CODE_UNKNOWN3 = (byte) 0x89;
     40        private static final byte CODE_UNKNOWN4 = (byte) 0x87;
     41        private static final byte CODE_UNKNOWN5 = 0x07;
    4042        private static final byte CODE_SELECT = (byte) 0xAC;
    4143        private static final byte CODE_LEAVE_GAME = 0x09;
     
    7880                        }
    7981                        else {
    80                                 action = new Unknown3(timeStamp);
     82                                action = new Unknown(timeStamp);
    8183                        }
    8284                        //System.out.println("Select action: offset="+pos+", length="+(src.position()-pos)+" bytes");
     
    9395                }
    9496                else if (code == CODE_UNKOWN2) {
    95                         action = new Unknown2(timeStamp);
     97                        action = new Unknown(timeStamp);
    9698                        src.position(src.position()+25);
     99                        //System.out.println("Request resources action: offset="+pos+", length="+(src.position()-pos)+" bytes");
     100                }
     101                else if (code == CODE_UNKNOWN4) {
     102                        action = new Unknown(timeStamp);
     103                        src.position(src.position()+8);
     104                        //System.out.println("Request resources action: offset="+pos+", length="+(src.position()-pos)+" bytes");
     105                }
     106                else if (code == CODE_UNKNOWN5) {
     107                        action = new Unknown(timeStamp);
     108                        src.position(src.position()+4);
    97109                        //System.out.println("Request resources action: offset="+pos+", length="+(src.position()-pos)+" bytes");
    98110                }
     
    130142                // Skip 3 bytes
    131143                src.position(src.position()+3);
    132                 int flagByte1 = src.get();
    133                 if ((flagByte1 & 0x10) != 0 ) {
     144                int flagByte = src.get();
     145                if ((flagByte & 0x10) != 0 ) {
    134146                        // Skip 1 byte
    135147                        src.position(src.position()+1);
    136                         int flagByte2 = src.get();
    137                         if ((flagByte2 & 0x20) != 0) {
    138                                 // Skip 1 byte
    139                                 src.position(src.position()+1);
    140                                 int flagByte3 = src.get();
    141                                 if ((flagByte3 & 0x40) != 0) {
    142                                         // Skip 2 bytes
    143                                         src.position(src.position()+2);
    144                                 }
    145                         }
     148                        flagByte = src.get();
    146149                }
    147                 else if ((flagByte1 & 0x40) != 0) {
     150                if ((flagByte & 0x20) != 0) {
     151                        // Skip 1 byte
     152                        src.position(src.position()+1);
     153                        flagByte = src.get();
     154                }
     155                if ((flagByte & 0x40) != 0) {
    148156                        // Skip 2 bytes
    149157                        src.position(src.position()+2);
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/actions/SC2ActionFilter.java

    rb01abbe r7c832f6  
    5454                        return 3;
    5555                }
    56                 else if (action instanceof Unknown || action instanceof Unknown2 || action instanceof Unknown3) {
     56                else if (action instanceof Unknown) {
    5757                        return 0;
    5858                }
Note: See TracChangeset for help on using the changeset viewer.