From: <bm...@us...> - 2003-03-01 00:32:04
|
Update of /cvsroot/megamek/megamek/megamek/common In directory sc8-pr-cvs1:/tmp/cvs-serv9454/megamek/common Modified Files: Compute.java Entity.java Game.java GameTurn.java Packet.java Log Message: + new "save any time" technology (/save) (I hope it's worth the trouble) Index: Compute.java =================================================================== RCS file: /cvsroot/megamek/megamek/megamek/common/Compute.java,v retrieving revision 1.135 retrieving revision 1.136 diff -C2 -d -r1.135 -r1.136 *** Compute.java 28 Feb 2003 19:03:01 -0000 1.135 --- Compute.java 1 Mar 2003 00:31:18 -0000 1.136 *************** *** 1312,1331 **** } public static ToHitData toHitWeapon(Game game, WeaponAttackAction waa, Vector prevAttacks) { return toHitWeapon(game, waa.getEntityId(), game.getTarget(waa.getTargetType(), waa.getTargetId()), waa.getWeaponId(), prevAttacks); } /** * To-hit number for attacker firing a weapon at the target. * ! * @param game the game ! * @param attackerId the attacker id number ! * @param targetId the target id number ! * @param weaponId the weapon id number */ ! public static ToHitData toHitWeapon(Game game, int attackerId, ! Targetable target, int weaponId, ! Vector prevAttacks) { final Entity ae = game.getEntity(attackerId); Entity te = null; --- 1312,1342 ---- } + /** + * @deprecated no more prevattacks + */ public static ToHitData toHitWeapon(Game game, WeaponAttackAction waa, Vector prevAttacks) { return toHitWeapon(game, waa.getEntityId(), game.getTarget(waa.getTargetType(), waa.getTargetId()), waa.getWeaponId(), prevAttacks); } + public static ToHitData toHitWeapon(Game game, WeaponAttackAction waa) { + return toHitWeapon(game, waa.getEntityId(), + game.getTarget(waa.getTargetType(), waa.getTargetId()), + waa.getWeaponId()); + } /** * To-hit number for attacker firing a weapon at the target. * ! * @deprecated no more prevattacks */ ! public static ToHitData toHitWeapon(Game game, int attackerId, Targetable target, int weaponId, Vector prevAttacks) { ! // ignore prevAttacks ! return toHitWeapon(game, attackerId, target, weaponId); ! } ! ! /** ! * To-hit number for attacker firing a weapon at the target. ! */ ! public static ToHitData toHitWeapon(Game game, int attackerId, Targetable target, int weaponId) { final Entity ae = game.getEntity(attackerId); Entity te = null; *************** *** 1389,1393 **** // Handle solo attack weapons. if ( wtype.hasFlag(WeaponType.F_SOLO_ATTACK) ) { ! for ( Enumeration i = prevAttacks.elements(); i.hasMoreElements(); ) { Object o = i.nextElement(); --- 1400,1404 ---- // Handle solo attack weapons. if ( wtype.hasFlag(WeaponType.F_SOLO_ATTACK) ) { ! for ( Enumeration i = game.getActions(); i.hasMoreElements(); ) { Object o = i.nextElement(); *************** *** 1699,1703 **** int primaryTarget = Entity.NONE; boolean curInFrontArc = isInArc(ae.getPosition(), ae.getSecondaryFacing(), target.getPosition(), ARC_FORWARD); ! for (Enumeration i = prevAttacks.elements(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { --- 1710,1714 ---- int primaryTarget = Entity.NONE; boolean curInFrontArc = isInArc(ae.getPosition(), ae.getSecondaryFacing(), target.getPosition(), ARC_FORWARD); ! for (Enumeration i = game.getActions(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { *************** *** 1781,1785 **** int otherArm = weapon.getLocation() == Mech.LOC_RARM ? Mech.LOC_LARM : Mech.LOC_RARM; // check previous attacks for weapons fire from the other arm ! for (Enumeration i = prevAttacks.elements(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { --- 1792,1796 ---- int otherArm = weapon.getLocation() == Mech.LOC_RARM ? Mech.LOC_LARM : Mech.LOC_RARM; // check previous attacks for weapons fire from the other arm ! for (Enumeration i = game.getActions(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { *************** *** 1813,1817 **** int otherArm = weapon.getLocation() == Mech.LOC_RARM ? Mech.LOC_LARM : Mech.LOC_RARM; // check previous attacks for weapons fire from the other arm ! for (Enumeration i = prevAttacks.elements(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { --- 1824,1828 ---- int otherArm = weapon.getLocation() == Mech.LOC_RARM ? Mech.LOC_LARM : Mech.LOC_RARM; // check previous attacks for weapons fire from the other arm ! for (Enumeration i = game.getActions(); i.hasMoreElements();) { Object o = i.nextElement(); if (!(o instanceof WeaponAttackAction)) { *************** *** 3446,3450 **** * Returns the weapon attack out of a list that has the highest expected damage */ ! public static WeaponAttackAction getHighestExpectedDamage(Game g, Vector vAttacks, Vector vOtherAttacks) { float fHighest = -1.0f; --- 3457,3461 ---- * Returns the weapon attack out of a list that has the highest expected damage */ ! public static WeaponAttackAction getHighestExpectedDamage(Game g, Vector vAttacks) { float fHighest = -1.0f; *************** *** 3452,3456 **** for (int x = 0, n = vAttacks.size(); x < n; x++) { WeaponAttackAction waa = (WeaponAttackAction)vAttacks.elementAt(x); ! float fDanger = getExpectedDamage(g, waa, vOtherAttacks); if (fDanger > fHighest) { fHighest = fDanger; --- 3463,3467 ---- for (int x = 0, n = vAttacks.size(); x < n; x++) { WeaponAttackAction waa = (WeaponAttackAction)vAttacks.elementAt(x); ! float fDanger = getExpectedDamage(g, waa); if (fDanger > fHighest) { fHighest = fDanger; *************** *** 3469,3473 **** * Determines the expected damage of a weapon attack, based on to-hit, salvo sizes, etc. */ ! public static float getExpectedDamage(Game g, WeaponAttackAction waa, Vector vOtherAttacks) { Entity attacker = g.getEntity(waa.getEntityId()); --- 3480,3484 ---- * Determines the expected damage of a weapon attack, based on to-hit, salvo sizes, etc. */ ! public static float getExpectedDamage(Game g, WeaponAttackAction waa) { Entity attacker = g.getEntity(waa.getEntityId()); *************** *** 3475,3479 **** System.out.println("Computing expected damage for " + attacker.getShortName() + " " + weapon.getName()); ! ToHitData hitData = Compute.toHitWeapon(g, waa, vOtherAttacks); if (hitData.getValue() == ToHitData.IMPOSSIBLE || hitData.getValue() == ToHitData.AUTOMATIC_FAIL) { return 0.0f; --- 3486,3490 ---- System.out.println("Computing expected damage for " + attacker.getShortName() + " " + weapon.getName()); ! ToHitData hitData = Compute.toHitWeapon(g, waa); if (hitData.getValue() == ToHitData.IMPOSSIBLE || hitData.getValue() == ToHitData.AUTOMATIC_FAIL) { return 0.0f; Index: Entity.java =================================================================== RCS file: /cvsroot/megamek/megamek/megamek/common/Entity.java,v retrieving revision 1.87 retrieving revision 1.88 diff -C2 -d -r1.87 -r1.88 *** Entity.java 24 Feb 2003 05:00:50 -0000 1.87 --- Entity.java 1 Mar 2003 00:31:21 -0000 1.88 *************** *** 1965,1969 **** * This should only be called once per turn, or AMS will get extra attacks */ ! public void assignAMS(Vector vAttacks, Vector vOtherAttacks) { for (Enumeration e = getWeapons(); e.hasMoreElements(); ) { --- 1965,1969 ---- * This should only be called once per turn, or AMS will get extra attacks */ ! public void assignAMS(Vector vAttacks) { for (Enumeration e = getWeapons(); e.hasMoreElements(); ) { *************** *** 1995,1999 **** } // find the most dangerous salvo by expected damage ! WeaponAttackAction waa = Compute.getHighestExpectedDamage(game, vAttacksInArc, vOtherAttacks); if (waa != null) { waa.addCounterEquipment(weapon); --- 1995,1999 ---- } // find the most dangerous salvo by expected damage ! WeaponAttackAction waa = Compute.getHighestExpectedDamage(game, vAttacksInArc); if (waa != null) { waa.addCounterEquipment(weapon); Index: Game.java =================================================================== RCS file: /cvsroot/megamek/megamek/megamek/common/Game.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** Game.java 18 Feb 2003 00:37:37 -0000 1.35 --- Game.java 1 Mar 2003 00:31:23 -0000 1.36 *************** *** 18,21 **** --- 18,23 ---- import java.io.*; + import megamek.common.actions.*; + /** * The game class is the root of all data about the game in progress. *************** *** 53,59 **** public static final int UNIT_DEVASTATED = 0x0400; - public int phase = PHASE_UNKNOWN; - private GameTurn turn; - private GameOptions options = new GameOptions(); --- 55,58 ---- *************** *** 63,76 **** private Hashtable entityIds = new Hashtable(); ! private Vector graveyard = new Vector(); // for dead entities ! ! /** ! * Track units that have been retreated. ! */ private Vector sanctuary = new Vector(); ! ! /** ! * Track units that have been utterly devastated. ! */ private Vector smithereens = new Vector(); --- 62,70 ---- private Hashtable entityIds = new Hashtable(); ! /** Keeps track of dead units */ ! private Vector graveyard = new Vector(); ! /** Track units that have been retreated. */ private Vector sanctuary = new Vector(); ! /** Track units that have been utterly devastated. */ private Vector smithereens = new Vector(); *************** *** 78,86 **** private Hashtable playerIds = new Hashtable(); ! // have the entities been deployed? private boolean m_bHasDeployed = false; ! private int windDirection; ! private String stringWindDirection; /** --- 72,102 ---- private Hashtable playerIds = new Hashtable(); ! /** have the entities been deployed? */ private boolean m_bHasDeployed = false; ! /** how's the weather? */ ! private int windDirection; ! private String stringWindDirection; ! ! /** what round is it? */ ! private int roundCount = 0; ! ! /** The current turn list */ ! private Vector turnVector = new Vector(); ! private int turnIndex = 0; ! ! /** The present phase */ ! public int phase = PHASE_UNKNOWN; ! ! // phase state ! private Vector actions = new Vector(); ! private Vector pendingCharges = new Vector(); ! private Vector pilotRolls = new Vector(); ! ! // reports ! private StringBuffer roundReport = new StringBuffer(); ! private StringBuffer phaseReport = new StringBuffer(); ! ! private boolean forceVictory = false; /** *************** *** 222,235 **** */ public GameTurn getTurn() { ! return turn; } ! /** ! * Sets the turn ! */ ! public void setTurn(GameTurn turn) { ! this.turn = turn; } public int getPhase() { return phase; --- 238,293 ---- */ public GameTurn getTurn() { ! if (turnIndex < 0 || turnIndex >= turnVector.size()) { ! return null; ! } ! return (GameTurn)turnVector.elementAt(turnIndex); } ! /** Changes to the next turn, returning it. */ ! public GameTurn changeToNextTurn() { ! turnIndex++; ! return getTurn(); ! } ! ! /** Resets the turn index to -1 (awaiting first turn) */ ! public void resetTurnIndex() { ! turnIndex = -1; ! } ! ! /** Returns true if there is a turn after the current one */ ! public boolean hasMoreTurns() { ! return turnVector.size() > (turnIndex + 1); ! } ! ! /** Inserts a turn after the current one */ ! public void insertTurn(GameTurn turn) { ! turnVector.insertElementAt(turn, turnIndex); ! } ! ! /** Returns an Enumeration of the current turn list */ ! public Enumeration getTurns() { ! return turnVector.elements(); } + /** Returns the current turn index */ + public int getTurnIndex() { + return turnIndex; + } + + /** Sets the current turn index */ + public void setTurnIndex(int turnIndex) { + this.turnIndex = turnIndex; + } + + /** Returns the current turn vector */ + public Vector getTurnVector() { + return turnVector; + } + + /** Sets the current turn vector */ + public void setTurnVector(Vector turnVector) { + this.turnVector = turnVector; + } + public int getPhase() { return phase; *************** *** 388,396 **** */ public void reset() { entities.removeAllElements(); sanctuary.removeAllElements(); graveyard.removeAllElements(); smithereens.removeAllElements(); ! entityIds.clear(); } --- 446,463 ---- */ public void reset() { + roundCount = 0; + entities.removeAllElements(); + entityIds.clear(); + sanctuary.removeAllElements(); graveyard.removeAllElements(); smithereens.removeAllElements(); ! ! resetActions(); ! resetCharges(); ! resetPSRs(); ! ! forceVictory = false; } *************** *** 507,511 **** */ public Entity getFirstEntity() { ! return getFirstEntity(turn); } --- 574,578 ---- */ public Entity getFirstEntity() { ! return getFirstEntity(getTurn()); } *************** *** 515,519 **** */ public Entity getFirstEntity(GameTurn turn) { ! return getEntity(getFirstEntityNum(turn)); } --- 582,586 ---- */ public Entity getFirstEntity(GameTurn turn) { ! return getEntity(getFirstEntityNum(getTurn())); } *************** *** 523,527 **** */ public int getFirstEntityNum() { ! return getFirstEntityNum(turn); } --- 590,594 ---- */ public int getFirstEntityNum() { ! return getFirstEntityNum(getTurn()); } *************** *** 550,558 **** */ public Entity getNextEntity(int start) { ! return getEntity(getNextEntityNum(turn, start)); } public int getNextEntityNum(int start) { ! return getNextEntityNum(turn, start); } --- 617,625 ---- */ public Entity getNextEntity(int start) { ! return getEntity(getNextEntityNum(getTurn(), start)); } public int getNextEntityNum(int start) { ! return getNextEntityNum(getTurn(), start); } *************** *** 734,737 **** } // End private boolean checkForMagneticClamp() ! } --- 801,906 ---- } // End private boolean checkForMagneticClamp() ! ! /** Adds the specified action to the actions list for this phase. */ ! public void addAction(EntityAction ea) { ! actions.addElement(ea); ! } ! ! /** Returns an Enumeration of actions scheduled for this phase. */ ! public Enumeration getActions() { ! return actions.elements(); ! } ! ! /** Resets the actions list. */ ! public void resetActions() { ! actions.removeAllElements(); ! } ! ! public int actionsSize() { ! return actions.size(); ! } ! ! /** Adds a pending displacement attack to the list for this phase. */ ! public void addCharge(AttackAction ea) { ! pendingCharges.addElement(ea); ! } ! ! /** ! * Returns an Enumeration of displacement attacks scheduled for the end ! * of the physical phase. ! */ ! public Enumeration getCharges() { ! return pendingCharges.elements(); ! } ! ! /** Resets the pending charges list. */ ! public void resetCharges() { ! pendingCharges.removeAllElements(); ! } ! ! /** Adds a pending PSR to the list for this phase. */ ! public void addPSR(PilotingRollData psr) { ! pilotRolls.addElement(psr); ! } ! ! /** Returns an Enumeration of pending PSRs. */ ! public Enumeration getPSRs() { ! return pilotRolls.elements(); ! } ! ! /** Resets the PSR list. */ ! public void resetPSRs() { ! pilotRolls.removeAllElements(); ! } ! ! /** Getter for property roundCount. ! * @return Value of property roundCount. ! */ ! public int getRoundCount() { ! return roundCount; ! } ! ! /** Increments the round counter */ ! public void incrementRoundCount() { ! roundCount++; ! } ! ! /** Getter for property forceVictory. ! * @return Value of property forceVictory. ! */ ! public boolean isForceVictory() { ! return forceVictory; ! } ! ! /** Setter for property forceVictory. ! * @param forceVictory New value of property forceVictory. ! */ ! public void setForceVictory(boolean forceVictory) { ! this.forceVictory = forceVictory; ! } ! ! /** Getter for property roundReport. ! * @return Value of property roundReport. ! */ ! public java.lang.StringBuffer getRoundReport() { ! return roundReport; ! } ! ! /** Resets the round report */ ! public void resetRoundReport() { ! this.roundReport = new StringBuffer(); ! } ! ! /** Getter for property phaseReport. ! * @return Value of property phaseReport. ! */ ! public java.lang.StringBuffer getPhaseReport() { ! return phaseReport; ! } ! ! /** Resets the round report */ ! public void resetPhaseReport() { ! this.phaseReport = new StringBuffer(); ! } ! } Index: GameTurn.java =================================================================== RCS file: /cvsroot/megamek/megamek/megamek/common/GameTurn.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** GameTurn.java 18 Feb 2003 00:37:37 -0000 1.4 --- GameTurn.java 1 Mar 2003 00:31:25 -0000 1.5 *************** *** 60,63 **** --- 60,67 ---- return playerId == this.playerId && isValidEntity(entity); } + + public String toString() { + return getClass().getName() + " [" + playerId + "]"; + } /** Index: Packet.java =================================================================== RCS file: /cvsroot/megamek/megamek/megamek/common/Packet.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** Packet.java 18 Feb 2003 18:14:54 -0000 1.13 --- Packet.java 1 Mar 2003 00:31:25 -0000 1.14 *************** *** 50,57 **** public static final int COMMAND_PHASE_CHANGE = 15; public static final int COMMAND_TURN = 16; ! public static final int COMMAND_SENDING_BOARD = 17; public static final int COMMAND_SENDING_ENTITIES = 18; public static final int COMMAND_SENDING_PLAYERS = 19; public static final int COMMAND_SENDING_REPORT = 20; public static final int COMMAND_SENDING_GAME_SETTINGS= 21; --- 50,58 ---- public static final int COMMAND_PHASE_CHANGE = 15; public static final int COMMAND_TURN = 16; ! public static final int COMMAND_SENDING_BOARD = 17; public static final int COMMAND_SENDING_ENTITIES = 18; public static final int COMMAND_SENDING_PLAYERS = 19; + public static final int COMMAND_SENDING_TURNS = 28; // reorder me public static final int COMMAND_SENDING_REPORT = 20; public static final int COMMAND_SENDING_GAME_SETTINGS= 21; |