KevinBlast/common/client/cursor.cs

100 lines
2.7 KiB
C#

//-----------------------------------------------------------------------------
// Torque Game Engine
//
// Copyright (c) 2001 GarageGames.Com
// Portions Copyright (c) 2001 by Sierra Online, Inc.
//-----------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Cursor Control
//------------------------------------------------------------------------------
$cursorControlled = true;
function cursorOff()
{
if ( $cursorControlled )
lockMouse(true);
Canvas.cursorOff();
}
function cursorOn()
{
if ( $cursorControlled )
lockMouse(false);
Canvas.cursorOn();
Canvas.setCursor(DefaultCursor);
}
// In the CanvasCursor package we add some additional functionality to the
// built-in GuiCanvas class, of which the global Canvas object is an instance.
// In this case, the behavior we want is for the cursor to automatically display,
// except when the only guis visible want no cursor - most notably,
// in the case of the example, the play gui.
// In order to override or extend an existing class, we use the script package
// feature.
package CanvasCursor
{
// The checkCursor method iterates through all the root controls on the canvas
// (basically the content control and any visible dialogs). If all of them
// have the .noCursor attribute set, the cursor is turned off, otherwise it is
// turned on.
function GuiCanvas::checkCursor(%this)
{
%cursorShouldBeOn = false;
for(%i = 0; %i < %this.getCount(); %i++)
{
%control = %this.getObject(%i);
if(%control.noCursor $= "")
{
%cursorShouldBeOn = true;
break;
}
}
if(%cursorShouldBeOn != %this.isCursorOn())
{
if(%cursorShouldBeOn)
cursorOn();
else
cursorOff();
}
}
// below, all functions which can alter which content controls are visible
// are extended to call the checkCursor function. For package'd functions,
// the Parent:: call refers to the original implementation of that function,
// or a version that was declared in a previously activated package.
// In this case the parent calls should point to the built in versions
// of GuiCanvas functions.
function GuiCanvas::setContent(%this, %ctrl)
{
Parent::setContent(%this, %ctrl);
%this.checkCursor();
}
function GuiCanvas::pushDialog(%this, %ctrl)
{
Parent::pushDialog(%this, %ctrl);
%this.checkCursor();
}
function GuiCanvas::popDialog(%this, %ctrl)
{
Parent::popDialog(%this, %ctrl);
%this.checkCursor();
}
function GuiCanvas::popLayer(%this, %layer)
{
Parent::popLayer(%this, %layer);
%this.checkCursor();
}
};
// activate the package when the script loads.
activatePackage(CanvasCursor);