mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 10:07:52 +08:00
Implement hit application
This commit is contained in:
parent
232c0205b4
commit
e32b1c34ca
37
osu.Game.Rulesets.Taiko.Tests/TestSceneHitApplication.cs
Normal file
37
osu.Game.Rulesets.Taiko.Tests/TestSceneHitApplication.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Rulesets.Taiko.Objects;
|
||||||
|
using osu.Game.Rulesets.Taiko.Objects.Drawables;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Taiko.Tests
|
||||||
|
{
|
||||||
|
public class TestSceneHitApplication : HitObjectApplicationTestScene
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestApplyNewHit()
|
||||||
|
{
|
||||||
|
var hit = new DrawableHit();
|
||||||
|
|
||||||
|
AddStep("apply new hit", () => hit.Apply(PrepareObject(new Hit
|
||||||
|
{
|
||||||
|
Type = HitType.Rim,
|
||||||
|
IsStrong = false,
|
||||||
|
StartTime = 300
|
||||||
|
}), null));
|
||||||
|
|
||||||
|
AddHitObject(hit);
|
||||||
|
RemoveHitObject(hit);
|
||||||
|
|
||||||
|
AddStep("apply new hit", () => hit.Apply(PrepareObject(new Hit
|
||||||
|
{
|
||||||
|
Type = HitType.Centre,
|
||||||
|
IsStrong = true,
|
||||||
|
StartTime = 500
|
||||||
|
}), null));
|
||||||
|
|
||||||
|
AddHitObject(hit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
@ -36,29 +36,51 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
|
|||||||
|
|
||||||
private bool pressHandledThisFrame;
|
private bool pressHandledThisFrame;
|
||||||
|
|
||||||
private readonly Bindable<HitType> type;
|
private readonly Bindable<HitType> type = new Bindable<HitType>();
|
||||||
|
|
||||||
public DrawableHit(Hit hit)
|
public DrawableHit()
|
||||||
: base(hit)
|
: this(null)
|
||||||
{
|
{
|
||||||
type = HitObject.TypeBindable.GetBoundCopy();
|
|
||||||
FillMode = FillMode.Fit;
|
|
||||||
|
|
||||||
updateActionsFromType();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
public DrawableHit([CanBeNull] Hit hit)
|
||||||
private void load()
|
: base(hit)
|
||||||
{
|
{
|
||||||
|
FillMode = FillMode.Fit;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnApply()
|
||||||
|
{
|
||||||
|
type.BindTo(HitObject.TypeBindable);
|
||||||
type.BindValueChanged(_ =>
|
type.BindValueChanged(_ =>
|
||||||
{
|
{
|
||||||
updateActionsFromType();
|
updateActionsFromType();
|
||||||
|
|
||||||
// will overwrite samples, should only be called on change.
|
// will overwrite samples, should only be called on subsequent changes
|
||||||
|
// after the initial application.
|
||||||
updateSamplesFromTypeChange();
|
updateSamplesFromTypeChange();
|
||||||
|
|
||||||
RecreatePieces();
|
RecreatePieces();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// action update also has to happen immediately on application.
|
||||||
|
updateActionsFromType();
|
||||||
|
|
||||||
|
base.OnApply();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnFree()
|
||||||
|
{
|
||||||
|
base.OnFree();
|
||||||
|
|
||||||
|
type.UnbindFrom(HitObject.TypeBindable);
|
||||||
|
type.UnbindEvents();
|
||||||
|
|
||||||
|
UnproxyContent();
|
||||||
|
|
||||||
|
HitActions = null;
|
||||||
|
HitAction = null;
|
||||||
|
validActionPressed = pressHandledThisFrame = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HitSampleInfo[] getRimSamples() => HitObject.Samples.Where(s => s.Name == HitSampleInfo.HIT_CLAP || s.Name == HitSampleInfo.HIT_WHISTLE).ToArray();
|
private HitSampleInfo[] getRimSamples() => HitObject.Samples.Where(s => s.Name == HitSampleInfo.HIT_CLAP || s.Name == HitSampleInfo.HIT_WHISTLE).ToArray();
|
||||||
|
Loading…
Reference in New Issue
Block a user