UWindow
Class WindowConsole

source: e:\games\UnrealTournament\UWindow\Classes\WindowConsole.uc
Core.Object
   |
   +--Engine.Console
      |
      +--UWindow.WindowConsole
Direct Known Subclasses:UBrowserConsole, UnrealConsole

class WindowConsole
extends Engine.Console

//============================================================================= // WindowConsole - console replacer to implement UWindow UI System //=============================================================================
Variables
 class ConsoleClass
 byte ConsoleKey
 UWindowConsoleWindow ConsoleWindow
 float MouseScale
 float MouseX
 float MouseY
 float OldClipX
 float OldClipY
 string OldLevel
 UWindowRootWindow Root
 string RootWindow
 bool ShowDesktop
 EInputKey UWindowKey
 bool bBlackout
 bool bCreatedRoot
 bool bLevelChange
 bool bLocked
 bool bQuickKeyEnable
 bool bShowConsole
 bool bUWindowActive
 bool bUWindowType

States
UWindow

Function Summary
 void CloseUWindow()
 void CreateRootWindow(Canvas Canvas)
 void HideConsole()
 void HistoryDown()
 void HistoryUp()
 void LaunchUWindow()
 void NotifyLevelChange()
 void RenderUWindow(Canvas Canvas)
 void ResetUWindow()
 void ShowConsole()
 void ToggleUWindow()
 void UpdateHistory()


State UWindow Function Summary



Source Code


