I'm a doctor, not a mechanic

Difference between revisions of "Legacy:Log Interaction"

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
(* Added page with debug helper class)
 
m (arf)
Line 1: Line 1:
'''Shambler:''' Got fed up of using the log window to debug stuff so made this real quick....basically this code will allow you to display log info on the HUD ingame and there are a number of ways you can format it to stand out.
+
Shambler: Placeholder for a page I'm bout to add
 
+
Posting it on the wiki for others who may find use in it.
+
:<wiki>[[Image:Legacy_pgDebugLog.jpeg|]]
+
 
+
==How to use it==
+
 
+
Create a mutator like this one:
+
 
+
<uscript>
+
Class pgPortalGunMut extends Mutator;
+
 
+
function ModifyPlayer(Pawn Other)
+
{
+
local int i;
+
 
+
// Debug
+
if (Other.Controller != none && PlayerController(Other.Controller) != none && PlayerController(Other.Controller).Player != none
+
&& PlayerController(Other.Controller).Player.InteractionMaster != none)
+
{
+
for (i=0; i<PlayerController(Other.Controller).Player.LocalInteractions.Length; ++i)
+
{
+
if (MathDebugInteraction(PlayerController(Other.Controller).Player.LocalInteractions[i]) != none)
+
{
+
bSkip = True;
+
break;
+
}
+
}
+
 
+
if (!bSkip)
+
PlayerController(Other.Controller).Player.InteractionMaster.AddInteraction(string(Class'MathDebugInteraction'), PlayerController(Other.Controller).Player);
+
}
+
 
+
Super.ModifyPlayer(Other);
+
}
+
 
+
function Mutate(string MutateString, PlayerController Sender)
+
{
+
local int i;
+
 
+
if (MutateString ~= "pgToggleDebug")
+
{
+
if (Sender.Player != none && Sender.Player.InteractionMaster != none)
+
{
+
for (i=0; i<Sender.Player.LocalInteractions.Length; ++i)
+
{
+
if (MathDebugInteraction(Sender.Player.LocalInteractions[i]) != none)
+
{
+
MathDebugInteraction(Sender.Player.LocalInteractions[i]).ToggleDebug();
+
break;
+
}
+
}
+
}
+
}
+
else
+
{
+
Super.Mutate(MutateString, Sender);
+
}
+
}
+
</uscript>
+
 
+
Add some debugging code to the class you want to debug
+
 
+
<uscript>
+
Class SomeClass extends SomeActor;
+
 
+
var MathDebugInteraction ActiveDebug;
+
var int FireMode; // This isn't important
+
 
