174 lines
5.5 KiB
C#
174 lines
5.5 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
// Container for a simple debug entry
|
|
namespace IngameDebugConsole
|
|
{
|
|
public class DebugLogEntry : IEquatable<DebugLogEntry>
|
|
{
|
|
private const int HASH_NOT_CALCULATED = -623218;
|
|
|
|
private string completeLog;
|
|
|
|
// Collapsed count
|
|
public int count;
|
|
|
|
private int hashValue;
|
|
|
|
public string logString;
|
|
|
|
// Sprite to show with this entry
|
|
public Sprite logTypeSpriteRepresentation;
|
|
public string stackTrace;
|
|
|
|
// Check if two entries have the same origin
|
|
public bool Equals(DebugLogEntry other)
|
|
{
|
|
return logString == other.logString && stackTrace == other.stackTrace;
|
|
}
|
|
|
|
public void Initialize(string logString, string stackTrace)
|
|
{
|
|
this.logString = logString;
|
|
this.stackTrace = stackTrace;
|
|
|
|
completeLog = null;
|
|
count = 1;
|
|
hashValue = HASH_NOT_CALCULATED;
|
|
}
|
|
|
|
// Checks if logString or stackTrace contains the search term
|
|
public bool MatchesSearchTerm(string searchTerm)
|
|
{
|
|
return (logString != null && DebugLogConsole.caseInsensitiveComparer.IndexOf(logString, searchTerm,
|
|
CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) >= 0) ||
|
|
(stackTrace != null && DebugLogConsole.caseInsensitiveComparer.IndexOf(stackTrace, searchTerm,
|
|
CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) >= 0);
|
|
}
|
|
|
|
// Return a string containing complete information about this debug entry
|
|
public override string ToString()
|
|
{
|
|
if (completeLog == null)
|
|
completeLog = string.Concat(logString, "\n", stackTrace);
|
|
|
|
return completeLog;
|
|
}
|
|
|
|
// Credit: https://stackoverflow.com/a/19250516/2373034
|
|
public override int GetHashCode()
|
|
{
|
|
if (hashValue == HASH_NOT_CALCULATED)
|
|
unchecked
|
|
{
|
|
hashValue = 17;
|
|
hashValue = hashValue * 23 + (logString == null ? 0 : logString.GetHashCode());
|
|
hashValue = hashValue * 23 + (stackTrace == null ? 0 : stackTrace.GetHashCode());
|
|
}
|
|
|
|
return hashValue;
|
|
}
|
|
}
|
|
|
|
public struct QueuedDebugLogEntry
|
|
{
|
|
public readonly string logString;
|
|
public readonly string stackTrace;
|
|
public readonly LogType logType;
|
|
|
|
public QueuedDebugLogEntry(string logString, string stackTrace, LogType logType)
|
|
{
|
|
this.logString = logString;
|
|
this.stackTrace = stackTrace;
|
|
this.logType = logType;
|
|
}
|
|
|
|
// Checks if logString or stackTrace contains the search term
|
|
public bool MatchesSearchTerm(string searchTerm)
|
|
{
|
|
return (logString != null && DebugLogConsole.caseInsensitiveComparer.IndexOf(logString, searchTerm,
|
|
CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) >= 0) ||
|
|
(stackTrace != null && DebugLogConsole.caseInsensitiveComparer.IndexOf(stackTrace, searchTerm,
|
|
CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) >= 0);
|
|
}
|
|
}
|
|
|
|
public struct DebugLogEntryTimestamp
|
|
{
|
|
public readonly DateTime dateTime;
|
|
#if !IDG_OMIT_ELAPSED_TIME
|
|
public readonly float elapsedSeconds;
|
|
#endif
|
|
#if !IDG_OMIT_FRAMECOUNT
|
|
public readonly int frameCount;
|
|
#endif
|
|
|
|
#if !IDG_OMIT_ELAPSED_TIME && !IDG_OMIT_FRAMECOUNT
|
|
public DebugLogEntryTimestamp(DateTime dateTime, float elapsedSeconds, int frameCount)
|
|
#elif !IDG_OMIT_ELAPSED_TIME
|
|
public DebugLogEntryTimestamp( System.DateTime dateTime, float elapsedSeconds )
|
|
#elif !IDG_OMIT_FRAMECOUNT
|
|
public DebugLogEntryTimestamp( System.DateTime dateTime, int frameCount )
|
|
#else
|
|
public DebugLogEntryTimestamp( System.DateTime dateTime )
|
|
#endif
|
|
{
|
|
this.dateTime = dateTime;
|
|
#if !IDG_OMIT_ELAPSED_TIME
|
|
this.elapsedSeconds = elapsedSeconds;
|
|
#endif
|
|
#if !IDG_OMIT_FRAMECOUNT
|
|
this.frameCount = frameCount;
|
|
#endif
|
|
}
|
|
|
|
public void AppendTime(StringBuilder sb)
|
|
{
|
|
// Add DateTime in format: [HH:mm:ss]
|
|
sb.Append("[");
|
|
|
|
var hour = dateTime.Hour;
|
|
if (hour >= 10)
|
|
sb.Append(hour);
|
|
else
|
|
sb.Append("0").Append(hour);
|
|
|
|
sb.Append(":");
|
|
|
|
var minute = dateTime.Minute;
|
|
if (minute >= 10)
|
|
sb.Append(minute);
|
|
else
|
|
sb.Append("0").Append(minute);
|
|
|
|
sb.Append(":");
|
|
|
|
var second = dateTime.Second;
|
|
if (second >= 10)
|
|
sb.Append(second);
|
|
else
|
|
sb.Append("0").Append(second);
|
|
|
|
sb.Append("]");
|
|
}
|
|
|
|
public void AppendFullTimestamp(StringBuilder sb)
|
|
{
|
|
AppendTime(sb);
|
|
|
|
#if !IDG_OMIT_ELAPSED_TIME && !IDG_OMIT_FRAMECOUNT
|
|
// Append elapsed seconds and frame count in format: [1.0s at #Frame]
|
|
sb.Append("[").Append(elapsedSeconds.ToString("F1")).Append("s at ").Append("#").Append(frameCount)
|
|
.Append("]");
|
|
#elif !IDG_OMIT_ELAPSED_TIME
|
|
// Append elapsed seconds in format: [1.0s]
|
|
sb.Append( "[" ).Append( elapsedSeconds.ToString( "F1" ) ).Append( "s]" );
|
|
#elif !IDG_OMIT_FRAMECOUNT
|
|
// Append frame count in format: [#Frame]
|
|
sb.Append( "[#" ).Append( frameCount ).Append( "]" );
|
|
#endif
|
|
}
|
|
}
|
|
} |