1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-13 05:53:10 +08:00

Add explosion rings.

This commit is contained in:
smoogipooo 2017-03-21 15:54:57 +09:00
parent 9b5cb7ec23
commit 4c398b106d
4 changed files with 144 additions and 10 deletions

View File

@ -1,7 +1,11 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.MathUtils;
using osu.Framework.Screens.Testing; using osu.Framework.Screens.Testing;
using osu.Game.Modes.Objects.Drawables;
using osu.Game.Modes.Taiko.Judgements;
using osu.Game.Modes.Taiko.Objects;
using osu.Game.Modes.Taiko.UI; using osu.Game.Modes.Taiko.UI;
namespace osu.Desktop.VisualTests.Tests namespace osu.Desktop.VisualTests.Tests
@ -10,14 +14,67 @@ namespace osu.Desktop.VisualTests.Tests
{ {
public override string Description => "Taiko playfield"; public override string Description => "Taiko playfield";
private TaikoPlayfield playfield;
public override void Reset() public override void Reset()
{ {
base.Reset(); base.Reset();
Add(new TaikoPlayfield AddButton("Hit!", addHitJudgement);
AddButton("Miss :(", addMissJudgement);
Add(playfield = new TaikoPlayfield
{ {
Y = 200 Y = 200
}); });
} }
private void addHitJudgement()
{
TaikoScoreResult score = RNG.Next(2) == 0 ? TaikoScoreResult.Good : TaikoScoreResult.Great;
playfield.OnJudgement(new DrawableTestHit(new TaikoHitObject())
{
Judgement = new TaikoJudgementInfo
{
Result = HitResult.Hit,
Score = score,
TimeOffset = 0,
ComboAtHit = 1
}
});
}
private void addMissJudgement()
{
playfield.OnJudgement(new DrawableTestHit(new TaikoHitObject())
{
Judgement = new TaikoJudgementInfo
{
Result = HitResult.Miss,
TimeOffset = 0,
ComboAtHit = 0
}
});
}
private class DrawableTestHit : DrawableHitObject<TaikoHitObject, TaikoJudgementInfo>
{
public DrawableTestHit(TaikoHitObject hitObject)
: base(hitObject)
{
}
protected override TaikoJudgementInfo CreateJudgementInfo() => new TaikoJudgementInfo();
protected override void UpdateState(ArmedState state)
{
}
protected override void Update()
{
// Doesn't move
}
}
} }
} }

View File

@ -0,0 +1,69 @@
using OpenTK;
using OpenTK.Graphics;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Transforms;
using osu.Game.Graphics;
using osu.Game.Modes.Taiko.Judgements;
using osu.Game.Modes.Taiko.Objects;
namespace osu.Game.Modes.Taiko.UI
{
internal class RingExplosion : CircularContainer
{
public TaikoScoreResult ScoreResult;
private Box innerFill;
public RingExplosion()
{
Size = new Vector2(TaikoHitObject.CIRCLE_RADIUS * 2);
Anchor = Anchor.Centre;
Origin = Anchor.Centre;
RelativePositionAxes = Axes.Both;
BorderColour = Color4.White;
BorderThickness = 1;
Alpha = 0.15f;
Children = new[]
{
innerFill = new Box
{
RelativeSizeAxes = Axes.Both,
}
};
}
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
switch (ScoreResult)
{
default:
break;
case TaikoScoreResult.Good:
innerFill.Colour = colours.Green;
break;
case TaikoScoreResult.Great:
innerFill.Colour = colours.Blue;
break;
}
}
protected override void LoadComplete()
{
base.LoadComplete();
ScaleTo(5f, 1000, EasingTypes.OutQuint);
FadeOut(500);
Expire();
}
}
}

View File

@ -47,7 +47,7 @@ namespace osu.Game.Modes.Taiko.UI
protected override Container<Drawable> Content => hitObjectContainer; protected override Container<Drawable> Content => hitObjectContainer;
private HitTarget hitTarget; private HitTarget hitTarget;
//private Container<ExplodingRing> explosionRingContainer; private Container<RingExplosion> ringExplosionContainer;
//private Container<DrawableBarLine> barLineContainer; //private Container<DrawableBarLine> barLineContainer;
//private Container<JudgementText> judgementContainer; //private Container<JudgementText> judgementContainer;
@ -103,14 +103,14 @@ namespace osu.Game.Modes.Taiko.UI
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Children = new Drawable[] Children = new Drawable[]
{ {
//explosionRingContainer = new Container<ExplodingRing> ringExplosionContainer = new Container<RingExplosion>
//{ {
// Anchor = Anchor.CentreLeft, Anchor = Anchor.CentreLeft,
// Origin = Anchor.Centre, Origin = Anchor.Centre,
// Size = new Vector2(TaikoHitObject.CIRCLE_RADIUS * 2), Size = new Vector2(TaikoHitObject.CIRCLE_RADIUS * 2),
// Scale = new Vector2(PLAYFIELD_SCALE), Scale = new Vector2(PLAYFIELD_SCALE),
// BlendingMode = BlendingMode.Additive BlendingMode = BlendingMode.Additive
//}, },
} }
}, },
//barLineContainer = new Container<DrawableBarLine> //barLineContainer = new Container<DrawableBarLine>
@ -196,6 +196,13 @@ namespace osu.Game.Modes.Taiko.UI
public override void OnJudgement(DrawableHitObject<TaikoHitObject, TaikoJudgementInfo> judgedObject) public override void OnJudgement(DrawableHitObject<TaikoHitObject, TaikoJudgementInfo> judgedObject)
{ {
if (judgedObject.Judgement.Result == HitResult.Hit)
{
ringExplosionContainer.Add(new RingExplosion
{
ScoreResult = judgedObject.Judgement.Score
});
}
} }
} }
} }

View File

@ -58,6 +58,7 @@
<Compile Include="TaikoScoreProcessor.cs" /> <Compile Include="TaikoScoreProcessor.cs" />
<Compile Include="UI\HitTarget.cs" /> <Compile Include="UI\HitTarget.cs" />
<Compile Include="UI\InputDrum.cs" /> <Compile Include="UI\InputDrum.cs" />
<Compile Include="UI\RingExplosion.cs" />
<Compile Include="UI\TaikoHitRenderer.cs" /> <Compile Include="UI\TaikoHitRenderer.cs" />
<Compile Include="UI\TaikoPlayfield.cs" /> <Compile Include="UI\TaikoPlayfield.cs" />
<Compile Include="TaikoRuleset.cs" /> <Compile Include="TaikoRuleset.cs" />