+
function SomeFunction()
+
{
+
local float XDot, ZDot, ZAxisDiff, ClockX, ClockZ, DiffClockZ, ClockTest;
+
 
+
 
+
// Do stuff with these variables
+
XDot = Blah;
+
ZDot = Blah;
+
ZAxisDiff = Blah;
+
ClockX = Blah;
+
ClockZ = Blah;
+
ClockTest = Blah;
+
DiffClockZ = Blah;
+
 
+
 
+
 
+
// Log stuff to display on screen (shown in picture)
+
 
+
 
+
// Format of the LogString function: (copied here for reference)
+
 
+
// function LogString(string Info, optional color StringColor, optional bool bUseColor, optional bool bUnderline, optional color HighlightColor, optional bool bDontEndLine)
+
// Parameter 1: The string you want to log
+
// Parameter 2: The colour of the logstring
+
// Parameter 3: Pass in True if you put in a colour for parameter 2 (I should change this but cba)
+
// Parameter 4: Underline the text if True is passed in
+
// Parameter 5: If you pass a colour in (with an Alpha greater than 0) then the text is highlighted with that colour
+
// Parameter 6: If you want the next log string to write on the same line, pass in True here
+
 
+
 
+
 
+
 
+
// I want to rewrite the log info every tick, so check the timestamp on the debug object...if its 'out of date', use EmptyList to wipe the log data (specifying a new timestamp)
+
if (ActiveDebug.LogTimestamp != Level.TimeSeconds)
+
{
+
ActiveDebug.EmptyList(Level.TimeSeconds);
+
 
+
// The command to turn this off is detailed in the mutator class
+
ActiveDebug.LogString("To disable this text type: ", Class'Canvas'.static.MakeColor(0,255,0,255), True,,,True);
+
ActiveDebug.LogString("Mutate pgToggleDebug", Class'Canvas'.static.MakeColor(0,255,0,255), True, True);
+
ActiveDebug.LogString("");
+
}
+
 
+
 
+
if (FireMode == 0)
+
ActiveDebug.LogString("Portal"@FireMode, Class'Canvas'.static.MakeColor(255,255,255,255), True, True, Class'Canvas'.static.MakeColor(0,128,255));
+
else
+
ActiveDebug.LogString("Portal"@FireMode, Class'Canvas'.static.MakeColor(255,255,255,255), True, True, Class'Canvas'.static.MakeColor(255,128,0));
+
 
+
 
+
ActiveDebug.LogString("XDot", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(XY Axis change) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(XDot),,,, Class'Canvas'.static.MakeColor(0,255,255,64), True);
+
ActiveDebug.LogString(" or ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(ACos(XDot) * 57.295779)$"º",,,, Class'Canvas'.static.MakeColor(255,255,0,64));
+
 
+
ActiveDebug.LogString("ZDot", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(Z Axis change) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(ZDot),,,, Class'Canvas'.static.MakeColor(0,255,255,64), True);
+
ActiveDebug.LogString(" or ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(ACos(ZDot) * 57.295779)$"º",,,, Class'Canvas'.static.MakeColor(255,255,0,64));
+
 
+
ActiveDebug.LogString("ZAxisDiff", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(Portal Up-Axis offset) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(ZAxisDiff),,,, Class'Canvas'.static.MakeColor(0,255,255,64), True);
+
ActiveDebug.LogString(" or ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(ACos(ZAxisDiff) * 57.295779)$"º",,,, Class'Canvas'.static.MakeColor(255,255,0,64));
+
 
+
ActiveDebug.LogString("ClockX", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(XDot/Yaw clockwise?) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(bool(ClockX)),,,, Class'Canvas'.static.MakeColor(0,255,255,64));
+
 
+
ActiveDebug.LogString("ClockZ", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(ZDot/Pitch clockwise?) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(bool(ClockZ)),,,, Class'Canvas'.static.MakeColor(0,255,255,64));
+
 
+
ActiveDebug.LogString("DiffClockZ", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString(" is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(bool(DiffClockZ)),,,, Class'Canvas'.static.MakeColor(0,255,255,64));
+
 
+
ActiveDebug.LogString("ClockTest", Class'Canvas'.static.MakeColor(255,255,255,255), True, True,, True);
+
ActiveDebug.LogString("(ZDot/Roll clockwise?) is: ", Class'Canvas'.static.MakeColor(255,255,255,255), True,,,True);
+
ActiveDebug.LogString(string(bool(ClockTest)),,,, Class'Canvas'.static.MakeColor(0,255,255,64));
+
 
+
ActiveDebug.LogString("");
+
}
+
</uscript>
+
 
+
And put this in a .uc file in with your source, modify the 'foreach' loop on line 45 so you can 'attach' (i.e. put a reference to) the interaction in the class you want to debug.
+
 
+
<uscript>
+
// An interaction to help me debug problems with the portal gun math
+
Class MathDebugInteraction extends Interaction;
+
 
+
struct LogElement
+
{
+
var string LogString;
+
var color StringColor;
+
var bool bUnderline;
+
var color HighlightColor;
+
var bool bDontEndLine;
+
};
+
 
+
var array<LogElement> LogList;
+
var int ListSpacing;
+
var color ListColor;
+
var font ListFont;
+
var float ListX, ListY, FontY, FontScale, LogTimestamp;
+
var bool bInitialSetup;
+
 
+
var bool bDisableDebug;
+
 
+
 
+
function ToggleDebug()
+
{
+
bDisableDebug = !bDisableDebug;
+
 
+
if (bDisableDebug)
+
EmptyList();
+
}
+
 
+
function PostRender(canvas Canvas)
+
{
+
local pgPortalDecal PD;
+
local int i;
+
local float LenX, LenY, LastX, LastY;
+
 
+
/*
+
EmptyList();
+
LogString("Arf, testing");
+
LogString("Wewt, testing2", Canvas.MakeColor(255,255,255,255), True, True,,True);
+
LogString("AMG TEST",,,True,Canvas.MakeColor(0,255,0,128));
+
LogString("FEYNAL TEST!!");
+
*/
+
 
+
if (ViewportOwner != none && ViewportOwner.Actor != none && ViewportOwner.Actor.Pawn != none && xPawn(ViewportOwner.Actor.Pawn) != none)
+
foreach ViewportOwner.Actor.DynamicActors(Class'pgPortalDecal', PD)
+
if (PD.Owner == ViewportOwner.Actor/* && PD.FireMode == 0*/ && PD.ActiveDebug != self)
+
PD.ActiveDebug = self;
+
 
+
 
+
if (LogList.Length == 0)
+
return;
+
 
+
 
+
// ListX and ListY in default properties tell the code where to start drawing (between 0.0 and 1.0), FontScale determines the size of font with changing screen size
+
if (!bInitialSetup)
+
{
+
ListX = Canvas.ClipX * ListX;
+
ListY = Canvas.ClipY * ListY;
+
FontScale = Canvas.ClipX * FontScale;
+
 
+
bInitialSetup = True;
+
}
+
 
+
 
+
Canvas.Reset();
+
 
+
 
+
// Setup stored variables
+
Canvas.Font = ListFont;
+
 
+
Canvas.Style = 5;
+
 
+
Canvas.CurX = ListX;
+
Canvas.CurY = ListY;
+
Canvas.FontScaleX = FontScale;
+
Canvas.FontScaleY = FontScale;
+
 
+
Canvas.DrawColor = ListColor;
+
 
+
if (FontY == 0)
+
Canvas.StrLen("X", FontY, FontY);
+
 
+
 
+
// Draw the list
+
for (i=0; i<LogList.Length; ++i)
+
{
+
if (Canvas.CurY < Canvas.ClipY && Canvas.CurX < Canvas.ClipX && LogList[i].LogString != "")
+
{
+
LastX = Canvas.CurX;
+
LastY = Canvas.CurY;
+
 
+
Canvas.StrLen(LogList[i].LogString, LenX, LenY);
+
 
+
// Manage highlighting
+
if (LogList[i].HighlightColor.A != 0)
+
{
+
Canvas.DrawColor = LogList[i].HighlightColor;
+
Canvas.DrawRect(Texture'WhiteTexture', Min(LenX, Canvas.ClipX - Canvas.CurX), FontY);
+
Canvas.CurX = LastX;
+
Canvas.CurY = LastY;
+
}
+
 
+
// Setup the color
+
Canvas.DrawColor = LogList[i].StringColor;
+
 
+
// Manage underlining
+
if (LogList[i].bUnderline)
+
{
+
Canvas.CurY += FontY;
+
Canvas.DrawRect(Texture'WhiteTexture', Min(LenX, Canvas.ClipX - Canvas.CurX), FontScale);
+
Canvas.CurX = LastX;
+
Canvas.CurY = LastY;
+
}
+
 
+
Canvas.DrawTextClipped(LogList[i].LogString);
+
 
+
 
+
Canvas.CurX += Min(LenX, Canvas.ClipX - Canvas.CurX);
+
}
+
 
+
 
+
// Endline
+
if (!LogList[i].bDontEndLine)
+
{
+
Canvas.CurX = ListX;
+
Canvas.CurY += ListSpacing + FontY;
+
}
+
}
+
 
+
Canvas.Reset();
+
}
+
 
+
function EmptyList(optional float NewTimestamp)
+
{
+
LogList.Length = 0;
+
 
+
if (NewTimestamp != 0.0)
+
LogTimestamp = NewTimestamp;
+
}
+
 
+
 
+
// LogString parameters:
+
// Parameter 1: The string you want to log
+
// Parameter 2: The colour of the logstring
+
// Parameter 3: Pass in True if you put in a colour for parameter 2 (I should change this but cba)
+
// Parameter 4: Underline the text if True is passed in
+
// Parameter 5: If you pass a colour in (with an Alpha greater than 0) then the text is highlighted with that colour
+
// Parameter 6: If you want the next log string to write on the same line, pass in True here
+
 
+
function LogString(string Info, optional color StringColor, optional bool bUseColor, optional bool bUnderline, optional color HighlightColor, optional bool bDontEndLine)
+
{
+
if (bDisableDebug)
+
return;
+
 
+
LogList.Length = LogList.Length + 1;
+
 
+
LogList[LogList.Length-1].LogString = Info;
+
 
+
 
+
if (bUseColor)
+
LogList[LogList.Length-1].StringColor = StringColor;
+
else
+
LogList[LogList.Length-1].StringColor = ListColor;
+
 
+
 
+
LogList[LogList.Length-1].bUnderline = bUnderline;
+
LogList[LogList.Length-1].HighlightColor = HighlightColor;
+
LogList[LogList.Length-1].bDontEndLine = bDontEndLine;
+
}
+
 
+
defaultproperties
+
{
+
bVisible=True
+
 
+
 
+
ListX=0.5625
+
ListY=0.125
+
ListSpacing=5
+
ListColor=(R=255,G=0,B=0,A=255)
+
ListFont=DefaultFont
+
FontScale=0.00125
+
}
+
</uscript>
+
 
+
'''Shambler:''' Feel free to reformat the page, just keep all the code as it is ;) (I may update it later)
+

Revision as of 08:51, 6 November 2006

Shambler: Placeholder for a page I'm bout to add