home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Joystick Magazine 2003 November
/
CD1_JOY_153.iso
/
demos
/
NHL2004Demo.exe
/
fe
/
nhl
/
js
/
chat.js
< prev
next >
Wrap
Text File
|
2003-08-20
|
11KB
|
362 lines
//Copyright (c) 2002 Electronic Arts Inc. All rights reserved.
var playerArray = new Array();
var bChatHasFocus = false;
var bGameSetup = false;
function initChat(nTop, nHeight, bGameSetup)
{
this.bGameSetup = bGameSetup;
setChatGridSize(nTop, nHeight);
initPlayerGrid();
chatarea.style.visibility = 'visible';
players_box.style.visibility = 'visible';
player_grid.style.visibility = 'visible';
oGameFace.CommInterface.InitGameChat();
}
function setChatGridSize(nTop, nHeight)
{
if (bGameSetup)
{
//chatarea.style.pixelWidth = 240;
//chat_input_box.style.pixelWidth = 240;
//players_box =
//player_grid =
}
chatarea.style.top = nTop;
players_box.style.top = nTop;
chatarea.style.height = nHeight;
players_box.style.height = nHeight;
playergrid.style.height = nHeight-6;
player_grid.style.top = nTop+4;
chat_input_box.style.top = nHeight-18;
chatbox.style.height = nHeight-25;
chatbox.style.clip = 'rect(0 357 ' + parseInt(chatbox.style.height) + ' 0)';
}
function initPlayerGrid()
{
// initialize player grid
playergrid.numThings = 0;
playergrid.NumHeaderRows = 1;
playergrid.PageStartRow = 0;
playergrid.GridStyle_FollowMouse = true;
playergrid.GridStyle_SelectionScroll = false;
playergrid.GridStyle_ColumnLines = false;
playergrid.SetDefaultHeaderStyle_HeaderColor( 0xffffff );
playergrid.SetDefaultRowStyle_DataColor( 0xffffff );
playergrid.SetDefaultHeaderStyle_HeaderAlignment( "left" );
playergrid.SetDefaultRowStyle_DataAlignment( "left" );
playergrid.SetDefaultHeaderStyle_FillBGFlag( false );
playergrid.GridStyle_LineColor = 0xC2D1DB;
playergrid.GridStyle_ShowHeaderHoverHilite = false;
playergrid.GridStyle_HeaderHoverTextColor = 0x000000;
playergrid.GridStyle_HeaderHoverBGColor = 0xFFCC00;
playergrid.GridStyle_ShowSortHeaderHilite = false;
playergrid.GridStyle_SortHeaderTextColor = 0x000000;
playergrid.GridStyle_SortHeaderBGColor = 0x6699CC;
playergrid.GridStyle_ShowHoverHilite = false;
playergrid.GridStyle_HoverTextColor = 0x000000;
playergrid.GridStyle_HoverBGColor = 0xFFCC00;
playergrid.GridStyle_HiliteEntireHoverRow = false;
playergrid.GridStyle_SelectionTextColor = 0x000000;
playergrid.GridStyle_SelectionBGColor = 0xffffff;
playergrid.GridStyle_HiliteEntireSelectionRow = false;
playergrid.GridStyle_ShowSelectionHilite = false;
playergrid.AddColumn(0,120, nhlMsg("PLAYERS", true));
playergrid.AddColumn(1,36, scMsg("SC_PING", true));
playergrid.SetColumnStyle_DataAlignment( 1, 'left', false);
playergrid.SetColumnStyle_DataAlignment( 0, 'right', false);
playergrid.AddImage(0, (System.getInstallFolder() + "fe/sc/images/clubs/but_con_menu.gif"));
playergrid.SetDataFontStyle("verdana", 7, false, false);
playergrid.SetHeaderFontStyle("verdana", 7, true, false);
playergrid.SetDefaultHeaderStyle_Height(22); //sets height for the header row
playergrid.SetDefaultRowStyle_Height(14); //sets height for all data rows
playergrid.GridStyle_DataPadding = 4;
function playergrid::OnMouseDownPixel(rowID, colID, nX, nY) {
if (nX > 3 && nX < 96) {
//hideUserMenu();
//sClickedUserName = playergrid.GetCellData(rowID, 0);
//doViewProfile();
}
else if (nX > 96 && nX < 108) {
//showGridUserMenu(document.all.playergrid, 96, rowID, 0, false);
}
else {
//hideUserMenu();
}
}
}
function shutdownOnline()
{
if (oLeagueFace.ProviderInterface.IsOnlineSetup())
{
oGameFace.CommInterface.ShutdownGameChat();
}
}
function OnChatUpdated()
{
// ape: why is users being called ? If it is an init problem call it elsewhere
// OnChatUsersUpdated();
var newChat = oGameFace.CommInterface.GetGameChat().split("^d^#");
var numLines = parseInt(newChat.length/3);
var startIndex;
// importance is element 0 with values 0-normal, 1-private, 2-informational
// sender is element 1 and is ID (match with user list)
// element 2 is the actual text
for (var i=0; i<numLines; i++)
{
startIndex = i * 3;
if (newChat[startIndex] != 2)
{
addChatMessage(newChat[startIndex+1],newChat[startIndex+2]);
}
else
{
addChatMessage(-1,newChat[startIndex+2]);
}
}
//play audio sound
oAudioInterface.PlayNewChatMessageSFX();
}
function OnChatUsersUpdated()
{
var newUsers = oGameFace.CommInterface.GetGameChatUsers().split("^d^#");
var numLines = parseInt(newUsers.length/3);
var startIndex;
playergrid.numThings = 0;
playergrid_scroll.max_value = 0;
// clear out old players
//playerArray = new Array();
for (i=0; i<playergrid.NumRows; i++)
{
playerArray[i]="";
playergrid.SetCellDataOnLayer(i, 0, 0, "");
playergrid.SetCellDataOnLayer(i, 0, 1, "");
playergrid.SetCellDataOnLayer(i, 1, 0, "");
}
// chat ID, latency, chatname
for (i=0; i<numLines; i++)
{
startIndex = i * 3;
playerArray[i]=newUsers[startIndex+2];
playergrid.numThings++;
playergrid.SetCellDataOnLayer(i, 0, 0, newUsers[startIndex+2]);
playergrid.SetCellDataOnLayer(i, 0, 1, newUsers[startIndex]);
// add context menu button for all but the current user
//if (player.name != pl_myName()) {
// playergrid.SetCellImage(playergridRowIndex, 0, 0, 96, 4, false, true);
//}
playergrid.SetCellDataOnLayer(i, 1, 0, newUsers[startIndex+1]);
if (newUsers[startIndex+1] < 76)
playergrid.setCellStyle_DataColor(i, 1, 0x33FF00);
else if (newUsers[startIndex+1] > 75 && newUsers[startIndex+1] < 201 )
playergrid.setCellStyle_DataColor(i, 1, 0xFFCC00);
else
playergrid.setCellStyle_DataColor(i, 1, 0xFF0000);
// adjust scrollbar to reflect changed content size
initGridScrollBar( playergrid_scroll , playergrid );
}
chatUsersUpdatedCallback();
}
function getPlayerName(playerId)
{
if (playergrid.numThings == 0)
OnChatUsersUpdated();
var playerName="";
for (var i=0; i<playergrid.numThings; i++)
{
if (playergrid.GetCellDataFromLayer(i, 0, 1) == playerId)
{
playerName = playergrid.GetCellDataFromLayer(i, 0, 0);
break;
}
}
return playerName;
}
function SendChat()
{
oGameFace.CommInterface.SendGameChat(0, chatline.value);
}
/********************
Chat
*******************/
function SendChatMessage(str) {
oGameFace.CommInterface.SendGameChat(0, str);
chatform.chatmessage.value = "";
chatform.chatmessage.focus();
}
function addChatMessage(plrName, msg) {
// create text elements
var nameElement = document.createElement("span");
var textElement = document.createElement("span");
if (plrName != -1)
{
plrName = getPlayerName(plrName);//playerArray[plrName-1];
nameElement.appendChild(document.createTextNode(plrName + ": "));
nameElement.className = "yellow";
}
else
{
textElement.className = "red";
}
textElement.appendChild(document.createTextNode(msg));
// append to chatgrid
chatbox.appendChild(nameElement);
chatbox.appendChild(textElement);
chatbox.appendChild(document.createElement("br"));
// if the text element is out of the viewable area, scroll chatgrid so that it is at the bottom
if (parseInt(chatbox.currentStyle.height) - parseInt(chatbox.currentStyle.top) - 15 < chatbox.lastChild.offsetTop) {
chatbox.style.top = -(parseInt(chatbox.lastChild.offsetTop) - parseInt(chatbox.currentStyle.height) + 11) + 'px';
chatbox.style.clip = 'rect(' + (-(parseInt(chatbox.currentStyle.top)-3)) + ' 357 ' + (-parseInt(chatbox.currentStyle.top) + parseInt(chatbox.currentStyle.height)+4) + ' 0)';
}
// adjust scrollbar to reflect changed content size
chat_scroll.max_value = (chatbox.lastChild.offsetTop + 12 > parseInt(chatbox.currentStyle.height)) ? (chatbox.lastChild.offsetTop - parseInt(chatbox.currentStyle.height) + 12)/12 : 0;
if (chat_scroll.max_value > 1) {
chat_scroll.style.visibility = "visible";
chat_scroll.SetValue(chat_scroll.max_value);
}
}
function scrollChat() {
var firstResult = chat_scroll.value*12;
var clipTop = firstResult;
chatbox.style.top = (-(clipTop-1)) + "px";
var top = chat_scroll.value*12+3;
var left = 0;
var bottom = (parseInt(chatarea.style.height)-25) + top;
var right = 357 + left;
chatbox.style.clip = "rect(" + top + " " + right + " " + bottom + " " + left + ")";
}
/********************
Player Grid
*******************/
function addPlayerToGrid(player) {
// create a new row
var playergridRowIndex = playergrid.numThings;
playergrid.numThings++;
playergrid.SetCellDataOnLayer(playergridRowIndex, 0, 0, player.name);
playergrid.SetCellDataOnLayer(playergridRowIndex, 0, 1, player.id);
// add context menu button for all but the current user
if (player.name != pl_myName()) {
playergrid.SetCellImage(playergridRowIndex, 0, 0, 96, 4, false, true);
}
playergrid.SetCellDataOnLayer(playergridRowIndex, 1, 0, player.ping);
if (player.ping < 76)
playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0x33FF00);
else if (player.ping > 75 && player.ping < 201 )
playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0xFFCC00);
else
playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0xFF0000);
// adjust scrollbar to reflect changed content size
initGridScrollBar( playergrid_scroll , playergrid );
// update number of players in room
room_info_population.innerText = playergrid.numThings;
}
function removePlayerFromGrid(plrID) {
// find row corresponding to player to delete
for (var rowIndex = 0; rowIndex < playergrid.numThings; rowIndex++) {
// delete row corresponding to player's id
if (playergrid.GetCellDataFromLayer(rowIndex, 0, 1) == plrID) {
playergrid.DeleteRow(rowIndex);
playergrid.numThings--;
break;
}
}
// adjust scrollbar to reflect changed content size
initGridScrollBar( playergrid_scroll , playergrid );
}
function clearPlayerGrid() {
if (playergrid != null) {
playergrid.ClearCells();
playergrid.numThings = 0;
}
// adjust scrollbar
initGridScrollBar( playergrid_scroll , playergrid );
}
function scrollPlayers() {
var playergrid = document.getElementById("playergrid");
playergrid.PageStartRow = playergrid_scroll.value;
}
function setChatHasFocus(bFocus)
{
bChatHasFocus = bFocus;
}
function writeChatHTML()
{
var filespec = System.getInstallFolder() + "fe/nhl/html/chat.html";
var msg = "";
msg = oGameFace.GetTextFile(filespec);
document.write( msg );
}