private void load() { AddStep("Drum roll", () => SetContents(() => { var hoc = new ScrollingHitObjectContainer(); hoc.Add(new DrawableDrumRoll(createDrumRollAtCurrentTime()) { Anchor = Anchor.Centre, Origin = Anchor.Centre, Width = 500, }); return(hoc); })); AddStep("Drum roll (strong)", () => SetContents(() => { var hoc = new ScrollingHitObjectContainer(); hoc.Add(new DrawableDrumRoll(createDrumRollAtCurrentTime(true)) { Anchor = Anchor.Centre, Origin = Anchor.Centre, Width = 500, }); return(hoc); })); }
public void SetUp() => AddStep("create SHOC", () => Child = hitObjectContainer = new ScrollingHitObjectContainer { RelativeSizeAxes = Axes.X, Height = 200, Anchor = Anchor.Centre, Origin = Anchor.Centre, Clock = new FramedClock(new StopwatchClock()) });
public void UpdateNestedObjectsFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject parentHitObject) { nestedHitObjects.Clear(); nestedHitObjects.AddRange(parentHitObject.NestedHitObjects .OfType <CatchHitObject>() .Where(h => !(h is TinyDroplet))); while (nestedHitObjects.Count < InternalChildren.Count) { RemoveInternal(InternalChildren[^ 1]);
/// <summary> /// Creates a new <see cref="ScrollingPlayfield{TObject, TJudgement}"/>. /// </summary> /// <param name="scrollingAxes">The axes on which <see cref="DrawableHitObject"/>s in this container should scroll.</param> /// <param name="customWidth">Whether we want our internal coordinate system to be scaled to a specified width</param> protected ScrollingPlayfield(Axes scrollingAxes, float?customWidth = null) : base(customWidth) { base.HitObjects = HitObjects = new ScrollingHitObjectContainer(scrollingAxes) { RelativeSizeAxes = Axes.Both }; HitObjects.VisibleTimeRange.BindTo(VisibleTimeRange); HitObjects.Reversed.BindTo(Reversed); }
private void load() { AddStep("Bar line", () => SetContents(_ => { ScrollingHitObjectContainer hoc; var cont = new Container { RelativeSizeAxes = Axes.Both, Height = 0.8f, Anchor = Anchor.Centre, Origin = Anchor.Centre, Children = new Drawable[] { new TaikoPlayfield(), hoc = new ScrollingHitObjectContainer() } }; hoc.Add(new DrawableBarLine(createBarLineAtCurrentTime()) { Anchor = Anchor.Centre, Origin = Anchor.Centre, }); return(cont); })); AddStep("Bar line (major)", () => SetContents(_ => { ScrollingHitObjectContainer hoc; var cont = new Container { RelativeSizeAxes = Axes.Both, Height = 0.8f, Anchor = Anchor.Centre, Origin = Anchor.Centre, Children = new Drawable[] { new TaikoPlayfield(), hoc = new ScrollingHitObjectContainer() } }; hoc.Add(new DrawableBarLine(createBarLineAtCurrentTime(true)) { Anchor = Anchor.Centre, Origin = Anchor.Centre, }); return(cont); })); }
private void load() { Child = hitObjectContainer = new ScrollingHitObjectContainer { RelativeSizeAxes = Axes.X, Height = 200, Anchor = Anchor.Centre, Origin = Anchor.Centre, Clock = new FramedClock(new StopwatchClock()) }; }
public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, BananaShower hitObject) { float startY = hitObjectContainer.PositionAtTime(hitObject.StartTime); float endY = hitObjectContainer.PositionAtTime(hitObject.EndTime); Y = Math.Max(startY, endY); float height = Math.Abs(startY - endY); bool wasEmpty = isEmpty; isEmpty = height == 0; if (wasEmpty != isEmpty) { this.FadeTo(isEmpty ? opacity_when_empty : 1f, 150); } Height = Math.Max(height, border_width); }
new NotePlayfieldTestContainer(COLUMN_NUMBER) { Anchor = Anchor.Centre, Origin = Anchor.Centre, RelativeSizeAxes = Axes.X, Height = DefaultColumnBackground.COLUMN_HEIGHT, Child = new ScrollingHitObjectContainer { RelativeSizeAxes = Axes.Both, }.With(c => { c.Add(CreateHitObject().With(h => { h.HitObject.StartTime = START_TIME; if (h.HitObject is IHasDuration hasDurationHitObject) { hasDurationHitObject.Duration = DURATION; } h.AccentColour.Value = Color4.Orange; })); }) },
public static Vector2 GetStartPosition(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject hitObject) { return(new Vector2(hitObject.OriginalX, hitObjectContainer.PositionAtTime(hitObject.StartTime))); }
private void load(OsuColour colours) { InternalChildren = new[] { new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.PlayfieldBackgroundRight), _ => new PlayfieldBackgroundRight()), rightArea = new Container { Name = "Right area", RelativeSizeAxes = Axes.Both, RelativePositionAxes = Axes.Both, Children = new Drawable[] { new Container { Name = "Masked elements before hit objects", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, Children = new[] { hitExplosionContainer = new Container <HitExplosion> { RelativeSizeAxes = Axes.Both, }, HitTarget = new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.HitTarget), _ => new TaikoHitTarget()) { RelativeSizeAxes = Axes.Both, } } }, hitTargetOffsetContent = new Container { RelativeSizeAxes = Axes.Both, Children = new Drawable[] { barLinePlayfield = new BarLinePlayfield(), new Container { Name = "Hit objects", RelativeSizeAxes = Axes.Both, Children = new Drawable[] { HitObjectContainer, drumRollHitContainer = new DrumRollHitContainer() } }, kiaiExplosionContainer = new Container <KiaiHitExplosion> { Name = "Kiai hit explosions", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, }, judgementContainer = new JudgementContainer <DrawableTaikoJudgement> { Name = "Judgements", RelativeSizeAxes = Axes.Y, }, } }, } }, leftArea = new Container { Name = "Left overlay", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, BorderColour = colours.Gray0, Children = new Drawable[] { new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.PlayfieldBackgroundLeft), _ => new PlayfieldBackgroundLeft()), new InputDrum(HitObjectContainer) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, }, } }, mascot = new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.Mascot), _ => Empty()) { Origin = Anchor.BottomLeft, Anchor = Anchor.TopLeft, RelativePositionAxes = Axes.Y, RelativeSizeAxes = Axes.None, Y = 0.2f }, topLevelHitContainer = new ProxyContainer { Name = "Top level hit objects", RelativeSizeAxes = Axes.Both, }, drumRollHitContainer.CreateProxy(), }; RegisterPool <Hit, DrawableHit>(50); RegisterPool <Hit.StrongNestedHit, DrawableHit.StrongNestedHit>(50); RegisterPool <DrumRoll, DrawableDrumRoll>(5); RegisterPool <DrumRoll.StrongNestedHit, DrawableDrumRoll.StrongNestedHit>(5); RegisterPool <DrumRollTick, DrawableDrumRollTick>(100); RegisterPool <DrumRollTick.StrongNestedHit, DrawableDrumRollTick.StrongNestedHit>(100); RegisterPool <Swell, DrawableSwell>(5); RegisterPool <SwellTick, DrawableSwellTick>(100); var hitWindows = new TaikoHitWindows(); foreach (var result in Enum.GetValues(typeof(HitResult)).OfType <HitResult>().Where(r => hitWindows.IsHitResultAllowed(r))) { judgementPools.Add(result, new DrawablePool <DrawableTaikoJudgement>(15)); explosionPools.Add(result, new HitExplosionPool(result)); } AddRangeInternal(judgementPools.Values); AddRangeInternal(explosionPools.Values); }
public void UpdatePositionFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject parentHitObject) { X = parentHitObject.OriginalX; Y = hitObjectContainer.PositionAtTime(parentHitObject.StartTime); }
private void load(OsuColour colours) { InternalChildren = new[] { new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.PlayfieldBackgroundRight), _ => new PlayfieldBackgroundRight()), rightArea = new Container { Name = "Right area", RelativeSizeAxes = Axes.Both, RelativePositionAxes = Axes.Both, Children = new Drawable[] { new Container { Name = "Masked elements before hit objects", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, Children = new[] { hitExplosionContainer = new Container <HitExplosion> { RelativeSizeAxes = Axes.Both, }, HitTarget = new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.HitTarget), _ => new TaikoHitTarget()) { RelativeSizeAxes = Axes.Both, } } }, hitTargetOffsetContent = new Container { RelativeSizeAxes = Axes.Both, Children = new Drawable[] { barlineContainer = new ProxyContainer { RelativeSizeAxes = Axes.Both, }, new Container { Name = "Hit objects", RelativeSizeAxes = Axes.Both, Children = new Drawable[] { HitObjectContainer, drumRollHitContainer = new DrumRollHitContainer() } }, kiaiExplosionContainer = new Container <KiaiHitExplosion> { Name = "Kiai hit explosions", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, }, judgementContainer = new JudgementContainer <DrawableTaikoJudgement> { Name = "Judgements", RelativeSizeAxes = Axes.Y, }, } }, } }, leftArea = new Container { Name = "Left overlay", RelativeSizeAxes = Axes.Both, FillMode = FillMode.Fit, BorderColour = colours.Gray0, Children = new Drawable[] { new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.PlayfieldBackgroundLeft), _ => new PlayfieldBackgroundLeft()), new InputDrum(controlPoints) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, }, } }, mascot = new SkinnableDrawable(new TaikoSkinComponent(TaikoSkinComponents.Mascot), _ => Empty()) { Origin = Anchor.BottomLeft, Anchor = Anchor.TopLeft, RelativePositionAxes = Axes.Y, RelativeSizeAxes = Axes.None, Y = 0.2f }, topLevelHitContainer = new ProxyContainer { Name = "Top level hit objects", RelativeSizeAxes = Axes.Both, }, drumRollHitContainer.CreateProxy(), }; }
public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject hitObject) { X = hitObject.EffectiveX; Y = hitObjectContainer.PositionAtTime(hitObject.StartTime); Scale = new Vector2(hitObject.Scale); }
public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject hitObject, [CanBeNull] CatchHitObject parent = null) { X = hitObject.EffectiveX - (parent?.OriginalX ?? 0); Y = hitObjectContainer.PositionAtTime(hitObject.StartTime, parent?.StartTime ?? hitObjectContainer.Time.Current); Scale = new Vector2(hitObject.Scale); }
public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, JuiceStream hitObject) { while (path.Vertices.Count < InternalChildren.Count) { RemoveInternal(InternalChildren[^ 1]);