Exemple #1
0
        public NotePlayfield(int columns)
        {
            Columns = columns;

            RelativeSizeAxes = Axes.X;
            AutoSizeAxes     = Axes.Y;
            InternalChildren = new Drawable[]
            {
                new Container
                {
                    Anchor           = Anchor.CentreLeft,
                    Origin           = Anchor.CentreLeft,
                    RelativeSizeAxes = Axes.X,
                    AutoSizeAxes     = Axes.Y,
                    Padding          = new MarginPadding {
                        Top = 30, Bottom = 30
                    },
                    Masking      = true,
                    CornerRadius = 5,
                    Children     = new Drawable[]
                    {
                        new Container
                        {
                            Name             = "Background mask",
                            RelativeSizeAxes = Axes.X,
                            AutoSizeAxes     = Axes.Y,
                            Masking          = true,
                            CornerRadius     = 5,
                            Children         = new Drawable[]
                            {
                                new SkinnableDrawable(new KaraokeSkinComponent(KaraokeSkinComponents.StageBackground), _ => null)
                                {
                                    RelativeSizeAxes = Axes.Both
                                },
                                new Box
                                {
                                    Name             = "Background",
                                    RelativeSizeAxes = Axes.Both,
                                    Colour           = Color4.Black,
                                    Alpha            = 0.5f
                                },
                                columnFlow = new FillFlowContainer <DefaultColumnBackground>
                                {
                                    Name             = "Columns",
                                    RelativeSizeAxes = Axes.X,
                                    AutoSizeAxes     = Axes.Y,
                                    Direction        = FillDirection.Vertical,
                                    Padding          = new MarginPadding {
                                        Top = COLUMN_SPACING, Bottom = COLUMN_SPACING
                                    },
                                    Spacing = new Vector2(0, COLUMN_SPACING)
                                },
                                centerLine = new CenterLine
                                {
                                    Anchor = Anchor.Centre,
                                    Origin = Anchor.Centre,
                                }
                            }
                        },
                        new Container
                        {
                            RelativeSizeAxes = Axes.Both,
                            Children         = new Drawable[]
                            {
                                judgementArea = new Container
                                {
                                    RelativeSizeAxes     = Axes.Both,
                                    RelativePositionAxes = Axes.X,
                                    Children             = new[]
                                    {
                                        judgements = new JudgementContainer <DrawableNoteJudgement>
                                        {
                                            Anchor             = Anchor.CentreLeft,
                                            Origin             = Anchor.CentreLeft,
                                            AutoSizeAxes       = Axes.Both,
                                            BypassAutoSizeAxes = Axes.Both
                                        },
                                        judgementLine = new SkinnableDrawable(new KaraokeSkinComponent(KaraokeSkinComponents.JudgementLine), _ => new DefaultJudgementLine())
                                        {
                                            RelativeSizeAxes = Axes.Y,
                                            Anchor           = Anchor.Centre,
                                            Origin           = Anchor.Centre,
                                        },
                                        saitenMarker = new SaitenMarker
                                        {
                                            Alpha = 0
                                        }
                                    }
                                },
                                hitObjectArea = new Container
                                {
                                    Depth                = 1,
                                    RelativeSizeAxes     = Axes.Both,
                                    RelativePositionAxes = Axes.X,
                                    Children             = new Drawable[]
                                    {
                                        hitObjectsContainer = new Container
                                        {
                                            Name             = "Hit objects",
                                            RelativeSizeAxes = Axes.Both,
                                            Child            = HitObjectContainer
                                        },
                                        replaySaitenVisualization = new SaitenVisualization
                                        {
                                            Name             = "Saiten Visualization",
                                            RelativeSizeAxes = Axes.Both,
                                            PathRadius       = 1.5f,
                                            Alpha            = 0.6f
                                        },
                                        realTimeSaitenVisualization = new RealTimeSaitenVisualization
                                        {
                                            Name              = "Saiten Visualization",
                                            RelativeSizeAxes  = Axes.Both,
                                            Masking           = true,
                                            PathRadius        = 2.5f,
                                            OrientatePosition = SaitenVisualization.SaitenOrientatePosition.End
                                        },
                                    }
                                }
                            },
                        }
                    }
                }
            };

            for (int i = 0; i < columns; i++)
            {
                var column = new DefaultColumnBackground(i)
                {
                    IsSpecial = i % 2 == 0
                };

                AddColumn(column);
            }

            Direction.BindValueChanged(dir =>
            {
                bool left = dir.NewValue == ScrollingDirection.Left;

                //TODO : will apply in skin
                var judgementAreaPercentage = 0.4f;
                var judgementPadding        = 10;

                judgementArea.Size = new Vector2(judgementAreaPercentage, 1);
                judgementArea.X    = left ? 0 : 1 - judgementAreaPercentage;

                judgementLine.Anchor = left ? Anchor.CentreRight : Anchor.CentreLeft;
                saitenMarker.Anchor  = saitenMarker.Origin = left ? Anchor.CentreRight : Anchor.CentreLeft;
                saitenMarker.Scale   = left ? new Vector2(1, 1) : new Vector2(-1, 1);

                judgements.Anchor = judgements.Origin = left ? Anchor.CentreRight : Anchor.CentreLeft;
                judgements.X      = left ? -judgementPadding : judgementPadding;

                hitObjectArea.Size = new Vector2(1 - judgementAreaPercentage, 1);
                hitObjectArea.X    = left ? judgementAreaPercentage : 0;

                realTimeSaitenVisualization.Anchor = left ? Anchor.CentreLeft : Anchor.CentreRight;
                realTimeSaitenVisualization.Origin = left ? Anchor.CentreRight : Anchor.CentreLeft;
            }, true);
        }
