diff --git a/megamek/src/megamek/client/ui/swing/MovementDisplay.java b/megamek/src/megamek/client/ui/swing/MovementDisplay.java index e9d9c3f22d2..cba77fa8fdb 100644 --- a/megamek/src/megamek/client/ui/swing/MovementDisplay.java +++ b/megamek/src/megamek/client/ui/swing/MovementDisplay.java @@ -643,7 +643,7 @@ private ArrayList getButtonList(int flag) { Game game = clientgui.getClient().getGame(); Player localPlayer = clientgui.getClient().getLocalPlayer(); forwardIni = (game.getTeamForPlayer(localPlayer) != null) - && (game.getTeamForPlayer(localPlayer).getSize() > 1); + && (game.getTeamForPlayer(localPlayer).size() > 1); opts = game.getOptions(); } diff --git a/megamek/src/megamek/client/ui/swing/lobby/TeamOverviewPanel.java b/megamek/src/megamek/client/ui/swing/lobby/TeamOverviewPanel.java index 873664c679b..2151c3f85d8 100644 --- a/megamek/src/megamek/client/ui/swing/lobby/TeamOverviewPanel.java +++ b/megamek/src/megamek/client/ui/swing/lobby/TeamOverviewPanel.java @@ -36,7 +36,7 @@ import java.awt.event.MouseListener; import java.text.NumberFormat; import java.util.ArrayList; -import java.util.Vector; +import java.util.List; import static megamek.client.ui.swing.util.UIUtil.*; @@ -190,7 +190,7 @@ public int getColumnCount() { /** Updates the stored data from the provided game. */ public void updateTable(Game game) { clearData(); - for (Team team: game.getTeams()) { + for (Team team : game.getTeams()) { teams.add(team); teamID.add(team.getId()); teamNames.add(team.toString()); @@ -202,11 +202,11 @@ public void updateTable(Game game) { int hiddenBv = 0; boolean[] unitCritical = { false, false, false, false, false }; boolean[] unitWarnings = { false, false, false, false, false }; - for (Player teamMember: team.getPlayersVector()) { + for (Player teamMember : team.players()) { // Get the "real" player object, as the team's may be wrong Player player = game.getPlayer(teamMember.getId()); bv += player.getBV(); - for (Entity entity: game.getPlayerEntities(player, false)) { + for (Entity entity : game.getPlayerEntities(player, false)) { // Avoid counting fighters in squadrons twice if (entity instanceof FighterSquadron) { continue; @@ -260,8 +260,8 @@ private String unitSummary(int[] counts, boolean[] criticals, boolean[] warnings String result = ""; for (int i = 0; i < counts.length; i++) { if (counts[i] > 0) { - result += criticals[i] ? criticalSign() + " ": ""; - result += warnings[i] ? warningSign() + " ": ""; + result += criticals[i] ? criticalSign() + " " : ""; + result += warnings[i] ? warningSign() + " " : ""; result += Messages.getString("ChatLounge.teamOverview.unitSum" + i) + " " + counts[i]; result += "
"; } @@ -307,7 +307,7 @@ public Object getValueAt(int row, int col) { TOMCOLS column = TOMCOLS.values()[col]; switch (column) { case TEAM: - boolean isEnemy = !teams.get(row).getPlayersVector().contains(clientGui.getClient().getLocalPlayer()); + boolean isEnemy = !teams.get(row).players().contains(clientGui.getClient().getLocalPlayer()); Color color = isEnemy ? GUIPreferences.getInstance().getEnemyUnitColor() : GUIPreferences.getInstance().getMyUnitColor(); result.append(guiScaledFontHTML(color, textSizeDelta) + " "); result.append(teamNames.get(row) + ""); @@ -335,7 +335,7 @@ public Object getValueAt(int row, int col) { break; case MEMBERS: - return teams.get(row).getPlayersVector(); + return teams.get(row).players(); case BV: result.append(guiScaledFontHTML(textSizeDelta) + "
"); @@ -354,7 +354,7 @@ public Object getValueAt(int row, int col) { case HIDDEN: result.append(guiScaledFontHTML(textSizeDelta) + "
"); var percentage = hidden.get(row); - result.append(percentage == 0 ? "--": NumberFormat.getPercentInstance().format(percentage)); + result.append(percentage == 0 ? "--" : NumberFormat.getPercentInstance().format(percentage)); default: break; @@ -408,16 +408,16 @@ private class MemberListRenderer extends JPanel implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (!(value instanceof Vector)) { + if (!(value instanceof List)) { return null; } removeAll(); add(Box.createVerticalGlue()); - Vector playerList = (Vector) value; + List playerList = (List) value; int baseSize = FONT_SCALE1 - (isDetached ? 2 : 0); int size = scaleForGUI(2 * baseSize); Font font = new Font(MMConstants.FONT_DIALOG, Font.PLAIN, scaleForGUI(baseSize)); - for (Object obj: playerList) { + for (Object obj : playerList) { if (!(obj instanceof Player)) { continue; } diff --git a/megamek/src/megamek/common/Game.java b/megamek/src/megamek/common/Game.java index 52ed4638ffe..d6bbee2941f 100644 --- a/megamek/src/megamek/common/Game.java +++ b/megamek/src/megamek/common/Game.java @@ -333,9 +333,8 @@ public void setOptions(final @Nullable GameOptions options) { */ public @Nullable Team getTeamForPlayer(Player p) { for (Team team : teams) { - for (Enumeration j = team.getPlayers(); j.hasMoreElements(); ) { - final Player player = j.nextElement(); - if (p.equals(player)) { + for (Player player : team.players()) { + if (player.equals(p)) { return team; } } diff --git a/megamek/src/megamek/common/Player.java b/megamek/src/megamek/common/Player.java index dc2623e863d..393e4d49603 100644 --- a/megamek/src/megamek/common/Player.java +++ b/megamek/src/megamek/common/Player.java @@ -264,9 +264,6 @@ public boolean getGameMaster() { */ public void setGameMaster(boolean gameMaster) { this.gameMaster = gameMaster; - if (game != null && game.getTeamForPlayer(this) != null) { - game.getTeamForPlayer(this).cacheObserverStatus(); - } } /** @return true if {@link #observer} flag is true and not in VICTORY phase*/ @@ -312,9 +309,6 @@ public boolean isSeeAllPermitted() { /** set the {@link #observer} flag. Observers have no units ad no team */ public void setObserver(boolean observer) { this.observer = observer; - if (game != null && game.getTeamForPlayer(this) != null) { - game.getTeamForPlayer(this).cacheObserverStatus(); - } } /** diff --git a/megamek/src/megamek/common/Team.java b/megamek/src/megamek/common/Team.java index f8eb8b11735..7d7ee5b23bf 100644 --- a/megamek/src/megamek/common/Team.java +++ b/megamek/src/megamek/common/Team.java @@ -1,116 +1,108 @@ /* - * MegaMek - Copyright (C) 2003, 2004 Ben Mazur (bmazur@sev.org) + * Copyright (c) 2003, 2004 Ben Mazur (bmazur@sev.org) + * Copyright (c) 2023 - The MegaMek Team. All Rights Reserved. * - * 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; either version 2 of the License, or (at your option) - * any later version. + * This file is part of MegaMek. * - * 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. + * MegaMek 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, either version 3 of the License, or + * (at your option) any later version. + * + * MegaMek 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 MegaMek. If not, see . */ package megamek.common; -import java.util.Enumeration; +import megamek.common.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; import java.util.Objects; -import java.util.Vector; + +import static java.util.stream.Collectors.toList; /** - * The Team class holds a list of information about a team. It holds the - * initiative for the team, and contains a list of players on that team. It also - * implements functions that gather the number of units each team has. + * The Team class holds information about a team. It holds the initiative for the team, and contains a + * list of players on that team. + * + * Note that Team should be usable for any type of game (TW, AS, BF, SBF) and therefore should not + * make any direct use of Game, Entity, AlphaStrikeElement etc., instead using IGame and InGameObject if necessary. */ public final class Team extends TurnOrdered { - private static final long serialVersionUID = 2270215552964191597L; - private Vector players = new Vector<>(); - private int id; - private Boolean ObserverTeam = null; + + private final List players = new ArrayList<>(); + private final int id; public Team(int newID) { id = newID; } - public int getSize() { + /** @return The number of players on this team (including observers). */ + public int size() { return players.size(); } - public int getNonObserverSize() { - int nonObservers = 0; - for (int i = 0; i < players.size(); i++) { - if (!players.get(i).isObserver()) { - nonObservers++; - } - } - return nonObservers; + public boolean isEmpty() { + return players.isEmpty(); } - public Enumeration getPlayers() { - return players.elements(); + public List players() { + return new ArrayList<>(players); } - public Enumeration getNonObserverPlayers() { - Vector nonObservers = new Vector<>(); - for (int i = 0; i < players.size(); i++) { - if (!players.get(i).isObserver()) { - nonObservers.add(players.get(i)); - } - } - return nonObservers.elements(); + public List nonObserverPlayers() { + return players.stream().filter(p -> !p.isObserver()).collect(toList()); } - - public Vector getPlayersVector() { - return players; + + /** @return The number of players on this team that are not observers. */ + public int getNonObserverSize() { + return nonObserverPlayers().size(); } + /** Removes all players from this team. */ public void resetTeam() { - players.removeAllElements(); + players.clear(); } - public void addPlayer(Player p) { - players.addElement(p); - } - - public boolean isObserverTeam() { - if (ObserverTeam == null) { - cacheObserverStatus(); + /** Adds the given player to this team. Null players will not be added. */ + public void addPlayer(@Nullable Player player) { + if (player != null) { + players.removeIf(p -> p.equals(player)); + players.add(player); } - return ObserverTeam; } - - public void cacheObserverStatus() { - ObserverTeam = Boolean.TRUE; - for (int i = 0; i < players.size(); i++) { - if (!players.get(i).isObserver()) { - ObserverTeam = false; - } - } + + /** @return True when this team only consists of observer players. */ + public boolean isObserverTeam() { + return getNonObserverSize() == 0; } - //get the next player on this team. + /** @return The next player on this team, starting from Player p. */ public Player getNextValidPlayer(Player p, Game game) { - //start from the next player + // start from the next player for (int i = players.indexOf(p) + 1; i < players.size(); ++i) { if (game.getTurnForPlayer(players.get(i).getId()) != null) { return players.get(i); } } - //if we haven't found one yet, start again from the beginning - //worst case we reach exactly our current player again. + // if we haven't found one yet, start again from the beginning + // worst case we reach exactly our current player again. for (int i = 0; i < (players.indexOf(p) + 1); ++i) { if (game.getTurnForPlayer(players.get(i).getId()) != null) { return players.get(i); } } - //this should not happen, but if we don't find anything return ourselves again. + // this should not happen, but if we don't find anything return ourselves again. return p; } - /** - * Clear the initiative of this object. - */ @Override public void clearInitiative(boolean bUseInitComp) { getInitiative().clear(); @@ -123,7 +115,7 @@ public TurnVectors determineTeamOrder(Game game) { public int getId() { // If Team Initiative is not turned on, id will be 0 for all teams, - // however the players accurately store their team id + // however the players accurately store their team id if (!players.isEmpty()) { return players.get(0).getTeam(); } else { @@ -142,117 +134,61 @@ public int getId() { */ @Override public int getNormalTurns(Game game) { - int normal = getMultiTurns(game) + getOtherTurns(); - if (0 == normal) { - normal = getEvenTurns(); - } - return normal; + int normalTurns = getMultiTurns(game) + getOtherTurns(); + return (normalTurns == 0) ? getEvenTurns() : normalTurns; } @Override public int getEvenTurns() { - // Sum the even turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getEvenTurns(); - } - return sum; + return players.stream().mapToInt(Player::getEvenTurns).sum(); } @Override public int getOtherTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getOtherTurns(); - } - return sum; + return players.stream().mapToInt(Player::getOtherTurns).sum(); } @Override public int getMultiTurns(Game game) { - // Sum the multi turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getMultiTurns(game); - } - return sum; + return players.stream().mapToInt(p -> p.getMultiTurns(game)).sum(); } @Override public int getSpaceStationTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getSpaceStationTurns(); - } - return sum; + return players.stream().mapToInt(Player::getSpaceStationTurns).sum(); } @Override public int getJumpshipTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getJumpshipTurns(); - } - return sum; + return players.stream().mapToInt(Player::getJumpshipTurns).sum(); } @Override public int getWarshipTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getWarshipTurns(); - } - return sum; + return players.stream().mapToInt(Player::getWarshipTurns).sum(); } @Override public int getDropshipTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getDropshipTurns(); - } - return sum; + return players.stream().mapToInt(Player::getDropshipTurns).sum(); } @Override public int getSmallCraftTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getSmallCraftTurns(); - } - return sum; + return players.stream().mapToInt(Player::getSmallCraftTurns).sum(); } @Override public int getTeleMissileTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getSmallCraftTurns(); - } - return sum; + return players.stream().mapToInt(Player::getTeleMissileTurns).sum(); } @Override public int getAeroTurns() { - // Sum the other turns of all Players in this Team. - int sum = 0; - for (Enumeration loop = players.elements(); loop.hasMoreElements(); ) { - sum += loop.nextElement().getAeroTurns(); - } - return sum; + return players.stream().mapToInt(Player::getAeroTurns).sum(); } - /** - * Two teams are equal if their ids and players are equal.

Override - * java.lang.Object#equals(Object) - */ + /** Two teams are equal if their ids and players are equal. */ @Override public boolean equals(Object object) { if (this == object) { @@ -272,42 +208,28 @@ public int hashCode() { @Override public String toString() { - if (getId() == Player.TEAM_NONE) { - return "No Team"; - } else { - return "Team " + getId(); - } + return (getId() == Player.TEAM_NONE) ? "No Team" : "Team " + getId(); } - public boolean hasTAG(Game game) { - for (Enumeration e = game.getPlayers(); e.hasMoreElements(); ) { - Player m = e.nextElement(); - if (getId() == m.getTeam()) { - if (m.hasTAG()) { - return true; - } - } - } - return false; + // TODO : this is Total Warfare specific, remove from Team + public boolean hasTAG() { + return players.stream().anyMatch(Player::hasTAG); } - /** - * cycle through players team and select the best initiative - */ + /** @return The best initiative among the team's players. */ public int getTotalInitBonus(boolean bInitiativeCompensationBonus) { int dynamicBonus = Integer.MIN_VALUE; - int constantb = Integer.MIN_VALUE; + int constantBonus = Integer.MIN_VALUE; - for (Player player : getPlayersVector()) { + for (Player player : players) { dynamicBonus = Math.max(dynamicBonus, player.getTurnInitBonus()); dynamicBonus = Math.max(dynamicBonus, player.getCommandBonus()); // this is a special case: it's an arbitrary bonus associated with a player - constantb = Math.max(constantb, player.getConstantInitBonus()); + constantBonus = Math.max(constantBonus, player.getConstantInitBonus()); } - return constantb + dynamicBonus + - + getInitCompensationBonus(bInitiativeCompensationBonus); + return constantBonus + dynamicBonus + getInitCompensationBonus(bInitiativeCompensationBonus); } @Override @@ -317,23 +239,14 @@ public int getInitCompensationBonus() { public int getInitCompensationBonus(boolean bUseInitCompensation) { int nInitCompBonus = 0; - if (bUseInitCompensation) { - for (Player player : getPlayersVector()) { - if (player.getInitCompensationBonus() > nInitCompBonus) { - nInitCompBonus = player.getInitCompensationBonus(); - } - } + nInitCompBonus = players.stream().mapToInt(Player::getInitCompensationBonus).max().orElse(0); } - - return nInitCompBonus; + return Math.max(0, nInitCompBonus); } @Override - public void setInitCompensationBonus(int nNewValue) { - for (Enumeration p = getPlayers(); p.hasMoreElements(); ) { - Player player = p.nextElement(); - player.setInitCompensationBonus(nNewValue); - } + public void setInitCompensationBonus(int initCompBonus) { + players.forEach(p -> p.setInitCompensationBonus(initCompBonus)); } } \ No newline at end of file diff --git a/megamek/src/megamek/common/battlevalue/AeroBVCalculator.java b/megamek/src/megamek/common/battlevalue/AeroBVCalculator.java index 63a289a40bd..fc9f5d7865f 100644 --- a/megamek/src/megamek/common/battlevalue/AeroBVCalculator.java +++ b/megamek/src/megamek/common/battlevalue/AeroBVCalculator.java @@ -599,7 +599,7 @@ public static int calculateBV(Aero aero, boolean ignoreC3, boolean ignoreSkill, } else if ((tmpP.getTeam() != Player.TEAM_NONE) && (aero.getGame() != null)) { for (Team m : aero.getGame().getTeams()) { if (m.getId() == tmpP.getTeam()) { - if (m.hasTAG(aero.getGame())) { + if (m.hasTAG()) { tagBV += atype.getBV(aero); } // A player can't be on two teams. diff --git a/megamek/src/megamek/common/battlevalue/CombatVehicleBVCalculator.java b/megamek/src/megamek/common/battlevalue/CombatVehicleBVCalculator.java index f907a8e843a..7f257225525 100644 --- a/megamek/src/megamek/common/battlevalue/CombatVehicleBVCalculator.java +++ b/megamek/src/megamek/common/battlevalue/CombatVehicleBVCalculator.java @@ -377,7 +377,7 @@ public static int calculateBV(Tank combatVee, boolean ignoreC3, boolean ignoreSk } else if ((tmpP.getTeam() != Player.TEAM_NONE) && (combatVee.getGame() != null)) { for (Team m : combatVee.getGame().getTeams()) { if (m.getId() == tmpP.getTeam()) { - if (m.hasTAG(combatVee.getGame())) { + if (m.hasTAG()) { tagBV += atype.getBV(combatVee); tagText = "Tag: "; } diff --git a/megamek/src/megamek/common/battlevalue/MekBVCalculator.java b/megamek/src/megamek/common/battlevalue/MekBVCalculator.java index 0069d24f90d..1bb548a161c 100644 --- a/megamek/src/megamek/common/battlevalue/MekBVCalculator.java +++ b/megamek/src/megamek/common/battlevalue/MekBVCalculator.java @@ -965,7 +965,7 @@ && hasExplosiveEquipmentPenalty(mek, l)) { } else if ((tmpP.getTeam() != Player.TEAM_NONE) && (mek.getGame() != null)) { for (Team m : mek.getGame().getTeams()) { if (m.getId() == tmpP.getTeam()) { - if (m.hasTAG(mek.getGame())) { + if (m.hasTAG()) { tagBV += atype.getBV(mek); } // A player can't be on two teams. diff --git a/megamek/src/megamek/common/battlevalue/ProtoMekBVCalculator.java b/megamek/src/megamek/common/battlevalue/ProtoMekBVCalculator.java index 63cd96a9c58..17840c15fd2 100644 --- a/megamek/src/megamek/common/battlevalue/ProtoMekBVCalculator.java +++ b/megamek/src/megamek/common/battlevalue/ProtoMekBVCalculator.java @@ -220,7 +220,7 @@ public static int calculateBV(Protomech protoMek, boolean ignoreSkill, Calculati } else if ((tmpP.getTeam() != Player.TEAM_NONE) && (protoMek.getGame() != null)) { for (Team m : protoMek.getGame().getTeams()) { if (m.getId() == tmpP.getTeam()) { - if (m.hasTAG(protoMek.getGame())) { + if (m.hasTAG()) { tagBV += atype.getBV(protoMek); } // A player can't be on two teams. diff --git a/megamek/src/megamek/server/GameManager.java b/megamek/src/megamek/server/GameManager.java index d16d7cb07c7..e613b8f337a 100644 --- a/megamek/src/megamek/server/GameManager.java +++ b/megamek/src/megamek/server/GameManager.java @@ -3144,7 +3144,7 @@ private void writeInitiativeReport(boolean abbreviatedReport) { // If there is only one non-observer player, list // them as the 'team', and use the team initiative if (team.getNonObserverSize() == 1) { - final Player player = team.getNonObserverPlayers().nextElement(); + final Player player = team.nonObserverPlayers().get(0); r = new Report(1015, Report.PUBLIC); r.add(player.getColorForPlayer()); r.add(team.getInitiative().toString()); @@ -3155,8 +3155,7 @@ private void writeInitiativeReport(boolean abbreviatedReport) { r.add(Player.TEAM_NAMES[team.getId()]); r.add(team.getInitiative().toString()); addReport(r); - for (Enumeration j = team.getNonObserverPlayers(); j.hasMoreElements(); ) { - final Player player = j.nextElement(); + for (Player player : team.nonObserverPlayers()) { r = new Report(1015, Report.PUBLIC); r.indent(); r.add(player.getName()); @@ -10958,9 +10957,7 @@ private void revealMinefield(Minefield mf) { * @param mf The Minefield to be revealed */ public void revealMinefield(Team team, Minefield mf) { - Enumeration players = team.getPlayers(); - while (players.hasMoreElements()) { - Player player = players.nextElement(); + for (Player player : team.players()) { if (!player.containsMinefield(mf)) { player.addMinefield(mf); send(player.getId(), new Packet(PacketCommand.REVEAL_MINEFIELD, mf)); @@ -12643,9 +12640,7 @@ private void processDeployMinefields(Vector minefields) { if (teamId != Player.TEAM_NONE) { for (Team team : game.getTeams()) { if (team.getId() == teamId) { - Enumeration players = team.getPlayers(); - while (players.hasMoreElements()) { - Player teamPlayer = players.nextElement(); + for (Player teamPlayer : team.players()) { if (teamPlayer.getId() != player.getId()) { send(teamPlayer.getId(), new Packet(PacketCommand.DEPLOY_MINEFIELDS, minefields)); diff --git a/megamek/src/megamek/server/commands/CheckBVTeamCommand.java b/megamek/src/megamek/server/commands/CheckBVTeamCommand.java index 0ddd03cd614..8dda814bbe7 100644 --- a/megamek/src/megamek/server/commands/CheckBVTeamCommand.java +++ b/megamek/src/megamek/server/commands/CheckBVTeamCommand.java @@ -40,10 +40,8 @@ public void run(int connId, String[] args) { for (Team team : server.getGame().getTeams()) { int initialTeamBV = 0; int currentTeamBV = 0; - Enumeration playersEnum = team.getPlayers(); boolean enemyTeam = false; - while (playersEnum.hasMoreElements()) { - Player player = playersEnum.nextElement(); + for (Player player : team.players()) { initialTeamBV += player.getInitialBV(); currentTeamBV += player.getBV(); if (player.isEnemyOf(requestingPlayer)) { diff --git a/megamek/unittests/megamek/common/TeamTest.java b/megamek/unittests/megamek/common/TeamTest.java index a3a2a0ec93a..f6b76c272ef 100644 --- a/megamek/unittests/megamek/common/TeamTest.java +++ b/megamek/unittests/megamek/common/TeamTest.java @@ -21,7 +21,7 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -32,8 +32,10 @@ public class TeamTest { @Test - public void testTotalInitBonus() { + public void testTeam() { Team testTeam = new Team(1); + assertTrue(testTeam.isEmpty()); + // Setup Player 1 Player mockPlayer1 = mock(Player.class); when(mockPlayer1.getConstantInitBonus()).thenReturn(0); @@ -48,10 +50,10 @@ public void testTotalInitBonus() { when(mockPlayer2.getCommandBonus()).thenReturn(0); // Setup Player 3 Player mockPlayer3 = mock(Player.class); - when(mockPlayer2.getConstantInitBonus()).thenReturn(0); - when(mockPlayer2.getTurnInitBonus()).thenReturn(0); - when(mockPlayer2.getInitCompensationBonus()).thenReturn(0); - when(mockPlayer2.getCommandBonus()).thenReturn(0); + when(mockPlayer3.getConstantInitBonus()).thenReturn(0); + when(mockPlayer3.getTurnInitBonus()).thenReturn(0); + when(mockPlayer3.getInitCompensationBonus()).thenReturn(0); + when(mockPlayer3.getCommandBonus()).thenReturn(0); testTeam.addPlayer(mockPlayer1); testTeam.addPlayer(mockPlayer2); @@ -63,6 +65,10 @@ public void testTotalInitBonus() { int initBonus = testTeam.getTotalInitBonus(useInitCompBonus); assertEquals(initBonus, 0); + assertEquals(3, testTeam.size()); + assertEquals(3, testTeam.getNonObserverSize()); + assertFalse(testTeam.isObserverTeam()); + when(mockPlayer1.getConstantInitBonus()).thenReturn(-1); when(mockPlayer2.getConstantInitBonus()).thenReturn(-2); when(mockPlayer3.getConstantInitBonus()).thenReturn(-3); @@ -132,6 +138,29 @@ public void testTotalInitBonus() { when(mockPlayer2.getInitCompensationBonus()).thenReturn(2); when(mockPlayer3.getInitCompensationBonus()).thenReturn(3); initBonus = testTeam.getTotalInitBonus(useInitCompBonus); - assertEquals(9, initBonus); + assertEquals(9, initBonus); + + // Setup Player 4 + Player mockPlayer4 = mock(Player.class); + when(mockPlayer4.getConstantInitBonus()).thenReturn(0); + when(mockPlayer4.getTurnInitBonus()).thenReturn(0); + when(mockPlayer4.getInitCompensationBonus()).thenReturn(0); + when(mockPlayer4.getCommandBonus()).thenReturn(0); + when(mockPlayer4.isObserver()).thenReturn(true); + + testTeam.addPlayer(mockPlayer4); + assertEquals(4, testTeam.size()); + assertEquals(3, testTeam.getNonObserverSize()); + assertFalse(testTeam.isObserverTeam()); + assertFalse(testTeam.isEmpty()); + + testTeam.addPlayer(null); + assertEquals(4, testTeam.size()); + + Team testTeam2 = new Team(2); + testTeam2.addPlayer(mockPlayer4); + assertEquals(0, testTeam2.getNonObserverSize()); + assertTrue(testTeam2.isObserverTeam()); + } }