Optimize terminal text display
This commit is contained in:
parent
c44ffe090a
commit
1317c59e94
@ -53,6 +53,8 @@ MonoBehaviour:
|
|||||||
InputField: {fileID: 7286298882252502165}
|
InputField: {fileID: 7286298882252502165}
|
||||||
TextField: {fileID: 4807139487522286296}
|
TextField: {fileID: 4807139487522286296}
|
||||||
Player: {fileID: 0}
|
Player: {fileID: 0}
|
||||||
|
LinesVisibleAtOnce: 32
|
||||||
|
TerminalScrollbar: {fileID: 4580324269108703239}
|
||||||
--- !u!1 &170678579363757794
|
--- !u!1 &170678579363757794
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -398,7 +400,7 @@ MonoBehaviour:
|
|||||||
m_TargetGraphic: {fileID: 2282722458285268294}
|
m_TargetGraphic: {fileID: 2282722458285268294}
|
||||||
m_HandleRect: {fileID: 4556893897637480247}
|
m_HandleRect: {fileID: 4556893897637480247}
|
||||||
m_Direction: 2
|
m_Direction: 2
|
||||||
m_Value: 0
|
m_Value: 1
|
||||||
m_Size: 1
|
m_Size: 1
|
||||||
m_NumberOfSteps: 0
|
m_NumberOfSteps: 0
|
||||||
m_OnValueChanged:
|
m_OnValueChanged:
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.InputSystem;
|
using UnityEngine.InputSystem;
|
||||||
using UnityEngine.EventSystems;
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.UI;
|
||||||
using NeonTea.Quakeball.Players;
|
using NeonTea.Quakeball.Players;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
|
|
||||||
@ -14,6 +15,9 @@ namespace NeonTea.Quakeball.Interface {
|
|||||||
public TMP_InputField InputField;
|
public TMP_InputField InputField;
|
||||||
public TMP_Text TextField;
|
public TMP_Text TextField;
|
||||||
public LocalPlayer Player;
|
public LocalPlayer Player;
|
||||||
|
[Tooltip("Used to optimize the amount of text rendered. 0 for no optimization.")]
|
||||||
|
public float LinesVisibleAtOnce;
|
||||||
|
public Scrollbar TerminalScrollbar;
|
||||||
|
|
||||||
private InputAction ToggleTerminalAction;
|
private InputAction ToggleTerminalAction;
|
||||||
private InputAction SubmitTerminal;
|
private InputAction SubmitTerminal;
|
||||||
@ -24,7 +28,6 @@ namespace NeonTea.Quakeball.Interface {
|
|||||||
private Dictionary<string, string> Helps = new Dictionary<string, string>();
|
private Dictionary<string, string> Helps = new Dictionary<string, string>();
|
||||||
|
|
||||||
private List<string> Messages = new List<string>();
|
private List<string> Messages = new List<string>();
|
||||||
private string Text = "";
|
|
||||||
private List<string> PreviousRuns = new List<string>();
|
private List<string> PreviousRuns = new List<string>();
|
||||||
private int CurrentScroll = -1;
|
private int CurrentScroll = -1;
|
||||||
private bool JustScrolled = false;
|
private bool JustScrolled = false;
|
||||||
@ -101,8 +104,22 @@ namespace NeonTea.Quakeball.Interface {
|
|||||||
InputField.readOnly = false;
|
InputField.readOnly = false;
|
||||||
}
|
}
|
||||||
if (IsOpen) {
|
if (IsOpen) {
|
||||||
Text = String.Join("\n", Messages);
|
if (LinesVisibleAtOnce == 0) {
|
||||||
TextField.text = Text;
|
TextField.text = String.Join("\n", Messages);
|
||||||
|
} else {
|
||||||
|
float VisibleLinesCenterIndex = (1 - TerminalScrollbar.value) * Messages.Count;
|
||||||
|
int StartIndex = Mathf.Max(0, (int)(VisibleLinesCenterIndex - LinesVisibleAtOnce / 2));
|
||||||
|
int EndIndex = Mathf.Min(Messages.Count - 1, (int)(VisibleLinesCenterIndex + LinesVisibleAtOnce / 2));
|
||||||
|
StringBuilder OptimizedText = new StringBuilder();
|
||||||
|
for (int i = 0; i < Messages.Count; i++) {
|
||||||
|
if (i < StartIndex || i > EndIndex) {
|
||||||
|
OptimizedText.AppendLine();
|
||||||
|
} else {
|
||||||
|
OptimizedText.AppendLine(Messages[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TextField.text = OptimizedText.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user