| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | using System.Collections.Generic;using System.Globalization;using System.Text;using UnityEngine;// Container for a simple debug entrynamespace IngameDebugConsole{	public class DebugLogEntry	{		private const int HASH_NOT_CALCULATED = -623218;		public string logString;		public string stackTrace;		private string completeLog;		// Sprite to show with this entry		public LogType logType;		// Collapsed count		public int count;		// Index of this entry among all collapsed entries		public int collapsedIndex;		private int hashValue;		public void Initialize( string logString, string stackTrace )		{			this.logString = logString;			this.stackTrace = stackTrace;			completeLog = null;			count = 1;			hashValue = HASH_NOT_CALCULATED;		}		public void Clear()		{			logString = null;			stackTrace = null;			completeLog = null;		}		// 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 int GetContentHashCode()		{			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 System.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( System.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( "[" );			int hour = dateTime.Hour;			if( hour >= 10 )				sb.Append( hour );			else				sb.Append( "0" ).Append( hour );			sb.Append( ":" );			int minute = dateTime.Minute;			if( minute >= 10 )				sb.Append( minute );			else				sb.Append( "0" ).Append( minute );			sb.Append( ":" );			int 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		}	}	public class DebugLogEntryContentEqualityComparer : EqualityComparer<DebugLogEntry>	{		public override bool Equals( DebugLogEntry x, DebugLogEntry y )		{			return x.logString == y.logString && x.stackTrace == y.stackTrace;		}		public override int GetHashCode( DebugLogEntry obj )		{			return obj.GetContentHashCode();		}	}}
 |