149 lines
5.3 KiB
C#
149 lines
5.3 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
|
* This file is part of OpenRA, which is free software. It is made
|
|
* available to you under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation. For more information,
|
|
* see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using OpenRA.Network;
|
|
using OpenRA.Traits;
|
|
using OpenRA.Widgets;
|
|
|
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
|
{
|
|
public class LobbyMapPreviewLogic
|
|
{
|
|
[ObjectCreator.UseCtor]
|
|
internal LobbyMapPreviewLogic(Widget widget, OrderManager orderManager, LobbyLogic lobby)
|
|
{
|
|
var available = widget.GetOrNull("MAP_AVAILABLE");
|
|
if (available != null)
|
|
{
|
|
available.IsVisible = () => lobby.Map.Status == MapStatus.Available;
|
|
|
|
var preview = available.Get<MapPreviewWidget>("MAP_PREVIEW");
|
|
preview.Preview = () => lobby.Map;
|
|
preview.OnMouseDown = mi => LobbyUtils.SelectSpawnPoint(orderManager, preview, lobby.Map, mi);
|
|
preview.SpawnClients = () => LobbyUtils.GetSpawnClients(orderManager, lobby.Map);
|
|
|
|
var title = available.GetOrNull<LabelWidget>("MAP_TITLE");
|
|
if (title != null)
|
|
title.GetText = () => lobby.Map.Title;
|
|
|
|
var type = available.GetOrNull<LabelWidget>("MAP_TYPE");
|
|
if (type != null)
|
|
type.GetText = () => lobby.Map.Type;
|
|
|
|
var author = available.GetOrNull<LabelWidget>("MAP_AUTHOR");
|
|
if (author != null)
|
|
author.GetText = () => "Created by {0}".F(lobby.Map.Author);
|
|
}
|
|
|
|
var download = widget.GetOrNull("MAP_DOWNLOADABLE");
|
|
if (download != null)
|
|
{
|
|
download.IsVisible = () => lobby.Map.Status == MapStatus.DownloadAvailable;
|
|
|
|
var preview = download.Get<MapPreviewWidget>("MAP_PREVIEW");
|
|
preview.Preview = () => lobby.Map;
|
|
preview.OnMouseDown = mi => LobbyUtils.SelectSpawnPoint(orderManager, preview, lobby.Map, mi);
|
|
preview.SpawnClients = () => LobbyUtils.GetSpawnClients(orderManager, lobby.Map);
|
|
|
|
var title = download.GetOrNull<LabelWidget>("MAP_TITLE");
|
|
if (title != null)
|
|
title.GetText = () => lobby.Map.Title;
|
|
|
|
var type = download.GetOrNull<LabelWidget>("MAP_TYPE");
|
|
if (type != null)
|
|
type.GetText = () => lobby.Map.Type;
|
|
|
|
var author = download.GetOrNull<LabelWidget>("MAP_AUTHOR");
|
|
if (author != null)
|
|
author.GetText = () => "Created by {0}".F(lobby.Map.Author);
|
|
|
|
var install = download.GetOrNull<ButtonWidget>("MAP_INSTALL");
|
|
if (install != null)
|
|
install.OnClick = () => lobby.Map.Install();
|
|
}
|
|
|
|
var progress = widget.GetOrNull("MAP_PROGRESS");
|
|
if (progress != null)
|
|
{
|
|
progress.IsVisible = () => lobby.Map.Status != MapStatus.Available && lobby.Map.Status != MapStatus.DownloadAvailable;
|
|
|
|
var preview = progress.Get<MapPreviewWidget>("MAP_PREVIEW");
|
|
preview.Preview = () => lobby.Map;
|
|
preview.OnMouseDown = mi => LobbyUtils.SelectSpawnPoint(orderManager, preview, lobby.Map, mi);
|
|
preview.SpawnClients = () => LobbyUtils.GetSpawnClients(orderManager, lobby.Map);
|
|
|
|
var title = progress.GetOrNull<LabelWidget>("MAP_TITLE");
|
|
if (title != null)
|
|
title.GetText = () => lobby.Map.Title;
|
|
|
|
var type = progress.GetOrNull<LabelWidget>("MAP_TYPE");
|
|
if (type != null)
|
|
type.GetText = () => lobby.Map.Type;
|
|
|
|
var statusSearching = progress.GetOrNull("MAP_STATUS_SEARCHING");
|
|
if (statusSearching != null)
|
|
statusSearching.IsVisible = () => lobby.Map.Status == MapStatus.Searching;
|
|
|
|
var statusUnavailable = progress.GetOrNull("MAP_STATUS_UNAVAILABLE");
|
|
if (statusUnavailable != null)
|
|
statusUnavailable.IsVisible = () => lobby.Map.Status == MapStatus.Unavailable;
|
|
|
|
var statusError = progress.GetOrNull("MAP_STATUS_ERROR");
|
|
if (statusError != null)
|
|
statusError.IsVisible = () => lobby.Map.Status == MapStatus.DownloadError;
|
|
|
|
var statusDownloading = progress.GetOrNull<LabelWidget>("MAP_STATUS_DOWNLOADING");
|
|
if (statusDownloading != null)
|
|
{
|
|
statusDownloading.IsVisible = () => lobby.Map.Status == MapStatus.Downloading;
|
|
statusDownloading.GetText = () =>
|
|
{
|
|
if (lobby.Map.DownloadBytes == 0)
|
|
return "Connecting...";
|
|
|
|
// Server does not provide the total file length
|
|
if (lobby.Map.DownloadPercentage == 0)
|
|
return "Downloading {0} kB".F(lobby.Map.DownloadBytes / 1024);
|
|
|
|
return "Downloading {0} kB ({1}%)".F(lobby.Map.DownloadBytes / 1024, lobby.Map.DownloadPercentage);
|
|
};
|
|
}
|
|
|
|
var retry = progress.GetOrNull<ButtonWidget>("MAP_RETRY");
|
|
if (retry != null)
|
|
{
|
|
retry.IsVisible = () => lobby.Map.Status == MapStatus.DownloadError || lobby.Map.Status == MapStatus.Unavailable;
|
|
retry.OnClick = () =>
|
|
{
|
|
if (lobby.Map.Status == MapStatus.DownloadError)
|
|
lobby.Map.Install();
|
|
else if (lobby.Map.Status == MapStatus.Unavailable)
|
|
Game.modData.MapCache.QueryRemoteMapDetails(new [] { lobby.Map.Uid });
|
|
};
|
|
|
|
retry.GetText = () => lobby.Map.Status == MapStatus.DownloadError ? "Retry Install" : "Retry Search";
|
|
}
|
|
|
|
var progressbar = progress.GetOrNull<ProgressBarWidget>("MAP_PROGRESSBAR");
|
|
if (progressbar != null)
|
|
{
|
|
progressbar.IsIndeterminate = () => lobby.Map.DownloadPercentage == 0;
|
|
progressbar.GetPercentage = () => lobby.Map.DownloadPercentage;
|
|
progressbar.IsVisible = () => !retry.IsVisible();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|