## Engine
Class Console

source: C:\XIII\Engine\Classes\Console.uc

    Core.Object
       |
       +--Engine.Interactions
          |
          +--Engine.Interaction
             |
             +--Engine.Console

Direct Known Subclasses:XIIIConsole

class Console
extends Engine.Interaction

    //=============================================================================

Variables
`byte` | `ConsoleKey` Key used to bring up the console
`HistoryBot,` | `HistoryCur` Key used to bring up the console
`TypedStr,` | `History[MaxHistory]` Holds the current command, and the history
`bool` | `bSkipNextKey` Turn when someone is typing on the console
`bool` | `bTyping` Turn when someone is typing on the console

States
Typing

Function Summary
`bool` | `KeyEvent(EInputKey Key, EInputAction Action, FLOAT Delta)`
    //-----------------------------------------------------------------------------
    // Check for the console key.
`void` | `Talk()`
`void` | `TeamTalk()`
`void` | `Type()`
    // Begin typing a command on the console.

State Typing Function Summary
`void` | `EndState()`
`void` | `BeginState()`
`void` | `PostRender(Canvas Canvas)`
`bool` | `KeyEvent(EInputKey Key, EInputAction Action, FLOAT Delta)`
`bool` | `KeyType(EInputKey Key)`
`void` | `Type()`

