Merge branch 'master' into performance-calculator

This commit is contained in:
Dean Herbert 2017-11-29 18:37:07 +09:00 committed by GitHub
commit 93d7cd5a6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 41 additions and 14 deletions

View File

@ -9,17 +9,17 @@ cache:
- inspectcode -> appveyor.yml - inspectcode -> appveyor.yml
- packages -> **\packages.config - packages -> **\packages.config
install: install:
- cmd: git submodule update --init --recursive - cmd: git submodule update --init --recursive --depth=5
- cmd: choco install resharper-clt -y - cmd: choco install resharper-clt -y
- cmd: choco install nvika -y - cmd: choco install nvika -y
- cmd: appveyor DownloadFile https://github.com/peppy/CodeFileSanity/releases/download/v0.2.3/CodeFileSanity.exe - cmd: appveyor DownloadFile https://github.com/peppy/CodeFileSanity/releases/download/v0.2.3/CodeFileSanity.exe
before_build: before_build:
- cmd: CodeFileSanity.exe - cmd: CodeFileSanity.exe
- cmd: nuget restore - cmd: nuget restore -verbosity quiet
build: build:
project: osu.sln project: osu.sln
parallel: true parallel: true
verbosity: minimal verbosity: minimal
after_build: after_build:
- cmd: inspectcode /o="inspectcodereport.xml" /caches-home="inspectcode" osu.sln - cmd: inspectcode --o="inspectcodereport.xml" --projects:osu.Game* --caches-home="inspectcode" osu.sln > NUL
- cmd: NVika parsereport "inspectcodereport.xml" --treatwarningsaserrors - cmd: NVika parsereport "inspectcodereport.xml" --treatwarningsaserrors

@ -1 +1 @@
Subproject commit d92cec764538da2e7ed95bfb566f6bc81a9667c8 Subproject commit 4fc866eee3803f88b155150e32e021b9c21e647f

View File

