예제 #1
0
    private DynamicPart CreateFileLoadedPart(int offset, string file)
    {
        string text;

        using var reader = new File();

        if (reader.Open(file, File.ModeFlags.Read) == Error.Ok)
        {
            text = reader.GetAsText();
        }
        else
        {
            text = "Missing file to show here!";
            GD.PrintErr("Can't load file to show in credits: ", file);
        }

        var label = new DynamicPart(offset, new Label
        {
            Text         = text,
            RectMinSize  = new Vector2(RectSize.x * LicenseTextWidthFraction, 0),
            RectPosition = new Vector2(Mathf.Round(RectSize.x * (1.0f - LicenseTextWidthFraction)), 0),
            Align        = Label.AlignEnum.Fill,
            Autowrap     = true,
        });

        AddDynamicItem(label);
        return(label);
    }
예제 #2
0
    private DynamicPart CreateDynamicPart(int offset, IEnumerable <string> texts, int columns, Font overrideFont = null)
    {
        if (columns <= 1)
        {
            return(CreateDynamicPart(offset, string.Join("\n", texts)));
        }

        var splitTexts = Enumerable.Range(0, columns).Select(_ => new StringBuilder()).ToList();

        using (var textEnumerator = texts.GetEnumerator())
        {
            bool done = false;
            while (!done)
            {
                foreach (var column in splitTexts)
                {
                    if (!textEnumerator.MoveNext())
                    {
                        done = true;
                        break;
                    }

                    column.AppendLine(textEnumerator.Current);
                }
            }
        }

        var hBox = new HBoxContainer
        {
            // 0.7 == 15% shrink of middle spacing for 2 columns and move position to center.
            RectPosition = new Vector2(columns == 2 ? RectSize.x * 0.15f : 0, 0),
            RectMinSize  = new Vector2(columns == 2 ? RectSize.x * 0.7f : RectSize.x, 0),
        };

        foreach (var columnText in splitTexts)
        {
            var label = new Label
            {
                Text  = columnText.ToString(),
                Align = Label.AlignEnum.Center,
                SizeFlagsHorizontal = (int)SizeFlags.ExpandFill,
            };

            if (overrideFont != null)
            {
                label.AddFontOverride("font", overrideFont);
            }

            hBox.AddChild(label);
        }

        var dynamicPart = new DynamicPart(offset, hBox);

        AddDynamicItem(dynamicPart);
        return(dynamicPart);
    }
예제 #3
0
    private DynamicPart CreateDynamicPart(int offset, string text, Font overrideFont = null)
    {
        var label = new DynamicPart(offset, new Label
        {
            Text        = text,
            RectMinSize = new Vector2(RectSize.x, 0),
            Align       = Label.AlignEnum.Center,
        });

        if (overrideFont != null)
        {
            label.Control.AddFontOverride("font", overrideFont);
        }

        AddDynamicItem(label);
        return(label);
    }
예제 #4
0
 private void AddDynamicItem(DynamicPart part)
 {
     AddChild(part.Control);
     dynamicParts.Add(part);
     part.UpdatePosition(smoothOffset, RectSize.y);
 }