Exemple #2
0
        public NotePlayfield(int columns)
            : base(columns)
        {
            if (InternalChildren.FirstOrDefault() is Container container)
            {
                // add padding to first children.
                container.Padding = new MarginPadding {
                    Top = 30, Bottom = 30
                };
            }

            BackgroundLayer.AddRange(new Drawable[]
            {
                new SkinnableDrawable(new KaraokeSkinComponent(KaraokeSkinComponents.StageBackground), _ => null)
                {
                    Depth            = 2,
                    RelativeSizeAxes = Axes.Both
                },
                new Box
                {
                    Depth            = 1,
                    Name             = "Background",
                    RelativeSizeAxes = Axes.Both,
                    Colour           = Color4.Black,
                    Alpha            = 0.5f
                },
                centerLine = new CenterLine
                {
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                }
            });

            HitObjectLayer.Add(judgementArea = new Container
            {
                RelativeSizeAxes     = Axes.Both,
                RelativePositionAxes = Axes.X,
                Children             = new[]
                {
                    judgements = new JudgementContainer <DrawableNoteJudgement>
                    {
                        Anchor             = Anchor.CentreLeft,
                        Origin             = Anchor.CentreLeft,
                        AutoSizeAxes       = Axes.Both,
                        BypassAutoSizeAxes = Axes.Both
                    },
                    judgementLine = new SkinnableDrawable(new KaraokeSkinComponent(KaraokeSkinComponents.JudgementLine), _ => new DefaultJudgementLine())
                    {
                        RelativeSizeAxes = Axes.Y,
                        Anchor           = Anchor.Centre,
                        Origin           = Anchor.Centre,
                    },
                    saitenMarker = new SaitenMarker
                    {
                        Alpha = 0
                    }
                }
            });

            HitObjectArea.AddRange(new Drawable[]
            {
                // todo : generate this only if in auto-play mode.
                replaySaitenVisualization = new ReplaySaitenVisualization(null)
                {
                    Name             = "Saiten Visualization",
                    RelativeSizeAxes = Axes.Both,
                    Alpha            = 0.6f
                },
                realTimeSaitenVisualization = new RealTimeSaitenVisualization
                {
                    Name             = "Saiten Visualization",
                    RelativeSizeAxes = Axes.Both,
                },
            });

            AddInternal(saitenStatus = new SaitenStatus(SaitenStatusMode.NotInitialized));
        }