@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mania.Replays
public override Replay Generate() public override Replay Generate()
{ {
// Todo: Realistically this shouldn't be needed, but the first frame is skipped with the way replays are currently handled // Todo: Realistically this shouldn't be needed, but the first frame is skipped with the way replays are currently handled
Replay.Frames.Add(new ReplayFrame(-100000, null, null, ReplayButtonState.None)); Replay.Frames.Add(new ManiaReplayFrame(-100000, 0));
double[] holdEndTimes = new double[availableColumns]; double[] holdEndTimes = new double[availableColumns];
for (int i = 0; i < availableColumns; i++) for (int i = 0; i < availableColumns; i++)
@ -60,7 +60,7 @@ namespace osu.Game.Rulesets.Mania.Replays
activeColumns |= 1 << obj.Column; activeColumns |= 1 << obj.Column;
} }
Replay.Frames.Add(new ReplayFrame(groupTime, activeColumns, null, ReplayButtonState.None)); Replay.Frames.Add(new ManiaReplayFrame(groupTime, activeColumns));
// Add the release frames. We can't do this with the loop above because we need activeColumns to be fully populated // Add the release frames. We can't do this with the loop above because we need activeColumns to be fully populated
foreach (var obj in objGroup.GroupBy(h => (h as IHasEndTime)?.EndTime ?? h.StartTime + release_delay).OrderBy(h => h.Key)) foreach (var obj in objGroup.GroupBy(h => (h as IHasEndTime)?.EndTime ?? h.StartTime + release_delay).OrderBy(h => h.Key))
@ -74,14 +74,15 @@ namespace osu.Game.Rulesets.Mania.Replays
activeColumnsAtEnd |= 1 << i; activeColumnsAtEnd |= 1 << i;
} }
Replay.Frames.Add(new ReplayFrame(groupEndTime, activeColumnsAtEnd, 0, ReplayButtonState.None)); Replay.Frames.Add(new ManiaReplayFrame(groupEndTime, activeColumnsAtEnd));
} }
} }
Replay.Frames = Replay.Frames Replay.Frames = Replay.Frames
// Pick the maximum activeColumns for all frames at the same time // Pick the maximum activeColumns for all frames at the same time
.GroupBy(f => f.Time) .GroupBy(f => f.Time)
.Select(g => new ReplayFrame(g.First().Time, maxMouseX(g), 0, ReplayButtonState.None)) .Select(g => new ManiaReplayFrame(g.First().Time, maxMouseX(g)))
.Cast<ReplayFrame>()
// The addition of release frames above maybe result in unordered frames, but we need them ordered // The addition of release frames above maybe result in unordered frames, but we need them ordered
.OrderBy(f => f.Time) .OrderBy(f => f.Time)
.ToList(); .ToList();
@ -94,7 +95,7 @@ namespace osu.Game.Rulesets.Mania.Replays
/// </summary> /// </summary>
/// <param name="group">The <see cref="ReplayFrame"/> grouping to search.</param> /// <param name="group">The <see cref="ReplayFrame"/> grouping to search.</param>
/// <returns>The maximum <see cref="ReplayFrame.MouseX"/> by count of bits.</returns> /// <returns>The maximum <see cref="ReplayFrame.MouseX"/> by count of bits.</returns>
private float maxMouseX(IGrouping<double, ReplayFrame> group) private int maxMouseX(IGrouping<double, ReplayFrame> group)
{ {
int currentCount = -1; int currentCount = -1;
int currentMax = 0; int currentMax = 0;

View File

@ -0,0 +1,17 @@
// 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.Game.Rulesets.Replays;
namespace osu.Game.Rulesets.Mania.Replays
{
public class ManiaReplayFrame : ReplayFrame
{
public override bool IsImportant => MouseX > 0;
public ManiaReplayFrame(double time, int activeColumns)
: base(time, activeColumns, null, ReplayButtonState.None)
{
}
}
}

View File

@ -72,6 +72,7 @@
<Compile Include="Objects\Types\IHasColumn.cs" /> <Compile Include="Objects\Types\IHasColumn.cs" />
<Compile Include="Replays\ManiaAutoGenerator.cs" /> <Compile Include="Replays\ManiaAutoGenerator.cs" />
<Compile Include="Replays\ManiaFramedReplayInputHandler.cs" /> <Compile Include="Replays\ManiaFramedReplayInputHandler.cs" />
<Compile Include="Replays\ManiaReplayFrame.cs" />
<Compile Include="Scoring\ManiaScoreProcessor.cs" /> <Compile Include="Scoring\ManiaScoreProcessor.cs" />
<Compile Include="Objects\BarLine.cs" /> <Compile Include="Objects\BarLine.cs" />
<Compile Include="Objects\HoldNote.cs" /> <Compile Include="Objects\HoldNote.cs" />

View File

@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Replays
{ {
public Vector2 Position => new Vector2(MouseX ?? 0, MouseY ?? 0); public Vector2 Position => new Vector2(MouseX ?? 0, MouseY ?? 0);
public bool IsImportant => MouseX.HasValue && MouseY.HasValue && (MouseLeft || MouseRight); public virtual bool IsImportant => MouseX.HasValue && MouseY.HasValue && (MouseLeft || MouseRight);
public float? MouseX; public float? MouseX;
public float? MouseY; public float? MouseY;

View File

@ -50,7 +50,11 @@ namespace osu.Game.Tests.Visual
string instantiation = ruleset?.AssemblyQualifiedName; string instantiation = ruleset?.AssemblyQualifiedName;
foreach (var r in rulesets.AvailableRulesets.Where(rs => instantiation == null || rs.InstantiationInfo == instantiation)) foreach (var r in rulesets.AvailableRulesets.Where(rs => instantiation == null || rs.InstantiationInfo == instantiation))
AddStep(r.Name, () => loadPlayerFor(r)); {
Player p = null;
AddStep(r.Name, () => p = loadPlayerFor(r));
AddUntilStep(() => p.IsLoaded);
}
} }
protected virtual Beatmap CreateBeatmap() protected virtual Beatmap CreateBeatmap()
@ -64,7 +68,7 @@ namespace osu.Game.Tests.Visual
return beatmap; return beatmap;
} }
private void loadPlayerFor(RulesetInfo r) private Player loadPlayerFor(RulesetInfo r)
{ {
var beatmap = CreateBeatmap(); var beatmap = CreateBeatmap();
@ -78,7 +82,11 @@ namespace osu.Game.Tests.Visual
if (Player != null) if (Player != null)
Remove(Player); Remove(Player);
LoadScreen(CreatePlayer(working, instance)); var player = CreatePlayer(working, instance);
LoadComponentAsync(player, LoadScreen);
return player;
} }
protected virtual Player CreatePlayer(WorkingBeatmap beatmap, Ruleset ruleset) => new Player protected virtual Player CreatePlayer(WorkingBeatmap beatmap, Ruleset ruleset) => new Player