@Override public PlayerModel deepCopy() { PlayerModel copiedPlayerModel = new PlayerModel( this.playerId, this.name, this.hero.deepCopy(), this.deck // TODO should be a deep copy, we're just using the index in boardmodel right // now to compensate.. // oyachai: the use of the deck position index is actually an attempt to reduce memory // usage. ); copiedPlayerModel.setMana(mana); copiedPlayerModel.setMaxMana(maxMana); copiedPlayerModel.setOverload(overload); copiedPlayerModel.deckPos = deckPos; copiedPlayerModel.fatigueDamage = fatigueDamage; copiedPlayerModel.numCardsUsed = numCardsUsed; for (Minion minion : minions) { copiedPlayerModel.minions.add((Minion) (minion).deepCopy()); } for (final Card card : hand) { Card tc = card.deepCopy(); copiedPlayerModel.placeCardHand(tc); } return copiedPlayerModel; }