using Godot; using System; public partial class CardCreateMarginContainer : MarginContainer { public readonly string Title = "Card"; public string CardTitle { get => GetNode("%TitleEdit").Text; set => GetNode("%TitleEdit").Text = value; } public void SetStretchMode(StretchMode stretchMode) { switch (stretchMode) { case StretchMode.Unspecified: case StretchMode.Fit: default: GetNode("%StretchModeFitButton").ButtonPressed = true; break; case StretchMode.Stretch: GetNode("%StretchModeStretchButton").ButtonPressed = true; break; case StretchMode.Crop: GetNode("%StretchModeCropButton").ButtonPressed = true; break; } } public StretchMode GetStretchMode() { if (GetNode("%StretchModeFitButton").ButtonPressed) return StretchMode.Fit; else if (GetNode("%StretchModeStretchButton").ButtonPressed) return StretchMode.Stretch; else if (GetNode("%StretchModeCropButton").ButtonPressed) return StretchMode.Crop; return StretchMode.Unspecified; } private void StetchModeChanged(BaseButton button) { var ci = GetNode("%CardCreateImageBox"); switch (GetStretchMode()) { case StretchMode.Stretch: ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize; ci.StretchMode = TextureRect.StretchModeEnum.Scale; break; case StretchMode.Crop: ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize; ci.StretchMode = TextureRect.StretchModeEnum.KeepAspectCovered; break; case StretchMode.Unspecified: case StretchMode.Fit: default: ci.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize; ci.StretchMode = TextureRect.StretchModeEnum.KeepAspectCentered; break; } } public Image Image { get => GetNode("%CardCreateImageBox").Texture?.GetImage(); set => GetNode("%CardCreateImageBox").Texture = ImageTexture.CreateFromImage(value); } // Called when the node enters the scene tree for the first time. public override void _Ready() { (GetParent() as TabContainer)?.SetTabTitle(GetIndex(), Title); GetNode("%StretchModeFitButton").ButtonGroup.Pressed += StetchModeChanged; GetNode("%TitleEdit").TextSubmitted += (s) => GetNode("%CreateMenuOkButton") .EmitSignal(Button.SignalName.Pressed); } // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { } public void ClearMenu() { GetNode("%CardCreateImageBox").Texture = new Texture2D(); CardTitle = ""; SetStretchMode(StretchMode.Unspecified); } public void SendCardToGame() { var c = card.MakeCard(GetTree()); if (Image is Image im) c.SetImage(ImageTexture.CreateFromImage(im)); c.SetStretchMode(GetStretchMode()); c.CardName = CardTitle; this.GetParentOfType().AddUnassignedCard(c); } public void FileSelected(string path) { Image image = new(); image.Load(path); Image = image; } }