mirror of
https://github.com/osukey/osukey.git
synced 2025-07-01 16:29:58 +09:00
Remove ScaleContainer and flatten the Drawable tree of catch DHO
This commit is contained in:
@ -11,13 +11,13 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
{
|
{
|
||||||
public class TestSceneFruitRandomness : OsuTestScene
|
public class TestSceneFruitRandomness : OsuTestScene
|
||||||
{
|
{
|
||||||
private readonly TestDrawableFruit drawableFruit;
|
private readonly DrawableFruit drawableFruit;
|
||||||
private readonly TestDrawableBanana drawableBanana;
|
private readonly DrawableBanana drawableBanana;
|
||||||
|
|
||||||
public TestSceneFruitRandomness()
|
public TestSceneFruitRandomness()
|
||||||
{
|
{
|
||||||
drawableFruit = new TestDrawableFruit(new Fruit());
|
drawableFruit = new DrawableFruit(new Fruit());
|
||||||
drawableBanana = new TestDrawableBanana(new Banana());
|
drawableBanana = new DrawableBanana(new Banana());
|
||||||
|
|
||||||
Add(new TestDrawableCatchHitObjectSpecimen(drawableFruit) { X = -200 });
|
Add(new TestDrawableCatchHitObjectSpecimen(drawableFruit) { X = -200 });
|
||||||
Add(new TestDrawableCatchHitObjectSpecimen(drawableBanana));
|
Add(new TestDrawableCatchHitObjectSpecimen(drawableBanana));
|
||||||
@ -44,9 +44,9 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
{
|
{
|
||||||
drawableFruit.HitObject.StartTime = drawableBanana.HitObject.StartTime = initial_start_time;
|
drawableFruit.HitObject.StartTime = drawableBanana.HitObject.StartTime = initial_start_time;
|
||||||
|
|
||||||
fruitRotation = drawableFruit.InnerRotation;
|
fruitRotation = drawableFruit.Rotation;
|
||||||
bananaRotation = drawableBanana.InnerRotation;
|
bananaRotation = drawableBanana.Rotation;
|
||||||
bananaScale = drawableBanana.InnerScale;
|
bananaScale = drawableBanana.Scale.X;
|
||||||
bananaColour = drawableBanana.AccentColour.Value;
|
bananaColour = drawableBanana.AccentColour.Value;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -55,9 +55,9 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
drawableFruit.HitObject.StartTime = drawableBanana.HitObject.StartTime = another_start_time;
|
drawableFruit.HitObject.StartTime = drawableBanana.HitObject.StartTime = another_start_time;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("fruit rotation is changed", () => drawableFruit.InnerRotation != fruitRotation);
|
AddAssert("fruit rotation is changed", () => drawableFruit.Rotation != fruitRotation);
|
||||||
AddAssert("banana rotation is changed", () => drawableBanana.InnerRotation != bananaRotation);
|
AddAssert("banana rotation is changed", () => drawableBanana.Rotation != bananaRotation);
|
||||||
AddAssert("banana scale is changed", () => drawableBanana.InnerScale != bananaScale);
|
AddAssert("banana scale is changed", () => drawableBanana.Scale.X != bananaScale);
|
||||||
AddAssert("banana colour is changed", () => drawableBanana.AccentColour.Value != bananaColour);
|
AddAssert("banana colour is changed", () => drawableBanana.AccentColour.Value != bananaColour);
|
||||||
|
|
||||||
AddStep("reset start time", () =>
|
AddStep("reset start time", () =>
|
||||||
@ -66,31 +66,10 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("rotation and scale restored", () =>
|
AddAssert("rotation and scale restored", () =>
|
||||||
drawableFruit.InnerRotation == fruitRotation &&
|
drawableFruit.Rotation == fruitRotation &&
|
||||||
drawableBanana.InnerRotation == bananaRotation &&
|
drawableBanana.Rotation == bananaRotation &&
|
||||||
drawableBanana.InnerScale == bananaScale &&
|
drawableBanana.Scale.X == bananaScale &&
|
||||||
drawableBanana.AccentColour.Value == bananaColour);
|
drawableBanana.AccentColour.Value == bananaColour);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestDrawableFruit : DrawableFruit
|
|
||||||
{
|
|
||||||
public float InnerRotation => ScaleContainer.Rotation;
|
|
||||||
|
|
||||||
public TestDrawableFruit(Fruit h)
|
|
||||||
: base(h)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class TestDrawableBanana : DrawableBanana
|
|
||||||
{
|
|
||||||
public float InnerRotation => ScaleContainer.Rotation;
|
|
||||||
public float InnerScale => ScaleContainer.Scale.X;
|
|
||||||
|
|
||||||
public TestDrawableBanana(Banana h)
|
|
||||||
: base(h)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,9 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
ScaleContainer.Child = new SkinnableDrawable(
|
AddInternal(new SkinnableDrawable(
|
||||||
new CatchSkinComponent(CatchSkinComponents.Banana),
|
new CatchSkinComponent(CatchSkinComponents.Banana),
|
||||||
_ => new BananaPiece());
|
_ => new BananaPiece()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
@ -44,10 +44,10 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
const float end_scale = 0.6f;
|
const float end_scale = 0.6f;
|
||||||
const float random_scale_range = 1.6f;
|
const float random_scale_range = 1.6f;
|
||||||
|
|
||||||
ScaleContainer.ScaleTo(HitObject.Scale * (end_scale + random_scale_range * RandomSingle(3)))
|
this.ScaleTo(HitObject.Scale * (end_scale + random_scale_range * RandomSingle(3)))
|
||||||
.Then().ScaleTo(HitObject.Scale * end_scale, HitObject.TimePreempt);
|
.Then().ScaleTo(HitObject.Scale * end_scale, HitObject.TimePreempt);
|
||||||
|
|
||||||
ScaleContainer.RotateTo(getRandomAngle(1))
|
this.RotateTo(getRandomAngle(1))
|
||||||
.Then()
|
.Then()
|
||||||
.RotateTo(getRandomAngle(2), HitObject.TimePreempt);
|
.RotateTo(getRandomAngle(2), HitObject.TimePreempt);
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
ScaleContainer.Child = new SkinnableDrawable(
|
AddInternal(new SkinnableDrawable(
|
||||||
new CatchSkinComponent(CatchSkinComponents.Droplet),
|
new CatchSkinComponent(CatchSkinComponents.Droplet),
|
||||||
_ => new DropletPiece());
|
_ => new DropletPiece()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateInitialTransforms()
|
protected override void UpdateInitialTransforms()
|
||||||
@ -39,7 +39,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
float startRotation = RandomSingle(1) * 20;
|
float startRotation = RandomSingle(1) * 20;
|
||||||
double duration = HitObject.TimePreempt + 2000;
|
double duration = HitObject.TimePreempt + 2000;
|
||||||
|
|
||||||
ScaleContainer.RotateTo(startRotation).RotateTo(startRotation + 720, duration);
|
this.RotateTo(startRotation).RotateTo(startRotation + 720, duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,16 +32,16 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
VisualRepresentation.Value = (FruitVisualRepresentation)(change.NewValue % 4);
|
VisualRepresentation.Value = (FruitVisualRepresentation)(change.NewValue % 4);
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
ScaleContainer.Child = new SkinnableDrawable(
|
AddInternal(new SkinnableDrawable(
|
||||||
new CatchSkinComponent(CatchSkinComponents.Fruit),
|
new CatchSkinComponent(CatchSkinComponents.Fruit),
|
||||||
_ => new FruitPiece());
|
_ => new FruitPiece()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateInitialTransforms()
|
protected override void UpdateInitialTransforms()
|
||||||
{
|
{
|
||||||
base.UpdateInitialTransforms();
|
base.UpdateInitialTransforms();
|
||||||
|
|
||||||
ScaleContainer.RotateTo((RandomSingle(1) - 0.5f) * 40);
|
this.RotateTo((RandomSingle(1) - 0.5f) * 40);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ using JetBrains.Annotations;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
||||||
@ -21,7 +20,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
public readonly Bindable<int> IndexInBeatmap = new Bindable<int>();
|
public readonly Bindable<int> IndexInBeatmap = new Bindable<int>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The multiplicative factor applied to <see cref="ScaleContainer"/> scale relative to <see cref="HitObject"/> scale.
|
/// The multiplicative factor applied to <see cref="Drawable.Scale"/> relative to <see cref="HitObject"/> scale.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual float ScaleFactor => 1;
|
protected virtual float ScaleFactor => 1;
|
||||||
|
|
||||||
@ -32,20 +31,11 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
|
|
||||||
public float DisplayRadius => CatchHitObject.OBJECT_RADIUS * HitObject.Scale * ScaleFactor;
|
public float DisplayRadius => CatchHitObject.OBJECT_RADIUS * HitObject.Scale * ScaleFactor;
|
||||||
|
|
||||||
protected readonly Container ScaleContainer;
|
|
||||||
|
|
||||||
protected DrawablePalpableCatchHitObject([CanBeNull] CatchHitObject h)
|
protected DrawablePalpableCatchHitObject([CanBeNull] CatchHitObject h)
|
||||||
: base(h)
|
: base(h)
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
Size = new Vector2(CatchHitObject.OBJECT_RADIUS * 2);
|
Size = new Vector2(CatchHitObject.OBJECT_RADIUS * 2);
|
||||||
|
|
||||||
AddInternal(ScaleContainer = new Container
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -58,7 +48,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawables
|
|||||||
|
|
||||||
ScaleBindable.BindValueChanged(scale =>
|
ScaleBindable.BindValueChanged(scale =>
|
||||||
{
|
{
|
||||||
ScaleContainer.Scale = new Vector2(scale.NewValue * ScaleFactor);
|
Scale = new Vector2(scale.NewValue * ScaleFactor);
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
IndexInBeatmap.BindValueChanged(_ => UpdateComboColour());
|
IndexInBeatmap.BindValueChanged(_ => UpdateComboColour());
|
||||||
|
Reference in New Issue
Block a user