console notify box

This commit is contained in:
GoaLitiuM
2021-03-14 01:00:08 +02:00
parent 7973daf799
commit 26893a8f57
6 changed files with 123 additions and 40 deletions

View File

@@ -40,7 +40,7 @@
"V": {
"Order": -999999999,
"Size": {
"X": 1456.0,
"X": 1401.0,
"Y": 813.0
}
}
@@ -138,7 +138,7 @@
},
"V": {
"Size": {
"X": 1456.0,
"X": 1401.0,
"Y": 813.0
}
}
@@ -165,7 +165,7 @@
},
"Control": "FlaxEngine.GUI.Label",
"Data": {
"Text": "FPS: 15\nrFPS: 11\nCon: NaNms\nDirectX11\nGC memory: 13.52053MB",
"Text": "FPS: 767\nrFPS: 767\nCon: NaNms\nDirectX11\nGC memory: 7.908752MB",
"TextColor": {
"R": 1.0,
"G": 1.0,

View File

@@ -6,6 +6,21 @@ using System.Reflection;
namespace Cabrito
{
public class ConsoleLine
{
public string content;
internal ConsoleLine(string line)
{
content = line;
}
public static implicit operator string(ConsoleLine line) => line.content;
public static explicit operator ConsoleLine(string line) => new ConsoleLine(line);
public override string ToString() => content.ToString();
}
public static class Console
{
private static ConsoleScriptBase scriptInstance = null;
@@ -28,7 +43,8 @@ namespace Cabrito
public static string LinePrefix { get; internal set; } = "]";
private static List<string> consoleLines = new List<string>();
//private static List<string> consoleLines = new List<string>();
private static List<ConsoleLine> consoleLines = new List<ConsoleLine>();
private static Dictionary<string, ConsoleCommand> consoleCommands = new Dictionary<string, ConsoleCommand>();
private static Dictionary<string, ConsoleVariable> consoleVariables = new Dictionary<string, ConsoleVariable>();
@@ -166,8 +182,8 @@ namespace Cabrito
OnOpen += instance.OnConsoleOpen;
OnClose += instance.OnConsoleClose;
foreach (var line in consoleLines)
scriptInstance.AddLine(line);
//foreach (var line in consoleLines)
// scriptInstance.OnLineAdded(line);
}
/// Unregister already registered Console script.
@@ -183,7 +199,7 @@ namespace Cabrito
OnClose -= instance.OnConsoleClose;
}
public static IReadOnlyCollection<string> Lines
public static IReadOnlyCollection<ConsoleLine> Lines
{
get => consoleLines.AsReadOnly();
}
@@ -191,29 +207,33 @@ namespace Cabrito
// Echoes text to Console.
public static void Print(string text)
{
consoleLines.Add(text);
scriptInstance?.AddLine(text);
ConsoleLine line = new ConsoleLine(text);
consoleLines.Add(line);
scriptInstance?.OnLineAdded(text);
}
// Echoes warning text to Console.
public static void PrintWarning(string text)
{
consoleLines.Add(text);
scriptInstance?.AddLine(text);
ConsoleLine line = new ConsoleLine(text);
consoleLines.Add(line);
scriptInstance?.OnLineAdded(text);
}
// Echoes error text to Console.
public static void PrintError(string text)
{
consoleLines.Add(text);
scriptInstance?.AddLine(text);
ConsoleLine line = new ConsoleLine(text);
consoleLines.Add(line);
scriptInstance?.OnLineAdded(text);
}
// Echoes developer/debug text to Console.
public static void PrintDebug(string text)
{
consoleLines.Add(text);
scriptInstance?.AddLine(text);
ConsoleLine line = new ConsoleLine(text);
consoleLines.Add(line);
scriptInstance?.OnLineAdded(text);
}
// Opens the Console.

View File

@@ -36,6 +36,7 @@ namespace Cabrito
public float CaretFlashSpeed = 0;
public Color BorderColor;
public Color TextColor = Color.White;
public int DefaultMargin = 1;
public int ScrollOffset = 0;
public int ScrollMouseLines = 3;
@@ -110,12 +111,13 @@ namespace Cabrito
public override void OnParentResized()
{
Height = Screen.Size.Y * HeightMultiplier;
if (HeightMultiplier > 0)
Height = Screen.Size.Y * HeightMultiplier;
base.OnParentResized();
}
private void CalculateVisibleLines(IReadOnlyCollection<string> lines, out int firstVisibleLine, out int lastVisibleLine, out LineInfo[] wrappedLines)
private void CalculateVisibleLines(IReadOnlyCollection<ConsoleLine> lines, out int firstVisibleLine, out int lastVisibleLine, out LineInfo[] wrappedLines)
{
wrappedLines = null;
firstVisibleLine = 0;
@@ -309,7 +311,7 @@ namespace Cabrito
foreach (LineInfo li in wrappedLines)
{
var lineIndex = li.lineIndex;
string line = lines.ElementAt(lineIndex).Substring(li.lineOffset, li.lineLength);
string line = lines.ElementAt(lineIndex).content.Substring(li.lineOffset, li.lineLength);
Render2D.DrawText(font, line, TextColor, ref layout);
layout.Bounds.Y += lineHeight;
}
@@ -383,7 +385,7 @@ namespace Cabrito
return false;
hitLine = wrappedLines[hitWrappedLine].lineIndex;
string line = lines.ElementAt(hitLine).Substring(wrappedLines[hitWrappedLine].lineOffset, wrappedLines[hitWrappedLine].lineLength);
string line = lines.ElementAt(hitLine).content.Substring(wrappedLines[hitWrappedLine].lineOffset, wrappedLines[hitWrappedLine].lineLength);
layout.Bounds.Y = top + ((hitWrappedLine) * lineHeight);
layout.Bounds.Height = top + 9999;//(visibleHeight / Platform.DpiScale);
@@ -474,7 +476,7 @@ namespace Cabrito
selectionStartChar = hitChar;
selectionEndLine = hitLine;
selectionEndChar = hitChar;
FlaxEngine.Debug.Log(string.Format("start line {0} char {1}", hitLine, hitChar));
//FlaxEngine.Debug.Log(string.Format("start line {0} char {1}", hitLine, hitChar));
}
else
throw new Exception("no???");
@@ -507,7 +509,7 @@ namespace Cabrito
{
selectionEndLine = hitLine;
selectionEndChar = hitChar;
FlaxEngine.Debug.Log(string.Format("end line {0} char {1}", hitLine, hitChar));
//FlaxEngine.Debug.Log(string.Format("end line {0} char {1}", hitLine, hitChar));
}
}
}

