home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Joystick Magazine 2003 November
/
CD1_JOY_153.iso
/
demos
/
NHL2004Demo.exe
/
fe
/
nhl
/
htc
/
conset
/
controller.htc
next >
Wrap
Text File
|
2003-08-20
|
11KB
|
400 lines
<!-- Copyright (c) 2002 Electronic Arts Inc. All rights reserved. -->
<PROPERTY NAME="playerId" />
<PROPERTY NAME="targets" />
<METHOD NAME="moveTo" />
<METHOD NAME="cancelPosition" />
<METHOD NAME="moveToPlayer" />
<METHOD NAME="moveToPlayerWithEvent" />
<METHOD NAME="snapToGrid" />
<METHOD NAME="sliceTargetsHome" />
<METHOD NAME="sliceTargetsAway" />
<METHOD NAME="toggleArrowVisibility" />
<METHOD NAME="DoSetController" />
<METHOD NAME="resetPosition" />
<EVENT NAME="ondrag" ID="drag" />
<EVENT NAME="ondragstart" ID="dragstart" />
<EVENT NAME="ondragend" ID="dragend" />
<EVENT NAME="onerror" ID="error" />
<ATTACH EVENT="onmouseup" HANDLER="DoMouseUp" />
<ATTACH EVENT="onmousedown" HANDLER="DoMouseDown" />
<ATTACH EVENT="onselectstart" HANDLER="DoSelect" />
<ATTACH EVENT="ondocumentready" HANDLER="DoInit" />
<ATTACH EVENT="onmouseover" HANDLER="DoMouseOver" />
<SCRIPT LANGUAGE="jscript">
var iOffsetX; // On the dragstart event, this variable is
// set to track the difference between the
// mouse position and the corner of the
// element
var iOffsetY; // Same as iOffsetX, but for Y coordinate
var normZindex = style.zIndex; // Tracks the regular zIndex so it can be
// restored once the dragend event occurs
var zBound = new Array // Used for parsing the mvBoundary prop
('Top', 'Right', // into it's four component parts
'Bottom', 'Left');
var aTargets = new Array();
function DoInit()
{
if(targets != null)
{
var aTemp = targets.toString().split(',');
for( var index =0 ; index < aTemp.length ; index++)
{
aTargets.push(window.document.all[aTemp[ index ]]);
}
}
else
{
ReturnError("Error: targets property not set");
}
this.setAttribute("startX", element.offsetLeft);
this.setAttribute("startY", element.offsetTop);
SetDefaults();
}
function sliceTargetsHome()
{
aTargets = aTargets.slice(6,12);
}
function sliceTargetsAway()
{
aTargets = aTargets.slice(0,6);
}
/*
description : returns index for given target name
args: target name, ie home_0
returns : -1 if none or index
*/
function getIndex( sTargetName )
{
var targetIndex = -1;
for( var index =0 ; index < aTargets.length ; index ++ )
{
if( aTargets[ index ].id == sTargetName )
{
targetIndex = index;
break;
}
}
return targetIndex;
}
function SetDefaults()
{
// Required CSS properties
style.left = offsetLeft;
style.top = offsetTop;
style.position = "absolute";
}
function CustomDefault(sCSSName, sScriptName, sDefault)
{
if (currentStyle[sCSSName] == null)
{
style[sCSSName] = sDefault;
}
else style[sCSSName] = currentStyle[sCSSName];
style[sScriptName] = style[sCSSName];
}
//constant for left button event id
var LEFT_BUTTON = 1;
function DoMouseDown()
{
if (event.button == LEFT_BUTTON)
{
// Capture the mouse
setCapture();
// Set the zIndex to 1000 to put it over other elements while it's moved
style.zIndex = 1000;
//hide arrows
toggleArrowVisibility( false );
//
// Determine the difference between the mouse click on the element and
// the top left corner
//
iOffsetX = window.event.x - element.style.pixelLeft;
iOffsetY = window.event.y - element.style.pixelTop;
// Start tracking the mousemove
attachEvent ("onmousemove", DoMouseMove);
oAudioInterface.PlayDragDropClickSFX();
dragstart.fire();
}
}
function DoMouseMove()
{
if (event.button == LEFT_BUTTON)
{
style.pixelTop = event.y - iOffsetY;
style.pixelLeft = event.x - iOffsetX;
drag.fire();
}
}
function DoMouseUp()
{
if (event.button == LEFT_BUTTON)
{
// Return the zIndex to its previous value
style.zIndex = normZindex;
// Stop tracking the onmousemove event
detachEvent ("onmousemove", DoMouseMove);
// Release the mouse
releaseCapture();
/*leaving a player*/
if(this.playerId !=null)
{
removeController(this.playerId, this.uniqueID);
}
var controllerOverPlayer = player = checkPosition();
var playerUsesThisController = playerHasThisController();
/*on top of a target object && target obj has no controllers*/
if(player != -1 && ! playerHasAController( player ))
{
addController( player , this.uniqueID );
}
//on top of a target obj with an existing controller
else if(player != -1 && playerHasAController( player ))
{
//if(playerUsesThisController != -1)removeController(playerUsesThisController, this.uniqueID );
addController( player , this.uniqueID );
}
else if(player == -1)
{
resetPosition();
}
dragend.fire();
oAudioInterface.PlayDragDropReleaseSFX();
}
}
function DoSetController(nMove)
{
/*leaving a player*/
if(this.playerId !=null)
{
removeController(this.playerId, this.uniqueID);
}
var controllerOverPlayer = player = checkPosition();
var playerUsesThisController = playerHasThisController();
/*on top of a target object && target obj has no controllers*/
if(player != -1 && ! playerHasAController( player-nMove ))
{
addController( player-nMove , this.uniqueID );
toggleArrowVisibility(false);
}
//on top of a target obj with an existing controller
else if(player != -1 && playerHasAController( player-nMove ))
{
addController( player-nMove , this.uniqueID );
toggleArrowVisibility(false);
}
else if(player == -1)
{
resetPosition();
}
}
/*
description : checks target object's controller attr.
args : index
returns : true/false
*/
function playerHasAController( index )
{
var bController = false;
if(aTargets[ index ].getAttribute("newController") != null) bController = true;
return bController;
}
/*
description : does the target object already have this controller?
args : none
returns : -1 if no controller, otherwise target index
*/
function playerHasThisController()
{
bController = -1;
for( var index = 0 ; index < aTargets.length ; index ++ )
{
if(aTargets[ index ].getAttribute("newController") != null)
{
if(aTargets[ index ].getAttribute("newController") == this.uniqueID)
{
bController = index;
break;
}
}
}
return bController;
}
/*
description: moves controller back to original position
args: none
returns : nothing
*/
function resetPosition()
{
style.pixelTop = this.startY;
style.pixelLeft = this.startX;
toggleArrowVisibility( true );
}
function toggleArrowVisibility( bVisible )
{
var sElementId = returnObjectId( element.id );
var oArrowLeft = element.document.all( "arrow_" + sElementId + "_left");
var oArrowRight = element.document.all( "arrow_" + sElementId + "_right");
if( bVisible )
{
oArrowLeft.style.visibility = 'visible';
oArrowRight.style.visibility = 'visible';
if (!oGameData.CanSelectSide(0))
oArrowRight.style.visibility = 'hidden';
else if (!oGameData.CanSelectSide(1))
oArrowLeft.style.visibility = 'hidden';
}
else
{
oArrowLeft.style.visibility = 'hidden';
oArrowRight.style.visibility = 'hidden';
}
}
function moveToPlayer( sTargetName )
{
this.playerId = sTargetName;
var oTarget = aTargets[ getIndex( sTargetName )];
(oTarget.id.indexOf('away') != -1) ? moveTo( oTarget.offsetLeft , oTarget.offsetTop ) : moveTo( oTarget.offsetLeft , oTarget.offsetTop );
}
function moveTo( nLeft , nTop )
{
this.style.pixelLeft = nLeft;
this.style.pixelTop = nTop;
}
/*
description: adds/emoves a controller property to target object. value of property is uniqueID of dragged object
args : index
returns: nothing
*/
function addController( index , value )
{
//alert("adding myself (" + this.element.id +") to : " + aTargets[ index ].id)
aTargets[ index ].setAttribute("newController", value );
aTargets[ index ].hasController = "true";
}
function removeController( index , value )
{
//alert("removing myself (" + this.element.id +") from: " + index)
var targetIndex = getIndex( index );
aTargets[ targetIndex ].setAttribute("oldController", value );
aTargets[ targetIndex ].hasController = "false";
this.playerId = null;
}
function ReturnError(sMsg)
{
var oEvent = createEventObject();
oEvent.setAttribute("error", sMsg);
error.fire(oEvent);
}
/*
description : checks to see if over target element(s)
args : none
returns: -1 if not above target el, otherwise returns target index
*/
function checkPosition()
{
var targetIndex = -1;
for( var index = 0 ; index < aTargets.length ; index ++)
{
var oTarget = aTargets[ index ];
var withinXBoundary=((this.offsetLeft < oTarget.offsetLeft) && ((this.offsetLeft + this.offsetWidth) >= oTarget.offsetLeft) || ((this.offsetLeft >= oTarget.offsetLeft) && (this.offsetLeft <= (oTarget.offsetLeft + oTarget.offsetWidth))));
var withinYBoundary=((this.offsetTop < oTarget.offsetTop) && ((this.offsetTop + this.offsetHeight) >= oTarget.offsetTop) || ((this.offsetTop >= oTarget.offsetTop) && (this.offsetTop <= (oTarget.offsetTop + oTarget.offsetHeight))));
if(withinXBoundary && withinYBoundary)
{
targetIndex = index;
break;
}
}
return targetIndex;
}
/*
description : changes cursor
args : cursor type. possible values : up / down / over
returns : nothing
*/
function setCursor( sType )
{
switch( sType )
{
case "up" :
this.style.cursor = "hand";
break;
case "down" :
this.style.cursor = "move";
break;
case "over" :
this.style.cursor = "";
this.style.cursor = "hand";
break;
}
window.status =this.style.cursor;
}
function DoMouseOver()
{
setCursor( "over" );
}
</SCRIPT>