Rewrite osu!catch playfield layout containers and apply masking around vertical boundaries

This commit is contained in:
Salman Ahmed 2024-02-13 11:51:21 +03:00
parent 833997bf1d
commit 62f5251b6e
1 changed files with 18 additions and 13 deletions

View File

@ -17,24 +17,29 @@ public partial class CatchPlayfieldAdjustmentContainer : PlayfieldAdjustmentCont
public CatchPlayfieldAdjustmentContainer() public CatchPlayfieldAdjustmentContainer()
{ {
Anchor = Anchor.TopCentre; const float base_game_width = 1024f;
Origin = Anchor.TopCentre; const float base_game_height = 768f;
// playfields in stable are positioned vertically at three fourths the difference between the playfield height and the window height in stable.
// we can match that in lazer by using relative coordinates for Y and considering window height to be 1, and playfield height to be 0.8.
RelativePositionAxes = Axes.Y;
Y = (1 - playfield_size_adjust) / 4 * 3;
Size = new Vector2(playfield_size_adjust);
InternalChild = new Container InternalChild = new Container
{ {
// This container limits vertical visibility of the playfield to ensure fairness between wide and tall resolutions (i.e. tall resolutions should not see more fruits).
// Note that the container still extends across the screen horizontally, so that hit explosions at the sides of the playfield do not get cut off.
Name = "Visible area",
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.X,
FillMode = FillMode.Fit, Height = base_game_height,
FillAspectRatio = 4f / 3, Masking = true,
Child = content = new ScalingContainer { RelativeSizeAxes = Axes.Both, } Child = new Container
{
Name = "Playable area",
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
// playfields in stable are positioned vertically at three fourths the difference between the playfield height and the window height in stable.
Y = base_game_height * ((1 - playfield_size_adjust) / 4 * 3),
Size = new Vector2(base_game_width, base_game_height) * playfield_size_adjust,
Child = content = new ScalingContainer { RelativeSizeAxes = Axes.Both }
},
}; };
} }