TheMuseumProject/Assets/DebugConsole/Scripts/DebugLogEntry.cs

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
}
}
}