1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-16 05:02:56 +08:00
osu-lazer/osu.Desktop.VisualTests/Tests/TestCaseHitObjects.cs

163 lines
5.3 KiB
C#
Raw Normal View History

// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using OpenTK;
2017-03-14 17:46:34 +08:00
using OpenTK.Graphics;
using osu.Framework.Configuration;
2017-03-14 17:46:34 +08:00
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.UserInterface;
2017-03-28 20:03:34 +08:00
using osu.Framework.Testing;
2017-03-14 17:46:34 +08:00
using osu.Framework.Timing;
2017-04-18 15:05:58 +08:00
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Osu.Judgements;
using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Rulesets.Osu.Objects.Drawables;
2017-03-14 17:46:34 +08:00
using System.Collections.Generic;
namespace osu.Desktop.VisualTests.Tests
{
2017-03-07 09:59:19 +08:00
internal class TestCaseHitObjects : TestCase
{
private readonly FramedClock framedClock;
2017-03-07 09:59:19 +08:00
private bool auto;
public TestCaseHitObjects()
{
var rateAdjustClock = new StopwatchClock(true);
framedClock = new FramedClock(rateAdjustClock);
playbackSpeed.ValueChanged += delegate { rateAdjustClock.Rate = playbackSpeed.Value; };
}
2017-03-07 09:59:19 +08:00
private HitObjectType mode = HitObjectType.Slider;
private readonly BindableNumber<double> playbackSpeed = new BindableDouble(0.5) { MinValue = 0, MaxValue = 1 };
private Container playfieldContainer;
private Container approachContainer;
private void load(HitObjectType mode)
{
this.mode = mode;
switch (mode)
{
case HitObjectType.Circle:
const int count = 10;
for (int i = 0; i < count; i++)
{
var h = new HitCircle
{
StartTime = framedClock.CurrentTime + 600 + i * 80,
Position = new Vector2((i - count / 2) * 14),
};
add(new DrawableHitCircle(h));
}
break;
case HitObjectType.Slider:
add(new DrawableSlider(new Slider
{
StartTime = framedClock.CurrentTime + 600,
ControlPoints = new List<Vector2>
{
new Vector2(-200, 0),
new Vector2(400, 0),
},
Distance = 400,
Position = new Vector2(-200, 0),
Velocity = 1,
TickDistance = 100,
}));
break;
case HitObjectType.Spinner:
add(new DrawableSpinner(new Spinner
{
StartTime = framedClock.CurrentTime + 600,
EndTime = framedClock.CurrentTime + 1600,
Position = new Vector2(0, 0),
}));
break;
}
}
public override void Reset()
{
base.Reset();
playbackSpeed.TriggerChange();
2017-03-31 16:55:07 +08:00
AddStep(@"circles", () => load(HitObjectType.Circle));
AddStep(@"slider", () => load(HitObjectType.Slider));
AddStep(@"spinner", () => load(HitObjectType.Spinner));
2017-03-31 16:55:07 +08:00
AddToggleStep(@"auto", state => { auto = state; load(mode); });
2017-04-10 16:10:15 +08:00
BasicSliderBar<double> sliderBar;
2017-03-31 16:55:07 +08:00
Add(new Container
{
2017-03-31 16:55:07 +08:00
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
AutoSizeAxes = Axes.Both,
Children = new Drawable[]
{
new SpriteText { Text = "Playback Speed" },
2017-04-10 16:10:15 +08:00
sliderBar = new BasicSliderBar<double>
2017-03-31 16:55:07 +08:00
{
Width = 150,
Height = 10,
SelectionColor = Color4.Orange,
}
}
});
2016-11-02 14:37:45 +08:00
2017-04-10 16:10:15 +08:00
sliderBar.Current.BindTo(playbackSpeed);
framedClock.ProcessFrame();
var clockAdjustContainer = new Container
{
RelativeSizeAxes = Axes.Both,
Clock = framedClock,
Children = new[]
{
playfieldContainer = new Container { RelativeSizeAxes = Axes.Both },
approachContainer = new Container { RelativeSizeAxes = Axes.Both }
}
};
Add(clockAdjustContainer);
load(mode);
}
2017-03-07 09:59:19 +08:00
private int depth;
2017-03-15 20:48:01 +08:00
private void add(DrawableOsuHitObject h)
{
h.Anchor = Anchor.Centre;
h.Depth = depth++;
if (auto)
{
h.State = ArmedState.Hit;
h.Judgement = new OsuJudgement { Result = HitResult.Hit };
}
playfieldContainer.Add(h);
var proxyable = h as IDrawableHitObjectWithProxiedApproach;
if (proxyable != null)
approachContainer.Add(proxyable.ProxiedLayer.CreateProxy());
}
2017-03-20 12:10:24 +08:00
private enum HitObjectType
{
Circle,
Slider,
Spinner
}
}
}