Source Code

    00001	//=============================================================================
    00002	// Console - A quick little command line console that accepts most commands.
    00003
    00004	//=============================================================================
    00005	class Console extends Interaction;
    00006
    00007	//#exec new TrueTypeFontFactory PACKAGE="Engine" Name=ConsoleFont FontName="Verdana" Height=12 AntiAlias=1 CharactersPerPage=256
    00008	#exec TEXTURE IMPORT NAME=ConsoleBK FILE=..\UWindow\TEXTURES\Black.PCX COMPRESS=DXT1
    00009	#exec TEXTURE IMPORT NAME=ConsoleBdr FILE=..\UWindow\TEXTURES\White.PCX	COMPRESS=DXT1
    00010
    00011	// Constants.
    00012	const MaxHistory=16;		// # of command histroy to remember.
    00013
    00014	// Variables
    00015
    00016	var globalconfig byte ConsoleKey;			// Key used to bring up the console
    00017
    00018	var int HistoryTop, HistoryBot, HistoryCur;
    00019	var string TypedStr, History[MaxHistory]; 	// Holds the current command, and the history
    00020	var bool bTyping;							// Turn when someone is typing on the console
    00021	var bool bSkipNextKey;
    00022
    00023	//-----------------------------------------------------------------------------
    00024	// Exec functions accessible from the console and key bindings.
    00025
    00026	// Begin typing a command on the console.
    00027	exec function Type()
    00028	{
    00029		TypedStr="";
    00030		GotoState( 'Typing' );
    00031	}
    00032
    00033	exec function Talk()
    00034	{
    00035		bSkipNextKey = true;
    00036		TypedStr="Say ";
    00037		GotoState( 'Typing' );
    00038	}
    00039
    00040	exec function TeamTalk()
    00041	{
    00042		bSkipNextKey = true;
    00043		TypedStr="TeamSay ";
    00044		GotoState( 'Typing' );
    00045	}
    00046
    00047	//-----------------------------------------------------------------------------
    00048	// Message - By default, the console ignores all output.
    00049	//-----------------------------------------------------------------------------
    00050
    00051	event Message( coerce string Msg, float MsgLife);
    00052
    00053	//-----------------------------------------------------------------------------
    00054	// Check for the console key.
    00055
    00056	function bool KeyEvent( EInputKey Key, EInputAction Action, FLOAT Delta )
    00057	{
    00058		if( Action!=IST_Press )
    00059			return false;
    00060		else if( Key==ConsoleKey )
    00061		{
    00062			GotoState('Typing');
    00063			return true;
    00064		}
    00065		else
    00066			return false;
    00067
    00068	}
    00069
    00070	//-----------------------------------------------------------------------------
    00071	// State used while typing a command on the console.
    00072
    00073	state Typing
    00074	{
    00075		exec function Type()
    00076		{
    00077			TypedStr="";
    00078			gotoState( '' );
    00079		}
    00080		function bool KeyType( EInputKey Key )
    00081		{
    00082			if ( bSkipNextKey )
    00083			{
    00084				bSkipNextKey = false;
    00085				return true;
    00086			}
    00087			if( Key>=0x20 && Key<0x100 && Key!=Asc("~") && Key!=Asc("`") && (Len(TypedStr) < 240) )
    00088			{
    00089				TypedStr = TypedStr $ Chr(Key);
    00090				return true;
    00091			}
    00092		}
    00093		function bool KeyEvent( EInputKey Key, EInputAction Action, FLOAT Delta )
    00094		{
    00095			local string Temp;
    00096			local int i;
    00097
    00098			if( Key==IK_Escape )
    00099			{
    00100				if( TypedStr!="" )
    00101				{
    00102					TypedStr="";
    00103					HistoryCur = HistoryTop;
    00104					return true;
    00105				}
    00106				else
    00107				{
    00108					GotoState( '' );
    00109				}
    00110			}
    00111			else if( global.KeyEvent( Key, Action, Delta ) )
    00112			{
    00113				return true;
    00114			}
    00115			else if( Action != IST_Press )
    00116			{
    00117				return false;
    00118			}
    00119			else if( Key==IK_Enter )
    00120			{
    00121				if( TypedStr!="" )
    00122				{
    00123					// Print to console.
    00124					Message( TypedStr, 6.0 );
    00125
    00126					History[HistoryTop] = TypedStr;
    00127					HistoryTop = (HistoryTop+1) % MaxHistory;
    00128
    00129					if ( ( HistoryBot == -1) || ( HistoryBot == HistoryTop ) )
    00130						HistoryBot = (HistoryBot+1) % MaxHistory;
    00131
    00132					HistoryCur = HistoryTop;
    00133
    00134					// Make a local copy of the string.
    00135					Temp=TypedStr;
    00136					TypedStr="";
    00137
    00138					if( !ConsoleCommand( Temp ) )
    00139						Message( Localize("Errors","Exec","Core"), 6.0 );
    00140
    00141					Message( "", 6.0 );
    00142					GotoState('');
    00143				}
    00144				else
    00145					GotoState('');
    00146
    00147				return true;
    00148			}
    00149			else if( Key==IK_Up )
    00150			{
    00151				if ( HistoryBot >= 0 )
    00152				{
    00153					if (HistoryCur == HistoryBot)
    00154						HistoryCur = HistoryTop;
    00155					else
    00156					{
    00157						HistoryCur--;
    00158						if (HistoryCur<0)
    00159							HistoryCur = MaxHistory-1;
    00160					}
    00161
    00162					TypedStr = History[HistoryCur];
    00163				}
    00164				return True;
    00165			}
    00166			else if( Key==IK_Down )
    00167			{
    00168				if ( HistoryBot >= 0 )
    00169				{
    00170					if (HistoryCur == HistoryTop)
    00171						HistoryCur = HistoryBot;
    00172					else
    00173						HistoryCur = (HistoryCur+1) % MaxHistory;
    00174
    00175					TypedStr = History[HistoryCur];
    00176				}
    00177
    00178			}
    00179			else if( Key==IK_Backspace || Key==IK_Left )
    00180			{
    00181				if( Len(TypedStr)>0 )
    00182					TypedStr = Left(TypedStr,Len(TypedStr)-1);
    00183				return true;
    00184			}
    00185			return true;
    00186		}
    00187
    00188		function PostRender(Canvas Canvas)
    00189		{
    00190				local float xl,yl;
    00191				local string OutStr;
    00192
    00193				// Blank out a space
    00194
    00195	//			Canvas.Font	 = font'ConsoleFont';
    00196				OutStr = "(>"@TypedStr$"_";
    00197				Canvas.Strlen(OutStr,xl,yl);
    00198
    00199				Canvas.SetPos(0,Canvas.ClipY-6-yl);
    00200				Canvas.DrawTile( texture 'ConsoleBk', Canvas.ClipX, yl+6,0,0,32,32);
    00201
    00202				Canvas.SetPos(0,Canvas.ClipY-8-yl);
    00203				Canvas.SetDrawColor(0,255,0);
    00204				Canvas.DrawTile( texture 'ConsoleBdr', Canvas.ClipX, 2,0,0,32,32);
    00205
    00206				Canvas.SetPos(0,Canvas.ClipY-3-yl);
    00207			    Canvas.bCenter = False;
    00208				Canvas.DrawText( OutStr, false );
    00209		}
    00210
    00211		function BeginState()
    00212		{
    00213			bTyping = true;
    00214			bVisible= true;
    00215			HistoryCur = HistoryTop;
    00216		}
    00217		function EndState()
    00218		{
    00219			bTyping = false;
    00220			bVisible = false;
    00221		}
    00222	}
    00223
    00224	defaultproperties
    00225	{
    00226	     ConsoleKey=113
    00227	     HistoryBot=-1
    00228	     bRequiresTick=True
    00229	}

End Source Code