Skip to content

Commit

Permalink
android apply remote slot state
Browse files Browse the repository at this point in the history
  • Loading branch information
paulwedeck committed Oct 21, 2021
1 parent 782cf20 commit ca10ede
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;

import java.util.stream.Stream;
import java8.util.J8Arrays;
import jsettlers.common.ai.EPlayerType;
import jsettlers.common.player.ECivilisation;
Expand Down Expand Up @@ -183,6 +184,10 @@ protected static void setHumanSlotPlayerTypes(PlayerSlotPresenter playerSlotPres
playerSlotPresenter.setPlayerType(new PlayerType(EPlayerType.HUMAN));
}

protected static void setAllSlotPlayerTypes(PlayerSlotPresenter playerSlotPresenter) {
playerSlotPresenter.setPossiblePlayerTypes(Stream.of(EPlayerType.VALUES).map(PlayerType::new).toArray(PlayerType[]::new));
}

private static void setSlotCivilisations(PlayerSlotPresenter playerSlotPresenter, PlayerSetting playerSetting) {

ECivilisation[] ecivs = ECivilisation.values();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,30 @@
package jsettlers.main.android.mainmenu.gamesetup;

import java.util.Iterator;
import java.util.List;

import jsettlers.common.menu.IJoinPhaseMultiplayerGameConnector;
import jsettlers.common.menu.IMultiplayerListener;
import jsettlers.common.menu.IMultiplayerPlayer;
import jsettlers.common.menu.IMultiplayerSlot;
import jsettlers.common.menu.IStartingGame;
import jsettlers.common.utils.collections.ChangingList;
import jsettlers.common.utils.collections.IChangingListListener;
import jsettlers.logic.map.loading.MapLoader;
import jsettlers.main.android.core.AndroidPreferences;
import jsettlers.main.android.core.GameStarter;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.Civilisation;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.PlayerSlotPresenter;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.PlayerType;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.ReadyListener;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.StartPosition;
import jsettlers.main.android.mainmenu.gamesetup.playeritem.Team;

/**
* Created by Tom Pratt on 07/10/2017.
*/

public class MultiPlayerSetupViewModel extends MapSetupViewModel implements IMultiplayerListener, IChangingListListener<IMultiplayerPlayer>, ReadyListener {
public class MultiPlayerSetupViewModel extends MapSetupViewModel implements IMultiplayerListener, IChangingListListener<IMultiplayerSlot>, ReadyListener {

private final GameStarter gameStarter;
private final AndroidPreferences androidPreferences;
Expand All @@ -33,7 +39,11 @@ public MultiPlayerSetupViewModel(GameStarter gameStarter, AndroidPreferences and
this.mapLoader = mapLoader;

connector.setMultiplayerListener(this);
connector.getPlayers().setListener(this);
connector.getSlots().setListener(this);

for (PlayerSlotPresenter playerSlotPresenter : playerSlotPresenters) {
setAllSlotPlayerTypes(playerSlotPresenter);
}

updateSlots();
}
Expand Down Expand Up @@ -63,7 +73,7 @@ public void gameIsStarting(IStartingGame game) {
* ChangingListListener implementation
*/
@Override
public void listChanged(ChangingList<? extends IMultiplayerPlayer> list) {
public void listChanged(ChangingList<? extends IMultiplayerSlot> list) {
updateSlots();
if (playerSlots.getValue() != null) {
playerSlots.postValue(playerSlots.getValue());
Expand All @@ -83,18 +93,21 @@ private void updateSlots() {
List<IMultiplayerPlayer> players = connector.getPlayers().getItems();
int numberOfConnectedPlayers = players.size();

for (int i = 0; i < playerSlotPresenters.size(); i++) {
PlayerSlotPresenter playerSlotPresenter = playerSlotPresenters.get(i);

if (i < numberOfConnectedPlayers) {
setHumanSlotPlayerTypes(playerSlotPresenter);
Iterator<IMultiplayerSlot> slotIter = connector.getSlots().getItems().iterator();

for (int i = 0; i < playerSlotPresenters.size() && slotIter.hasNext(); i++) {
IMultiplayerSlot remoteSlot = slotIter.next();

IMultiplayerPlayer multiplayerPlayer = players.get(i);
playerSlotPresenter.setName(multiplayerPlayer.getName());
playerSlotPresenter.setReady(multiplayerPlayer.isReady());
PlayerSlotPresenter playerSlotPresenter = playerSlotPresenters.get(i);

IMultiplayerPlayer player = remoteSlot.getPlayer();
if (player != null) {
playerSlotPresenter.setName(player.getName());
playerSlotPresenter.setReady(player.isReady());
playerSlotPresenter.setShowReadyControl(true);

boolean isMe = multiplayerPlayer.getId().equals(androidPreferences.getPlayerId());
boolean isMe = player.getId().equals(androidPreferences.getPlayerId());

if (isMe) {
playerSlotPresenter.setControlsEnabled(true);
Expand All @@ -104,12 +117,15 @@ private void updateSlots() {
playerSlotPresenter.setReadyListener(null);
}
} else {
setComputerSlotPlayerTypes(playerSlotPresenter);
playerSlotPresenter.setName("Computer " + i);
playerSlotPresenter.setShowReadyControl(false);
playerSlotPresenter.setControlsEnabled(true);
playerSlotPresenter.setReadyListener(null);
}

playerSlotPresenter.setPlayerType(new PlayerType(remoteSlot.getType()));
playerSlotPresenter.setCivilisation(new Civilisation(remoteSlot.getCivilisation()));
playerSlotPresenter.setTeam(new Team(remoteSlot.getTeam()));
playerSlotPresenter.setStartPosition(new StartPosition(remoteSlot.getPosition()));
}
}
}

0 comments on commit ca10ede

Please sign in to comment.