00001	//=============================================================================
00002	// WindowConsole - console replacer to implement UWindow UI System
00003	//=============================================================================
00004	class WindowConsole extends Console;
00005	
00006	var UWindowRootWindow	Root;
00007	var() config string		RootWindow;
00008	
00009	var float				OldClipX;
00010	var float				OldClipY;
00011	var bool				bCreatedRoot;
00012	var float				MouseX;
00013	var float				MouseY;
00014	
00015	var class<UWindowConsoleWindow> ConsoleClass;
00016	var config float		MouseScale;
00017	var config bool			ShowDesktop;
00018	var config bool			bShowConsole;
00019	var bool				bBlackout;
00020	var bool				bUWindowType;
00021	
00022	var bool				bUWindowActive;
00023	var bool				bQuickKeyEnable;
00024	var bool				bLocked;
00025	var bool				bLevelChange;
00026	var string				OldLevel;
00027	var globalconfig byte	ConsoleKey;
00028	
00029	var config EInputKey	UWindowKey;
00030	
00031	var UWindowConsoleWindow ConsoleWindow;
00032	
00033	function ResetUWindow()
00034	{
00035		if(Root != None)
00036			Root.Close();
00037		Root = None;
00038		bCreatedRoot = False;
00039		ConsoleWindow = None;
00040		bShowConsole = False;
00041		CloseUWindow();
00042	}
00043	
00044	event bool KeyEvent( EInputKey Key, EInputAction Action, FLOAT Delta )
00045	{
00046		local byte k;
00047		k = Key;
00048		switch(Action)
00049		{
00050		case IST_Press:
00051			switch(k)
00052			{
00053			case EInputKey.IK_Escape:
00054				if (bLocked)
00055					return true;
00056	
00057				bQuickKeyEnable = False;
00058				LaunchUWindow();
00059				return true;
00060			case ConsoleKey:
00061				if (bLocked)
00062					return true;
00063	
00064				bQuickKeyEnable = True;
00065				LaunchUWindow();
00066				if(!bShowConsole)
00067					ShowConsole();
00068				return true;
00069			}
00070			break;
00071		}
00072	
00073		return False; 
00074		//!! because of ConsoleKey
00075		//!! return Super.KeyEvent(Key, Action, Delta);
00076	}
00077	
00078	function ShowConsole()
00079	{
00080		bShowConsole = true;
00081		if(bCreatedRoot)
00082			ConsoleWindow.ShowWindow();
00083	}
00084	
00085	function HideConsole()
00086	{
00087		ConsoleLines = 0;
00088		bShowConsole = false;
00089		if (ConsoleWindow != None)
00090			ConsoleWindow.HideWindow();
00091	}
00092	
00093	event Tick( float Delta )
00094	{
00095		Super.Tick(Delta);
00096	
00097		if(bLevelChange && Root != None && string(Viewport.Actor.Level) != OldLevel)
00098		{
00099			OldLevel = string(Viewport.Actor.Level);
00100			// if this is Entry, we could be falling through to another level...
00101			if(Viewport.Actor.Level != Viewport.Actor.GetEntryLevel())
00102				bLevelChange = False;
00103			Root.NotifyAfterLevelChange();
00104		}
00105	}
00106	
00107	state UWindow
00108	{
00109		event Tick( float Delta )
00110		{
00111			Global.Tick(Delta);
00112			if(Root != None)
00113				Root.DoTick(Delta);
00114		}
00115	
00116		event PostRender( canvas Canvas )
00117		{
00118			if( bTimeDemo )
00119			{	
00120				TimeDemoCalc();
00121				TimeDemoRender( Canvas );
00122			}
00123	
00124			if(Root != None)
00125				Root.bUWindowActive = True;
00126			RenderUWindow( Canvas );
00127		}
00128	
00129		event bool KeyType( EInputKey Key )
00130		{
00131			if (Root != None)
00132				Root.WindowEvent(WM_KeyType, None, MouseX, MouseY, Key);
00133			return True;
00134		}
00135	
00136		event bool KeyEvent( EInputKey Key, EInputAction Action, FLOAT Delta )
00137		{
00138			local byte k;
00139			k = Key;
00140	
00141			switch (Action)
00142			{
00143			case IST_Release:
00144				switch (k)
00145				{
00146				case EInputKey.IK_LeftMouse:
00147					if(Root != None) 
00148						Root.WindowEvent(WM_LMouseUp, None, MouseX, MouseY, k);
00149					break;
00150				case EInputKey.IK_RightMouse:
00151					if(Root != None)
00152						Root.WindowEvent(WM_RMouseUp, None, MouseX, MouseY, k);
00153					break;
00154				case EInputKey.IK_MiddleMouse:
00155					if(Root != None)
00156						Root.WindowEvent(WM_MMouseUp, None, MouseX, MouseY, k);
00157					break;
00158				default:
00159					if(Root != None)
00160						Root.WindowEvent(WM_KeyUp, None, MouseX, MouseY, k);
00161					break;
00162				}
00163				break;
00164	
00165			case IST_Press:
00166				switch (k)
00167				{
00168				case EInputKey.IK_F9:	// Screenshot
00169					return Global.KeyEvent(Key, Action, Delta);
00170					break;
00171				case ConsoleKey:
00172					if (bShowConsole)
00173					{
00174						HideConsole();
00175						if(bQuickKeyEnable)
00176							CloseUWindow();
00177					}
00178					else
00179					{
00180						if(Root.bAllowConsole)
00181							ShowConsole();
00182						else
00183							Root.WindowEvent(WM_KeyDown, None, MouseX, MouseY, k);
00184					}
00185					break;
00186				case EInputKey.IK_Escape:
00187					if(Root != None)
00188						Root.CloseActiveWindow();
00189					break;
00190				case EInputKey.IK_LeftMouse:
00191					if(Root != None)
00192						Root.WindowEvent(WM_LMouseDown, None, MouseX, MouseY, k);
00193					break;
00194				case EInputKey.IK_RightMouse:
00195					if(Root != None)
00196						Root.WindowEvent(WM_RMouseDown, None, MouseX, MouseY, k);
00197					break;
00198				case EInputKey.IK_MiddleMouse:
00199					if(Root != None)
00200						Root.WindowEvent(WM_MMouseDown, None, MouseX, MouseY, k);
00201					break;
00202				default:
00203					if(Root != None)
00204						Root.WindowEvent(WM_KeyDown, None, MouseX, MouseY, k);
00205					break;
00206				}
00207				break;
00208			case IST_Axis:
00209				switch (Key)
00210				{
00211				case IK_MouseX:
00212					MouseX = MouseX + (MouseScale * Delta);
00213					break;
00214				case IK_MouseY:
00215					MouseY = MouseY - (MouseScale * Delta);
00216					break;					
00217				}
00218			default:
00219				break;
00220			}
00221	
00222			return true;
00223		}
00224	
00225	Begin:
00226	}
00227	
00228	function ToggleUWindow()
00229	{
00230	}
00231	
00232	function LaunchUWindow()
00233	{
00234		local int i;
00235	
00236		Viewport.bSuspendPrecaching = True;
00237		bUWindowActive = !bQuickKeyEnable;
00238		Viewport.bShowWindowsMouse = True;
00239	
00240		if(bQuickKeyEnable)
00241			bNoDrawWorld = False;
00242		else
00243		{
00244			if(Viewport.Actor.Level.NetMode == NM_Standalone)
00245				Viewport.Actor.SetPause( True );
00246			bNoDrawWorld = ShowDesktop;
00247		}
00248		if(Root != None)
00249			Root.bWindowVisible = True;
00250	
00251		GotoState('UWindow');
00252	}
00253	
00254	function CloseUWindow()
00255	{
00256		if(!bQuickKeyEnable)
00257			Viewport.Actor.SetPause( False );
00258	
00259		bNoDrawWorld = False;
00260		bQuickKeyEnable = False;
00261		bUWindowActive = False;
00262		Viewport.bShowWindowsMouse = False;
00263	
00264		if(Root != None)
00265			Root.bWindowVisible = False;
00266		GotoState('');
00267		Viewport.bSuspendPrecaching = False;
00268	}
00269	
00270	function CreateRootWindow(Canvas Canvas)
00271	{
00272		local int i;
00273	
00274		if(Canvas != None)
00275		{
00276			OldClipX = Canvas.ClipX;
00277			OldClipY = Canvas.ClipY;
00278		}
00279		else
00280		{
00281			OldClipX = 0;
00282			OldClipY = 0;
00283		}
00284		
00285		Log("Creating root window: "$RootWindow);
00286		
00287		Root = New(None) class<UWindowRootWindow>(DynamicLoadObject(RootWindow, class'Class'));
00288	
00289		Root.BeginPlay();
00290		Root.WinTop = 0;
00291		Root.WinLeft = 0;
00292	
00293		if(Canvas != None)
00294		{
00295			Root.WinWidth = Canvas.ClipX / Root.GUIScale;
00296			Root.WinHeight = Canvas.ClipY / Root.GUIScale;
00297			Root.RealWidth = Canvas.ClipX;
00298			Root.RealHeight = Canvas.ClipY;
00299		}
00300		else
00301		{
00302			Root.WinWidth = 0;
00303			Root.WinHeight = 0;
00304			Root.RealWidth = 0;
00305			Root.RealHeight = 0;
00306		}
00307	
00308		Root.ClippingRegion.X = 0;
00309		Root.ClippingRegion.Y = 0;
00310		Root.ClippingRegion.W = Root.WinWidth;
00311		Root.ClippingRegion.H = Root.WinHeight;
00312	
00313		Root.Console = Self;
00314	
00315		Root.bUWindowActive = bUWindowActive;
00316	
00317		Root.Created();
00318		bCreatedRoot = True;
00319	
00320		// Create the console window.
00321		ConsoleWindow = UWindowConsoleWindow(Root.CreateWindow(ConsoleClass, 100, 100, 200, 200));
00322		if(!bShowConsole)
00323			HideConsole();
00324	
00325		UWindowConsoleClientWindow(ConsoleWindow.ClientArea).TextArea.AddText(" ");
00326		for (I=0; I<4; I++)
00327			UWindowConsoleClientWindow(ConsoleWindow.ClientArea).TextArea.AddText(MsgText[I]);
00328	}
00329	
00330	function RenderUWindow( canvas Canvas )
00331	{
00332		local UWindowWindow NewFocusWindow;
00333	
00334		Canvas.bNoSmooth = True;
00335		Canvas.Z = 1;
00336		Canvas.Style = 1;
00337		Canvas.DrawColor.r = 255;
00338		Canvas.DrawColor.g = 255;
00339		Canvas.DrawColor.b = 255;
00340	
00341		if(Viewport.bWindowsMouseAvailable && Root != None)
00342		{
00343			MouseX = Viewport.WindowsMouseX/Root.GUIScale;
00344			MouseY = Viewport.WindowsMouseY/Root.GUIScale;
00345		}
00346	
00347		if(!bCreatedRoot) 
00348			CreateRootWindow(Canvas);
00349	
00350		Root.bWindowVisible = True;
00351		Root.bUWindowActive = bUWindowActive;
00352		Root.bQuickKeyEnable = bQuickKeyEnable;
00353	
00354		if(Canvas.ClipX != OldClipX || Canvas.ClipY != OldClipY)
00355		{
00356			OldClipX = Canvas.ClipX;
00357			OldClipY = Canvas.ClipY;
00358			
00359			Root.WinTop = 0;
00360			Root.WinLeft = 0;
00361			Root.WinWidth = Canvas.ClipX / Root.GUIScale;
00362			Root.WinHeight = Canvas.ClipY / Root.GUIScale;
00363	
00364			Root.RealWidth = Canvas.ClipX;
00365			Root.RealHeight = Canvas.ClipY;
00366	
00367			Root.ClippingRegion.X = 0;
00368			Root.ClippingRegion.Y = 0;
00369			Root.ClippingRegion.W = Root.WinWidth;
00370			Root.ClippingRegion.H = Root.WinHeight;
00371	
00372			Root.Resized();
00373		}
00374	
00375		if(MouseX > Root.WinWidth) MouseX = Root.WinWidth;
00376		if(MouseY > Root.WinHeight) MouseY = Root.WinHeight;
00377		if(MouseX < 0) MouseX = 0;
00378		if(MouseY < 0) MouseY = 0;
00379	
00380	
00381		// Check for keyboard focus
00382		NewFocusWindow = Root.CheckKeyFocusWindow();
00383	
00384		if(NewFocusWindow != Root.KeyFocusWindow)
00385		{
00386			Root.KeyFocusWindow.KeyFocusExit();		
00387			Root.KeyFocusWindow = NewFocusWindow;
00388			Root.KeyFocusWindow.KeyFocusEnter();
00389		}
00390	
00391	
00392		Root.MoveMouse(MouseX, MouseY);
00393		Root.WindowEvent(WM_Paint, Canvas, MouseX, MouseY, 0);
00394		if(bUWindowActive || bQuickKeyEnable) 
00395			Root.DrawMouse(Canvas);
00396	}
00397	
00398	event Message( PlayerReplicationInfo PRI, coerce string Msg, name N )
00399	{
00400		local string OutText;
00401	
00402		Super.Message( PRI, Msg, N );
00403	
00404		if ( Viewport.Actor == None )
00405			return;
00406	
00407		if( Msg!="" )
00408		{
00409			if (( MsgType[TopLine] == 'Say' ) || ( MsgType[TopLine] == 'TeamSay' ))
00410				OutText = MsgPlayer[TopLine].PlayerName$": "$MsgText[TopLine];
00411			else
00412				OutText = MsgText[TopLine];
00413			if (ConsoleWindow != None)
00414				UWindowConsoleClientWindow(ConsoleWindow.ClientArea).TextArea.AddText(OutText);
00415		}
00416	}
00417	
00418	event AddString( coerce string Msg )
00419	{
00420		Super.AddString( Msg );
00421	
00422		if( Msg!="" )
00423		{
00424			if (ConsoleWindow != None)
00425				UWindowConsoleClientWindow(ConsoleWindow.ClientArea).TextArea.AddText(Msg);
00426		}
00427	}
00428	
00429	function UpdateHistory()
00430	{
00431		// Update history buffer.
00432		History[HistoryCur++ % MaxHistory] = TypedStr;
00433		if( HistoryCur > HistoryBot )
00434			HistoryBot++;
00435		if( HistoryCur - HistoryTop >= MaxHistory )
00436			HistoryTop = HistoryCur - MaxHistory + 1;
00437	}
00438	
00439	function HistoryUp()
00440	{
00441		if( HistoryCur > HistoryTop )
00442		{
00443			History[HistoryCur % MaxHistory] = TypedStr;
00444			TypedStr = History[--HistoryCur % MaxHistory];
00445		}
00446	}
00447	
00448	function HistoryDown()
00449	{
00450		History[HistoryCur % MaxHistory] = TypedStr;
00451		if( HistoryCur < HistoryBot )
00452			TypedStr = History[++HistoryCur % MaxHistory];
00453		else
00454			TypedStr="";
00455	}
00456	
00457	function NotifyLevelChange()
00458	{
00459		Super.NotifyLevelChange();
00460		bLevelChange = True;
00461		if(Root != None)
00462			Root.NotifyBeforeLevelChange();
00463	}
00464	
00465	defaultproperties
00466	{
00467	     RootWindow="UWindow.UWindowRootWindow"
00468	     ConsoleClass=Class'UWindow.UWindowConsoleWindow'
00469	     MouseScale=0.600000
00470	     ConsoleKey=192
00471	}

End Source Code