Merge branch 'improved-loading-animation' into nuget-update

This commit is contained in:
Dean Herbert 2017-06-13 15:50:21 +09:00
commit 19236dcd1e
7 changed files with 85 additions and 27 deletions

View File

@ -1,15 +1,48 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using OpenTK;
namespace osu.Game.Graphics.UserInterface
{
public class LoadingAnimation : SpriteText
public class LoadingAnimation : VisibilityContainer
{
private readonly TextAwesome spinner;
public LoadingAnimation()
{
Text = "Loading";
Size = new Vector2(20);
Anchor = Anchor.Centre;
Origin = Anchor.Centre;
Children = new Drawable[]
{
spinner = new TextAwesome
{
TextSize = 20,
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Icon = FontAwesome.fa_spinner
}
};
}
protected override void LoadComplete()
{
base.LoadComplete();
spinner.RotateTo(360, 2000);
using (spinner.BeginDelayedSequence(2000))
spinner.Loop();
}
private const float transition_duration = 500;
protected override void PopIn() => FadeIn(transition_duration * 5, EasingTypes.OutQuint);
protected override void PopOut() => FadeOut(transition_duration, EasingTypes.OutQuint);
}
}
}

View File

@ -12,7 +12,6 @@
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Threading;
using osu.Game.Graphics.Sprites;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
using osu.Game.Online.Chat;
@ -33,7 +32,9 @@ public class ChatOverlay : FocusedOverlayContainer, IOnlineComponent
private ScheduledDelegate messageRequest;
private readonly Container currentChannelContainer;
private readonly Container<DrawableChannel> currentChannelContainer;
private readonly LoadingAnimation loading;
private readonly FocusedTextBox inputTextBox;
@ -104,7 +105,7 @@ public ChatOverlay()
{
RelativeSizeAxes = Axes.Both,
},
currentChannelContainer = new Container
currentChannelContainer = new Container<DrawableChannel>
{
RelativeSizeAxes = Axes.Both,
Padding = new MarginPadding
@ -138,7 +139,8 @@ public ChatOverlay()
HoldFocus = true,
}
}
}
},
loading = new LoadingAnimation(),
}
},
new Container
@ -274,14 +276,7 @@ private void load(APIAccess api, OsuConfigManager config, OsuColour colours)
private void initializeChannels()
{
SpriteText loading;
Add(loading = new OsuSpriteText
{
Text = @"initialising chat...",
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
TextSize = 40,
});
loading.Show();
messageRequest?.Cancel();
@ -290,9 +285,6 @@ private void initializeChannels()
{
Scheduler.Add(delegate
{
loading.FadeOut(100);
loading.Expire();
addChannel(channels.Find(c => c.Name == @"#lazer"));
addChannel(channels.Find(c => c.Name == @"#osu"));
addChannel(channels.Find(c => c.Name == @"#lobby"));
@ -336,13 +328,17 @@ protected Channel CurrentChannel
if (loaded == null)
{
currentChannelContainer.FadeOut(500, EasingTypes.OutQuint);
loading.Show();
loaded = new DrawableChannel(currentChannel);
loadedChannels.Add(loaded);
LoadComponentAsync(loaded, l =>
{
if (currentChannel.Messages.Any())
loading.Hide();
currentChannelContainer.Clear(false);
currentChannelContainer.Add(l);
currentChannelContainer.Add(loaded);
currentChannelContainer.FadeIn(500, EasingTypes.OutQuint);
});
}
@ -386,6 +382,7 @@ private void fetchInitialMessages(Channel channel)
req.Success += delegate (List<Message> messages)
{
loading.Hide();
channel.AddNewMessages(messages.ToArray());
Debug.Write("success!");
};

View File

@ -29,7 +29,7 @@ public void Push(PopupDialog dialog)
State = Visibility.Visible;
}
private void onDialogOnStateChanged(OverlayContainer dialog, Visibility v)
private void onDialogOnStateChanged(VisibilityContainer dialog, Visibility v)
{
if (v != Visibility.Hidden) return;

View File

@ -9,6 +9,7 @@
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterface;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
using osu.Game.Overlays.SearchableList;
@ -29,6 +30,8 @@ public class SocialOverlay : SearchableListOverlay<SocialTab, SocialSortCriteria
protected override SearchableListFilterControl<SocialSortCriteria, SortDirection> CreateFilterControl() => new FilterControl();
private IEnumerable<User> users;
private readonly LoadingAnimation loading;
public IEnumerable<User> Users
{
get { return users; }
@ -68,6 +71,8 @@ public SocialOverlay()
Spacing = new Vector2(10f),
},
};
Add(loading = new LoadingAnimation());
}
[BackgroundDependencyLoader]
@ -83,8 +88,14 @@ private void reloadUsers(APIAccess api)
// no this is not the correct data source, but it's something.
var request = new GetUsersRequest();
request.Success += res => Users = res.Select(e => e.User);
request.Success += res =>
{
Users = res.Select(e => e.User);
loading.Hide();
};
api.Queue(request);
loading.Show();
}
public void APIStateChanged(APIAccess api, APIState state)

View File

@ -45,7 +45,7 @@ protected override void Dispose(bool isDisposing)
stateContainer.StateChanged -= stateChanged;
}
private void stateChanged(OverlayContainer c, Visibility state)
private void stateChanged(VisibilityContainer c, Visibility state)
{
switch (state)
{

View File

@ -80,8 +80,8 @@ private void updateStats()
lookup.Success += res =>
{
if (beatmap != requestedBeatmap)
//the beatmap has been changed since we started the lookup.
return;
//the beatmap has been changed since we started the lookup.
return;
requestedBeatmap.Metrics = res;
Schedule(() => updateMetrics(res));
@ -89,6 +89,7 @@ private void updateStats()
lookup.Failure += e => updateMetrics(null);
api.Queue(lookup);
loading.Show();
}
updateMetrics(requestedBeatmap.Metrics, false);
@ -104,6 +105,9 @@ private void updateMetrics(BeatmapMetrics metrics, bool failOnMissing = true)
var hasRatings = metrics?.Ratings.Any() ?? false;
var hasRetriesFails = (metrics?.Retries.Any() ?? false) && metrics.Fails.Any();
if (failOnMissing)
loading.Hide();
if (hasRatings)
{
var ratings = metrics.Ratings.ToList();
@ -320,11 +324,13 @@ public BeatmapDetails()
}
},
},
}
},
loading = new LoadingAnimation()
};
}
private APIAccess api;
private readonly LoadingAnimation loading;
[BackgroundDependencyLoader]
private void load(OsuColour colour, APIAccess api)

View File

@ -12,6 +12,7 @@
using osu.Framework.Allocation;
using osu.Framework.Threading;
using osu.Game.Database;
using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Scoring;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests;
@ -25,6 +26,8 @@ public class Leaderboard : Container
public Action<Score> ScoreSelected;
private LoadingAnimation loading;
private IEnumerable<Score> scores;
public IEnumerable<Score> Scores
{
@ -86,6 +89,7 @@ public Leaderboard()
},
},
},
loading = new LoadingAnimation()
};
}
@ -117,6 +121,7 @@ private void load(APIAccess api)
}
private GetScoresRequest getScoresRequest;
private void updateScores()
{
if (!IsLoaded) return;
@ -126,8 +131,14 @@ private void updateScores()
if (api == null || Beatmap == null) return;
loading.Show();
getScoresRequest = new GetScoresRequest(Beatmap);
getScoresRequest.Success += r => Scores = r.Scores;
getScoresRequest.Success += r =>
{
Scores = r.Scores;
loading.Hide();
};
api.Queue(getScoresRequest);
}