/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.scenes; import com.happydroids.droidtowers.entities.GameObject; import com.happydroids.droidtowers.gamestate.GameState; import com.happydroids.droidtowers.gamestate.server.CloudGameSave; import com.happydroids.droidtowers.gamestate.server.FriendCloudGameSave; import com.happydroids.droidtowers.gamestate.server.FriendCloudGameSaveCollection; import com.happydroids.droidtowers.gamestate.server.TowerGameService; import com.happydroids.droidtowers.gui.Dialog; import com.happydroids.droidtowers.gui.OnClickCallback; import com.happydroids.droidtowers.scenes.components.ProgressPanel; import com.happydroids.droidtowers.scenes.components.SceneManager; import com.happydroids.utils.BackgroundTask; public class ViewNeighborSplashScene extends SplashScene { private GameObject droid; private ViewNeighborSplashScene.FetchNeighborsList fetchNeighborsList; private GameState playerGameState; @Override public void create(Object... args) { super.create(args); progressPanel.remove(); progressPanel = null; progressPanel = new ProgressPanel(); progressPanel.setProgress(0); center(progressPanel); addActor(progressPanel); playerGameState = (GameState) args[0]; fetchNeighborsList = new FetchNeighborsList(); fetchNeighborsList.run(); } private class FetchNeighborsList extends BackgroundTask { public boolean fetchWasSuccessful; @Override protected void execute() throws Exception { progressPanel.setProgress(10); if (TowerGameService.instance().isAuthenticated()) { CloudGameSave cloudGameSave = playerGameState.getCloudGameSave(); if (!cloudGameSave.isSaved()) { playerGameState.saveGame(true); } else { cloudGameSave.fetch(); } progressPanel.setProgress(33); FriendCloudGameSaveCollection neighborGameSaves = cloudGameSave.getNeighborGameSaves(); if (!neighborGameSaves.isEmpty()) { int progressPerFetch = 66 / neighborGameSaves.size(); int progressSoFar = 33; for (FriendCloudGameSave friendGameSave : neighborGameSaves.getObjects()) { friendGameSave.fetch(); progressSoFar += progressPerFetch; progressPanel.setProgress(progressSoFar); } } fetchWasSuccessful = true; progressPanel.setProgress(100); } } @Override public synchronized void afterExecute() { progressPanel.setProgress(100); if (fetchWasSuccessful) { SceneManager.popScene(); SceneManager.pushScene(ViewNeighborScene.class, playerGameState); } else { displayConnectionErrorDialog(); } } } private void displayConnectionErrorDialog() { new Dialog() .setTitle("Connection Failed") .setMessage("Sorry, but we were not able to fetch your neighborhood.\n\nPlease check your internet connection and try again.") .addButton("Okay", new OnClickCallback() { @Override public void onClick(Dialog dialog) { dialog.dismiss(); } }) .setDismissCallback(new Runnable() { @Override public void run() { SceneManager.popScene(); } }) .show(); } }