View File

@@ -13,13 +13,16 @@ namespace Cabrito
private ConsoleContentTextBox contentBox;
protected override Rectangle TextRectangle => new Rectangle(0, 0, Width, Height);
protected override Rectangle TextClipRectangle => new Rectangle(0, 0, Width, Height);
public ConsoleInputTextBox() : base()
{
}
public ConsoleInputTextBox(ConsoleContentTextBox contentBox, float x, float y, float width, float height) : base(x, y, width, height)
{
{
this.contentBox = contentBox;
IsMultiline = true; // Not really but behaves better than single-line box
}
@@ -41,7 +44,7 @@ namespace Cabrito
Input.InputText.ToLowerInvariant().Contains('æ') ||
Input.InputText.ToLowerInvariant().Contains('ø')))
{
continue; // Scandinavian keyboards layouts
continue; // Scandinavian keyboard layouts
}
else if (mapping.Key == KeyboardKeys.BackQuote && Input.InputText.ToLowerInvariant().Contains('\''))
continue;

View File

@@ -12,7 +12,7 @@ namespace Cabrito
public abstract void OnConsoleOpen();
public abstract void OnConsoleClose();
public abstract void SetInput(string text);
public abstract void AddLine(string text);
public abstract void OnLineAdded(string text);
}
public class ConsoleScript : ConsoleScriptBase
@@ -23,6 +23,12 @@ namespace Cabrito
[Limit(0.05f, 1.0f, 1)]
public float ConsoleHeight = 0.65f;
[Limit(0)]
public int ConsoleNotifyLines = 3;
[Limit(0f)]
public float ConsoleSpeed = 3500f;
[Limit(0.5f, 4f, 0.05f)]
public float LineSpacing
{
@@ -33,6 +39,8 @@ namespace Cabrito
if (consoleBox != null)
consoleBox.LineSpacing = value;
if (consoleNotifyBox != null)
consoleNotifyBox.LineSpacing = value;
if (consoleInputBox != null)
consoleInputBox.LineSpacing = value;
@@ -50,6 +58,7 @@ namespace Cabrito
private UIControl rootControl;
private ConsoleContentTextBox consoleBox;
private ConsoleInputTextBox consoleInputBox;
private ConsoleContentTextBox consoleNotifyBox;
internal InputEvent consoleInputEvent;
@@ -137,6 +146,35 @@ namespace Cabrito
parentControl.Name = "ConsoleContent";
parentControl.Control = consoleBox;
consoleBox.Location = locationFix; // workaround to UIControl.Control overriding the old position
if (consoleNotifyBox == null)
{
//consoleBox = new ConsoleContentTextBox(null, 0, 0, consoleSize.X, consoleSize.Y - fontHeight);
consoleNotifyBox = new ConsoleContentTextBox(null, 0, 0, 0, 0);
consoleNotifyBox.HeightMultiplier = 0;
consoleNotifyBox.Height = ConsoleNotifyLines * fontHeight;
consoleNotifyBox.SetAnchorPreset(AnchorPresets.HorizontalStretchTop, true);
//consoleBox.AnchorMax = new Vector2(1.0f, ConsoleHeight);
consoleNotifyBox.Font = fontReference;
//consoleBox.HorizontalAlignment = TextAlignment.Near;
//consoleBox.VerticalAlignment = TextAlignment.Near;
//consoleNotifyBox.HeightMultiplier = ConsoleHeight;
consoleNotifyBox.Wrapping = TextWrapping.WrapWords;
consoleNotifyBox.BackgroundColor = Color.Transparent;
consoleNotifyBox.BackgroundSelectedColor = Color.Transparent;
consoleNotifyBox.BackgroundSelectedFlashSpeed = 0;
consoleNotifyBox.BorderSelectedColor = Color.Transparent;
consoleNotifyBox.CaretFlashSpeed = 0;
consoleNotifyBox.LineSpacing = LineSpacing;
}
var locationFix2 = consoleNotifyBox.Location;
var parentControl2 = Actor.AddChild<UIControl>();
parentControl2.Name = "ConsoleNotifyContent";
parentControl2.Control = consoleNotifyBox;
consoleNotifyBox.Location = locationFix2; // workaround to UIControl.Control overriding the old position
}
{
@@ -176,7 +214,7 @@ namespace Cabrito
Console.RegisterConsoleScript(this);
RefreshLayout();
#if true
#if false
//for (int i = 0; i < 10; i++)
{
string[] teststr = {
@@ -259,12 +297,12 @@ namespace Cabrito
private void OnSendLog(LogType level, string msg, FlaxEngine.Object obj, string stackTrace)
{
//Console.Print("[DEBUG] " + msg);
Console.Print("[DEBUG] " + msg);
}
private void OnSendExceptionLog(Exception exception, FlaxEngine.Object obj)
{
//Console.Print("[EXCEP] " + exception.Message);
Console.Print("[EXCEP] " + exception.Message);
}
public override void OnDestroy()
@@ -273,6 +311,7 @@ namespace Cabrito
//consoleInputEvent.Triggered -= OnConsoleInputEvent;
consoleInputEvent?.Dispose();
consoleBox?.Dispose();
consoleNotifyBox?.Dispose();
Debug.Logger.LogHandler.SendLog -= OnSendLog;
Debug.Logger.LogHandler.SendExceptionLog -= OnSendExceptionLog;
@@ -359,8 +398,6 @@ namespace Cabrito
Profiler.BeginEvent("ConsoleScript_OnUpdate");
base.OnUpdate();
const float consoleSpeed = 3500f;
float targetY;
if (!Console.IsOpen)
targetY = -rootControl.Control.Height;
@@ -372,28 +409,49 @@ namespace Cabrito
{
if (location.Y > targetY)
{
location.Y -= Time.UnscaledDeltaTime * consoleSpeed;
// closing
location.Y -= Time.UnscaledDeltaTime * ConsoleSpeed;
if (location.Y < targetY)
location.Y = targetY;
if (location.Y < targetY * ConsoleHeight)
location.Y = targetY;
}
else if (location.Y < targetY)
{
location.Y += Time.UnscaledDeltaTime * consoleSpeed;
// opening
if (location.Y < -rootControl.Control.Height * ConsoleHeight)
location.Y = -rootControl.Control.Height * ConsoleHeight;
location.Y += Time.UnscaledDeltaTime * ConsoleSpeed;
if (location.Y > targetY)
location.Y = targetY;
}
rootControl.Control.Location = location;
if (Console.IsOpen)
{
consoleNotifyBox.Visible = false;
consoleInputBox.Visible = true;
}
else if (!Console.IsOpen)
{
int fontHeight = consoleNotifyBox.Font.GetFont().Height;
if (location.Y < (-rootControl.Control.Height * ConsoleHeight) + fontHeight)
{
consoleNotifyBox.Visible = true;
consoleInputBox.Visible = false;
}
}
}
Profiler.EndEvent();
}
public override void AddLine(string text)
public override void OnLineAdded(string text)
{
/*if (string.IsNullOrEmpty(consoleBox.Text))
consoleBox.Text += text;
else
consoleBox.Text += "\n" + text;*/
int fontHeight = consoleNotifyBox.Font.GetFont().Height;
consoleNotifyBox.Height = Math.Min(ConsoleNotifyLines, Console.Lines.Count) * fontHeight;
}
public override void SetInput(string text)

View File

@@ -150,14 +150,14 @@ namespace Cabrito
TargetViewOffset = new Vector2(0, GetRealLineSpacing());
}
public void ScrollToEnd()
/*public void ScrollToEnd()
{
float maxY = TextSize.Y - Height;
float spacing = GetRealLineSpacing();
maxY += spacing;
TargetViewOffset = new Vector2(0, Math.Max(0, maxY));
}
}*/
public override void ScrollToCaret()
{
@@ -175,7 +175,7 @@ namespace Cabrito
TargetViewOffset = Vector2.Clamp(newLocation, new Vector2(0, spacing), new Vector2(_targetViewOffset.X, maxY));
}
const bool smoothScrolling = false;
/*const bool smoothScrolling = false;
public override bool OnMouseWheel(Vector2 location, float delta)
{
@@ -192,7 +192,7 @@ namespace Cabrito
maxY += offset;
TargetViewOffset = Vector2.Clamp(_targetViewOffset - new Vector2(0, delta), new Vector2(0, offset), new Vector2(_targetViewOffset.X, maxY));
return true;
}
}*/
public override Vector2 GetTextSize()
{