Esempio n. 1
0
        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())
 });
Esempio n. 3
0
        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]);
Esempio n. 4
0
 /// <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);
 }
Esempio n. 5
0
        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())
     };
 }
Esempio n. 7
0
        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;
                            }));
                        })
                    },
Esempio n. 9
0
 public static Vector2 GetStartPosition(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject hitObject)
 {
     return(new Vector2(hitObject.OriginalX, hitObjectContainer.PositionAtTime(hitObject.StartTime)));
 }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
 public void UpdatePositionFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject parentHitObject)
 {
     X = parentHitObject.OriginalX;
     Y = hitObjectContainer.PositionAtTime(parentHitObject.StartTime);
 }
Esempio n. 12
0
 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(),
     };
 }
Esempio n. 13
0
 public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, CatchHitObject hitObject)
 {
     X     = hitObject.EffectiveX;
     Y     = hitObjectContainer.PositionAtTime(hitObject.StartTime);
     Scale = new Vector2(hitObject.Scale);
 }
Esempio n. 14
0
 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);
 }
Esempio n. 15
0
 public void UpdateFrom(ScrollingHitObjectContainer hitObjectContainer, JuiceStream hitObject)
 {
     while (path.Vertices.Count < InternalChildren.Count)
     {
         RemoveInternal(InternalChildren[^ 1]);