/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.gui;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.google.common.collect.Lists;
import com.happydroids.droidtowers.TowerAssetManager;
import com.happydroids.droidtowers.gamestate.GameState;
import com.happydroids.droidtowers.gamestate.server.NonPlayerFriend;
import com.happydroids.droidtowers.gamestate.server.NonPlayerFriendCollection;
import com.happydroids.droidtowers.gamestate.server.PlayerFriendCollection;
import com.happydroids.droidtowers.gamestate.server.PlayerProfile;
import com.happydroids.droidtowers.gui.friends.NonPlayerFriendItem;
import com.happydroids.droidtowers.gui.friends.PlayerFriendItem;
import com.happydroids.droidtowers.platform.Display;
import com.happydroids.server.HappyDroidServiceCollection;
import com.happydroids.utils.BackgroundTask;
import java.util.List;
public class FriendsListWindow extends ScrollableTowerWindow {
private final TextureRegionDrawable facebookIcon;
private List<PlayerFriendItem> playerFriendRows;
private List<PlayerFriendItem> nonPlayerFriendRows;
private boolean playerFriendsFetched;
private boolean nonPlayerFriendsFetched;
private final GameState playerGameState;
public FriendsListWindow(Stage stage, GameState gameState) {
super("My Friends", stage);
playerGameState = gameState;
facebookIcon = TowerAssetManager.drawableFromAtlas("facebook-logo", "hud/menus.txt");
playerFriendRows = Lists.newArrayList();
nonPlayerFriendRows = Lists.newArrayList();
defaults().left().space(Display.devicePixel(6));
add(FontManager.Roboto32.makeLabel("making friends :]"));
NonPlayerFriendSearchBox friendSearchBox = new NonPlayerFriendSearchBox(this);
setStaticHeader(friendSearchBox);
new BackgroundTask() {
private PlayerFriendCollection friendCollection;
@Override
protected void execute() throws Exception {
friendCollection = new PlayerFriendCollection();
friendCollection.fetch();
}
@Override
public synchronized void afterExecute() {
processPlayerFriends(friendCollection);
}
}.run();
new BackgroundTask() {
private NonPlayerFriendCollection friendCollection;
@Override
protected void execute() throws Exception {
friendCollection = new NonPlayerFriendCollection();
friendCollection.fetch();
}
@Override
public synchronized void afterExecute() {
processNonPlayerFriends(friendCollection);
}
}.run();
}
private void processNonPlayerFriends(HappyDroidServiceCollection<NonPlayerFriend> collection) {
if (collection != null && !collection.isEmpty()) {
for (NonPlayerFriend profile : collection.getObjects()) {
PlayerFriendItem playerFriendItem = new NonPlayerFriendItem(profile, playerGameState);
playerFriendItem.createChildren(facebookIcon);
nonPlayerFriendRows.add(playerFriendItem);
}
}
nonPlayerFriendsFetched = true;
updateViewWhenFinished();
}
private void processPlayerFriends(HappyDroidServiceCollection<PlayerProfile> collection) {
playerFriendsFetched = true;
if (collection != null && !collection.isEmpty()) {
for (PlayerProfile profile : collection.getObjects()) {
PlayerFriendItem playerFriendItem = new PlayerFriendItem(profile, playerGameState);
playerFriendItem.createChildren(facebookIcon);
playerFriendRows.add(playerFriendItem);
}
}
updateViewWhenFinished();
}
private void updateViewWhenFinished() {
if (!playerFriendsFetched || !nonPlayerFriendsFetched) {
return;
}
clear();
row().fillX();
add(FontManager.Roboto24.makeLabel("Friends playing Droid Towers")).expandX();
row().fillX();
add(new HorizontalRule()).expandX();
if (!playerFriendRows.isEmpty()) {
for (PlayerFriendItem friendRow : playerFriendRows) {
row().fillX();
add(friendRow).expandX();
}
} else {
row().fillX();
add(FontManager.Roboto18.makeLabel("You should invite some of your friends to play with.")).expandX();
}
row().fillX().padTop(Display.devicePixel(32));
add(FontManager.Roboto24.makeLabel("Friends on Facebook")).expandX();
row().fillX();
add(new HorizontalRule()).expandX();
if (!nonPlayerFriendRows.isEmpty()) {
for (PlayerFriendItem friendRow : nonPlayerFriendRows) {
row().fillX();
add(friendRow).expandX();
}
} else {
row().fillX();
if (playerFriendRows.isEmpty()) {
add(FontManager.Roboto18
.makeLabel("Wow, terribly sorry to tell you this..\n\nBut you appear to have no friends.\n\n")).expandX();
} else {
add(FontManager.Roboto18.makeLabel("You have already invited everyone, thanks!")).expandX();
}
}
shoveContentUp();
content.invalidateHierarchy();
}
public List<PlayerFriendItem> getNonPlayerFriendRows() {
return nonPlayerFriendRows;
}
public List<PlayerFriendItem> getPlayerFriendRows() {
return playerFriendRows;
}
}