From 2f3abbb6f1141f15ef77ac27e431bc66bb0c7899 Mon Sep 17 00:00:00 2001 From: Sophia Pearson Date: Sun, 4 Sep 2022 15:43:12 +0200 Subject: game: adapt scripts to new design --- Scripts/Game/Output.cs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Scripts/Game/Output.cs (limited to 'Scripts/Game/Output.cs') diff --git a/Scripts/Game/Output.cs b/Scripts/Game/Output.cs new file mode 100644 index 0000000..be943f7 --- /dev/null +++ b/Scripts/Game/Output.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Godot; +using Godot.Collections; + +namespace Texty.Scripts.Game +{ + public class Output : PanelContainer + { + [Export(PropertyHint.File, "*.tscn")] public PackedScene OutputBlockScene; + public Array TextBlocks => new Array(BlockNodes.ToList().Select(block => block.Content)); + + private VBoxContainer LineContainer => GetNodeOrNull($"%{nameof(LineContainer)}"); + + private IEnumerable BlockNodes => + GD.Range(LineContainer?.GetChildCount() ?? 0) + .Select(index => LineContainer.GetChild(index)) + .Cast(); + + public override void _Ready() + { + Debug.Assert(OutputBlockScene != null, "OutputBlockScene has not been configured!"); + Debug.Assert(OutputBlockScene.CanInstance(), "OutputBlockScene can not be instanced!"); + } + + public void Clear() + { + BlockNodes.ToList().ForEach(block => + { + LineContainer.RemoveChild(block); + block.QueueFree(); + }); + } + + public void Push(string text) + { + var block = OutputBlockScene.Instance(); + block.Content = text; + LineContainer.AddChild(block); + } + } +} \ No newline at end of file -- cgit v1.2.3