diff --git a/megamek/src/megamek/common/Game.java b/megamek/src/megamek/common/Game.java
index 7347ed433b7..60f3f577eb5 100644
--- a/megamek/src/megamek/common/Game.java
+++ b/megamek/src/megamek/common/Game.java
@@ -328,20 +328,6 @@ public void setOptions(final @Nullable GameOptions options) {
}
}
- /**
- * @return a player's team, which may be null if they do not have a team
- */
- public @Nullable Team getTeamForPlayer(Player p) {
- for (Team team : teams) {
- for (Player player : team.players()) {
- if (player.equals(p)) {
- return team;
- }
- }
- }
- return null;
- }
-
/**
* Set up the teams vector. Each player on a team (Team 1 .. Team X) is
* placed in the appropriate vector. Any player on 'No Team', is placed in
diff --git a/megamek/src/megamek/common/IGame.java b/megamek/src/megamek/common/IGame.java
index 78b1c443b87..f96b9eb4e44 100644
--- a/megamek/src/megamek/common/IGame.java
+++ b/megamek/src/megamek/common/IGame.java
@@ -93,6 +93,15 @@ public interface IGame {
void setupTeams();
+ @Nullable default Team getTeamForPlayer(Player player) {
+ for (Team team : getTeams()) {
+ if (team.hasPlayer(player)) {
+ return team;
+ }
+ }
+ return null;
+ }
+
// UNITS //////////////
/** @return The next free id for InGameObjects (units and others). */
diff --git a/megamek/src/megamek/common/ITurnOrdered.java b/megamek/src/megamek/common/ITurnOrdered.java
index 200cbfae6bb..1d7179e1207 100644
--- a/megamek/src/megamek/common/ITurnOrdered.java
+++ b/megamek/src/megamek/common/ITurnOrdered.java
@@ -29,13 +29,13 @@ public interface ITurnOrdered extends Serializable {
* @return the int
number of "normal" turns this item should
* take in a phase.
*/
- int getNormalTurns(Game game);
+ int getNormalTurns(IGame game);
int getOtherTurns();
int getEvenTurns();
- int getMultiTurns(Game game);
+ int getMultiTurns(IGame game);
int getSpaceStationTurns();
diff --git a/megamek/src/megamek/common/Team.java b/megamek/src/megamek/common/Team.java
index 7d7ee5b23bf..8dae94a7004 100644
--- a/megamek/src/megamek/common/Team.java
+++ b/megamek/src/megamek/common/Team.java
@@ -52,6 +52,10 @@ public boolean isEmpty() {
return players.isEmpty();
}
+ public boolean hasPlayer(Player player) {
+ return players.contains(player);
+ }
+
public List players() {
return new ArrayList<>(players);
}
@@ -133,7 +137,7 @@ public int getId() {
* take in a phase.
*/
@Override
- public int getNormalTurns(Game game) {
+ public int getNormalTurns(IGame game) {
int normalTurns = getMultiTurns(game) + getOtherTurns();
return (normalTurns == 0) ? getEvenTurns() : normalTurns;
}
@@ -149,7 +153,7 @@ public int getOtherTurns() {
}
@Override
- public int getMultiTurns(Game game) {
+ public int getMultiTurns(IGame game) {
return players.stream().mapToInt(p -> p.getMultiTurns(game)).sum();
}
diff --git a/megamek/src/megamek/common/TurnOrdered.java b/megamek/src/megamek/common/TurnOrdered.java
index 84693887e59..f24cef572ea 100755
--- a/megamek/src/megamek/common/TurnOrdered.java
+++ b/megamek/src/megamek/common/TurnOrdered.java
@@ -48,7 +48,7 @@ public abstract class TurnOrdered implements ITurnOrdered {
* take in a phase.
*/
@Override
- public int getNormalTurns(Game game) {
+ public int getNormalTurns(IGame game) {
return getMultiTurns(game) + getOtherTurns();
}
@@ -63,7 +63,7 @@ public int getEvenTurns() {
}
@Override
- public int getMultiTurns(Game game) {
+ public int getMultiTurns(IGame game) {
int turns = 0;
// turns_multi is transient, so it could be null
if (turns_multi == null) {
@@ -312,13 +312,10 @@ public static void resetInitiativeCompensation(List extends ITurnOrdered> v,
for (ITurnOrdered item : v) {
if (!item.equals(winningElement)) {
int newBonus = 0;
- boolean observer = false;
+ boolean observer = ((item instanceof Player) && ((Player) item).isObserver())
+ || ((item instanceof Team) && ((Team) item).isObserverTeam());
// Observers don't have initiative, and they don't get initiative compensation
- if (((item instanceof Player) && ((Player) item).isObserver())
- || ((item instanceof Team) && ((Team) item).isObserverTeam())) {
- observer = true;
- }
-
+
if (!item.equals(lastRoundInitWinner) && !observer) {
newBonus = item.getInitCompensationBonus() + 1;
}
@@ -340,7 +337,7 @@ public static void resetInitiativeCompensation(List extends ITurnOrdered> v,
*
* @param v
* A vector of items that need to have turns.
- * @param rerollRequests
+ * @param rerollRequests null when there should be no re-rolls
* @param bInitCompBonus
* A flag that determines whether initiative compensation bonus
* should be used: used to prevent one side getting long init win
@@ -411,7 +408,7 @@ public static void rollInitAndResolveTies(List extends ITurnOrdered> v,
/**
* This takes a Vector of TurnOrdered and generates a TurnVector.
*/
- public static TurnVectors generateTurnOrder(List extends ITurnOrdered> v, Game game) {
+ public static TurnVectors generateTurnOrder(List extends ITurnOrdered> v, IGame game) {
int[] num_even_turns = new int[v.size()];
int[] num_normal_turns = new int[v.size()];
int[] num_space_station_turns = new int[v.size()];