using Godot; using System; namespace Chessistics.Scripts.UI; public partial class LevelSelectScreen : Control { [Signal] public delegate void LevelSelectedEventHandler(int levelIndex); private readonly (string name, string desc)[] _levels = [ ("Premier Convoi", "Acheminez du bois de la scierie au depot."), ("Deux Clients", "Fournissez deux destinations depuis une seule scierie."), ("Le Col", "Franchissez le mur et gerez deux types de cargaison.") ]; public override void _Ready() { var panel = new PanelContainer(); panel.SetAnchorsPreset(LayoutPreset.FullRect); var margin = new MarginContainer(); margin.AddThemeConstantOverride("margin_left", 60); margin.AddThemeConstantOverride("margin_right", 60); margin.AddThemeConstantOverride("margin_top", 60); margin.AddThemeConstantOverride("margin_bottom", 60); var vbox = new VBoxContainer(); var title = new Label { Text = "CHESSISTICS", HorizontalAlignment = HorizontalAlignment.Center }; title.AddThemeFontSizeOverride("font_size", 32); title.AddThemeColorOverride("font_color", new Color("#FFD700")); vbox.AddChild(title); var subtitle = new Label { Text = "Prototype — Selectionnez un niveau", HorizontalAlignment = HorizontalAlignment.Center }; subtitle.AddThemeFontSizeOverride("font_size", 14); subtitle.AddThemeColorOverride("font_color", new Color("#AAAAAA")); vbox.AddChild(subtitle); vbox.AddChild(new HSeparator()); var grid = new HBoxContainer(); grid.Alignment = BoxContainer.AlignmentMode.Center; for (int i = 0; i < _levels.Length; i++) { var (name, desc) = _levels[i]; var card = CreateLevelCard(i, name, desc); grid.AddChild(card); } vbox.AddChild(grid); margin.AddChild(vbox); panel.AddChild(margin); AddChild(panel); } private Control CreateLevelCard(int index, string name, string description) { var card = new PanelContainer { CustomMinimumSize = new Vector2(220, 160) }; var vbox = new VBoxContainer(); var numLabel = new Label { Text = $"Niveau {index + 1}", HorizontalAlignment = HorizontalAlignment.Center }; numLabel.AddThemeFontSizeOverride("font_size", 12); numLabel.AddThemeColorOverride("font_color", new Color("#AAAAAA")); vbox.AddChild(numLabel); var nameLabel = new Label { Text = name, HorizontalAlignment = HorizontalAlignment.Center }; nameLabel.AddThemeFontSizeOverride("font_size", 18); vbox.AddChild(nameLabel); var descLabel = new Label { Text = description, HorizontalAlignment = HorizontalAlignment.Center, AutowrapMode = TextServer.AutowrapMode.Word }; descLabel.AddThemeFontSizeOverride("font_size", 11); descLabel.AddThemeColorOverride("font_color", new Color("#CCCCCC")); vbox.AddChild(descLabel); var playBtn = new Button { Text = "Jouer", CustomMinimumSize = new Vector2(100, 32) }; var idx = index; playBtn.Pressed += () => EmitSignal(SignalName.LevelSelected, idx); vbox.AddChild(playBtn); card.AddChild(vbox); return card; } }