mirror of
https://github.com/osukey/osukey.git
synced 2025-06-28 22:58:10 +09:00
Merge branch 'master' into iconbutton-refactor
This commit is contained in:
commit
6de100d446
@ -10,7 +10,7 @@ using osu.Game.Tests.Visual;
|
|||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mania.Testing
|
namespace osu.Game.Rulesets.Mania.Tests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
internal class TestCaseManiaHitObjects : OsuTestCase
|
internal class TestCaseManiaHitObjects : OsuTestCase
|
@ -17,7 +17,7 @@ using osu.Game.Rulesets.Objects.Drawables;
|
|||||||
using osu.Game.Rulesets.Timing;
|
using osu.Game.Rulesets.Timing;
|
||||||
using osu.Game.Tests.Visual;
|
using osu.Game.Tests.Visual;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mania.Testing
|
namespace osu.Game.Rulesets.Mania.Tests
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
internal class TestCaseManiaPlayfield : OsuTestCase
|
internal class TestCaseManiaPlayfield : OsuTestCase
|
@ -80,8 +80,8 @@
|
|||||||
<Compile Include="Objects\Note.cs" />
|
<Compile Include="Objects\Note.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="ManiaInputManager.cs" />
|
<Compile Include="ManiaInputManager.cs" />
|
||||||
<Compile Include="Testing\TestCaseManiaHitObjects.cs" />
|
<Compile Include="Tests\TestCaseManiaHitObjects.cs" />
|
||||||
<Compile Include="Testing\TestCaseManiaPlayfield.cs" />
|
<Compile Include="Tests\TestCaseManiaPlayfield.cs" />
|
||||||
<Compile Include="Timing\GravityScrollingContainer.cs" />
|
<Compile Include="Timing\GravityScrollingContainer.cs" />
|
||||||
<Compile Include="Timing\ScrollingAlgorithm.cs" />
|
<Compile Include="Timing\ScrollingAlgorithm.cs" />
|
||||||
<Compile Include="UI\Column.cs" />
|
<Compile Include="UI\Column.cs" />
|
||||||
|
@ -22,6 +22,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
|
|
||||||
public override bool RemoveWhenNotAlive => false;
|
public override bool RemoveWhenNotAlive => false;
|
||||||
|
|
||||||
|
public override bool DisplayJudgement => false;
|
||||||
|
|
||||||
public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick)
|
public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick)
|
||||||
{
|
{
|
||||||
this.sliderTick = sliderTick;
|
this.sliderTick = sliderTick;
|
||||||
|
@ -22,6 +22,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
|
|
||||||
private readonly SpinnerDisc disc;
|
private readonly SpinnerDisc disc;
|
||||||
private readonly SpinnerTicks ticks;
|
private readonly SpinnerTicks ticks;
|
||||||
|
private readonly SpinnerSpmCounter spmCounter;
|
||||||
|
|
||||||
private readonly Container mainContainer;
|
private readonly Container mainContainer;
|
||||||
|
|
||||||
@ -103,6 +104,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
spmCounter = new SpinnerSpmCounter
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Y = 120,
|
||||||
|
Alpha = 0
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,6 +165,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
protected override void Update()
|
protected override void Update()
|
||||||
{
|
{
|
||||||
disc.Tracking = OsuActionInputManager.PressedActions.Any(x => x == OsuAction.LeftButton || x == OsuAction.RightButton);
|
disc.Tracking = OsuActionInputManager.PressedActions.Any(x => x == OsuAction.LeftButton || x == OsuAction.RightButton);
|
||||||
|
if (!spmCounter.IsPresent && disc.Tracking)
|
||||||
|
spmCounter.FadeIn(TIME_FADEIN);
|
||||||
|
|
||||||
base.Update();
|
base.Update();
|
||||||
}
|
}
|
||||||
@ -167,6 +177,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
|
|||||||
|
|
||||||
circle.Rotation = disc.Rotation;
|
circle.Rotation = disc.Rotation;
|
||||||
ticks.Rotation = disc.Rotation;
|
ticks.Rotation = disc.Rotation;
|
||||||
|
spmCounter.SetRotation(disc.RotationAbsolute);
|
||||||
|
|
||||||
float relativeCircleScale = spinner.Scale * circle.DrawHeight / mainContainer.DrawHeight;
|
float relativeCircleScale = spinner.Scale * circle.DrawHeight / mainContainer.DrawHeight;
|
||||||
disc.ScaleTo(relativeCircleScale + (1 - relativeCircleScale) * Progress, 200, Easing.OutQuint);
|
disc.ScaleTo(relativeCircleScale + (1 - relativeCircleScale) * Progress, 200, Easing.OutQuint);
|
||||||
|
@ -77,7 +77,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
|||||||
private float lastAngle;
|
private float lastAngle;
|
||||||
private float currentRotation;
|
private float currentRotation;
|
||||||
public float RotationAbsolute;
|
public float RotationAbsolute;
|
||||||
|
|
||||||
private int completeTick;
|
private int completeTick;
|
||||||
|
|
||||||
private bool updateCompleteTick() => completeTick != (completeTick = (int)(RotationAbsolute / 360));
|
private bool updateCompleteTick() => completeTick != (completeTick = (int)(RotationAbsolute / 360));
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
|
||||||
|
{
|
||||||
|
public class SpinnerSpmCounter : Container
|
||||||
|
{
|
||||||
|
private readonly OsuSpriteText spmText;
|
||||||
|
|
||||||
|
public SpinnerSpmCounter()
|
||||||
|
{
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
spmText = new OsuSpriteText
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Text = @"0",
|
||||||
|
Font = @"Venera",
|
||||||
|
TextSize = 24
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Text = @"SPINS PER MINUTE",
|
||||||
|
Font = @"Venera",
|
||||||
|
TextSize = 12,
|
||||||
|
Y = 30
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private double spm;
|
||||||
|
|
||||||
|
public double SpinsPerMinute
|
||||||
|
{
|
||||||
|
get { return spm; }
|
||||||
|
private set
|
||||||
|
{
|
||||||
|
if (value == spm) return;
|
||||||
|
spm = value;
|
||||||
|
spmText.Text = Math.Truncate(value).ToString(@"#0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct RotationRecord
|
||||||
|
{
|
||||||
|
public float Rotation;
|
||||||
|
public double Time;
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly Queue<RotationRecord> records = new Queue<RotationRecord>();
|
||||||
|
private const double spm_count_duration = 595; // not using hundreds to avoid frame rounding issues
|
||||||
|
|
||||||
|
public void SetRotation(float currentRotation)
|
||||||
|
{
|
||||||
|
if (records.Count > 0)
|
||||||
|
{
|
||||||
|
var record = records.Peek();
|
||||||
|
while (Time.Current - records.Peek().Time > spm_count_duration)
|
||||||
|
record = records.Dequeue();
|
||||||
|
SpinsPerMinute = (currentRotation - record.Rotation) / (Time.Current - record.Time) * 1000 * 60 / 360;
|
||||||
|
}
|
||||||
|
|
||||||
|
records.Enqueue(new RotationRecord { Rotation = currentRotation, Time = Time.Current });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -91,6 +91,9 @@ namespace osu.Game.Rulesets.Osu.UI
|
|||||||
var osuJudgement = (OsuJudgement)judgement;
|
var osuJudgement = (OsuJudgement)judgement;
|
||||||
var osuObject = (OsuHitObject)judgedObject.HitObject;
|
var osuObject = (OsuHitObject)judgedObject.HitObject;
|
||||||
|
|
||||||
|
if (!judgedObject.DisplayJudgement)
|
||||||
|
return;
|
||||||
|
|
||||||
DrawableOsuJudgement explosion = new DrawableOsuJudgement(osuJudgement)
|
DrawableOsuJudgement explosion = new DrawableOsuJudgement(osuJudgement)
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
<Compile Include="Objects\Drawables\Pieces\RingPiece.cs" />
|
<Compile Include="Objects\Drawables\Pieces\RingPiece.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\SliderBouncer.cs" />
|
<Compile Include="Objects\Drawables\Pieces\SliderBouncer.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\SpinnerDisc.cs" />
|
<Compile Include="Objects\Drawables\Pieces\SpinnerDisc.cs" />
|
||||||
|
<Compile Include="Objects\Drawables\Pieces\SpinnerSpmCounter.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\SpinnerTicks.cs" />
|
<Compile Include="Objects\Drawables\Pieces\SpinnerTicks.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\TrianglesPiece.cs" />
|
<Compile Include="Objects\Drawables\Pieces\TrianglesPiece.cs" />
|
||||||
<Compile Include="Objects\Drawables\Pieces\SliderBall.cs" />
|
<Compile Include="Objects\Drawables\Pieces\SliderBall.cs" />
|
||||||
|
@ -21,6 +21,8 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
|
|||||||
FillMode = FillMode.Fit;
|
FillMode = FillMode.Fit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool DisplayJudgement => false;
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
@ -221,7 +221,7 @@ namespace osu.Game.Rulesets.Taiko.UI
|
|||||||
|
|
||||||
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement)
|
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement)
|
||||||
{
|
{
|
||||||
if (judgementContainer.FirstOrDefault(j => j.JudgedObject == judgedObject) == null)
|
if (judgedObject.DisplayJudgement && judgementContainer.FirstOrDefault(j => j.JudgedObject == judgedObject) == null)
|
||||||
{
|
{
|
||||||
judgementContainer.Add(new DrawableTaikoJudgement(judgedObject, judgement)
|
judgementContainer.Add(new DrawableTaikoJudgement(judgedObject, judgement)
|
||||||
{
|
{
|
||||||
|
@ -25,6 +25,11 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual Color4 AccentColour { get; set; } = Color4.Gray;
|
public virtual Color4 AccentColour { get; set; } = Color4.Gray;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether a visible judgement should be displayed when this representation is hit.
|
||||||
|
/// </summary>
|
||||||
|
public virtual bool DisplayJudgement => true;
|
||||||
|
|
||||||
protected DrawableHitObject(HitObject hitObject)
|
protected DrawableHitObject(HitObject hitObject)
|
||||||
{
|
{
|
||||||
HitObject = hitObject;
|
HitObject = hitObject;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user