UltraStar-Deluxe / Play

Free and open source singing game with song editor for desktop, mobile, and smart TV
https://ultrastar-play.com
MIT License
374 stars 67 forks source link

Grid for song selection #212

Open achimmihca opened 3 years ago

achimmihca commented 3 years ago

Actual behaviour

At the moment, only the "song roulette" style can be used for song selection.

Expected behaviour

A grid (n * m) can be implemented as an alternative for the SongSelectScene.

Maybe it is possible to implement this using a GridLayout. The song roulette already uses placeholders which define the position of the song images. Re-using these placeholders in a GridLayout might require only little change to the positioning logic.

Above strike through text was for old UI system. Grid Layout should be rather simple to implement with the flexbox-layout of UI Toolkit.

What needs to be done is an abstraction of the SongSelectRouletteControl. Therefore an ISongSelectControl interface can be added. Or an abstract class AbstractSongSelectControl. This is then also to be implemented by a new SongSelectGridControl.

I would put both instances of the UI side by side in the UXML file and then activate only one of them, depending on a new GraphicSettings variable (which is defined by an enum SongSelectStyle).

Note that all class names are suggestions. Of course you can come up with something better fitting.

achimmihca commented 3 years ago

depends on #231

achimmihca commented 3 years ago

I think UltraStar World Party has a nice song slection grid. The UI is pretty refined there.

achimmihca commented 2 weeks ago

Although not officially supported, the App UI package has a GridView that looks promising, see #441.

Note: The song select is currently pretty messy. Before adding a GridView, it needs some good refactoring to better separate the presentation of songs.

achimmihca commented 1 week ago

In general, the code should be refactored to allow different song selection views. For example, Vocaluxe also offers a compact list view as alternative for the song selection (see screenshot)

compact-list-view