public void TestMode(SaitenStatusMode mode) { AddStep("create mod display", () => { Child = new SaitenStatus(mode) { Anchor = Anchor.Centre, Origin = Anchor.Centre }; }); }
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)); }
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 }, } } }, }, } }, saitenStatus = new SaitenStatus(SaitenStatusMode.NotInitialized) { Anchor = Anchor.BottomLeft, Origin = Anchor.BottomLeft, } }; 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); }