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 >
Text File  |  2003-08-20  |  11KB  |  362 lines

  1. //Copyright (c) 2002 Electronic Arts Inc. All rights reserved.
  2.  
  3. var playerArray = new Array();
  4. var bChatHasFocus = false;
  5. var bGameSetup = false;
  6.  
  7. function initChat(nTop, nHeight, bGameSetup)
  8. {
  9.     this.bGameSetup = bGameSetup;
  10.     setChatGridSize(nTop, nHeight);
  11.     initPlayerGrid();
  12.     chatarea.style.visibility = 'visible';
  13.     players_box.style.visibility = 'visible';
  14.     player_grid.style.visibility = 'visible';
  15.     oGameFace.CommInterface.InitGameChat();
  16. }
  17.  
  18. function setChatGridSize(nTop, nHeight)
  19. {
  20.     if (bGameSetup)
  21.     {
  22.         //chatarea.style.pixelWidth        = 240;
  23.         //chat_input_box.style.pixelWidth = 240;
  24.         //players_box =
  25.         //player_grid =
  26.     }
  27.  
  28.     chatarea.style.top             = nTop;
  29.     players_box.style.top        = nTop;
  30.     chatarea.style.height        = nHeight;
  31.     players_box.style.height    = nHeight;
  32.     playergrid.style.height        = nHeight-6;
  33.  
  34.     player_grid.style.top        = nTop+4;
  35.     chat_input_box.style.top    = nHeight-18;
  36.  
  37.     chatbox.style.height         = nHeight-25;
  38.     chatbox.style.clip             = 'rect(0 357 ' + parseInt(chatbox.style.height) + ' 0)';
  39. }
  40.  
  41. function initPlayerGrid()
  42. {
  43.     // initialize player grid
  44.     playergrid.numThings = 0;
  45.     playergrid.NumHeaderRows = 1;
  46.     playergrid.PageStartRow = 0;
  47.     playergrid.GridStyle_FollowMouse = true;
  48.     playergrid.GridStyle_SelectionScroll = false;
  49.     playergrid.GridStyle_ColumnLines = false;
  50.     playergrid.SetDefaultHeaderStyle_HeaderColor( 0xffffff );
  51.     playergrid.SetDefaultRowStyle_DataColor( 0xffffff );
  52.     playergrid.SetDefaultHeaderStyle_HeaderAlignment( "left" );
  53.     playergrid.SetDefaultRowStyle_DataAlignment( "left" );
  54.     playergrid.SetDefaultHeaderStyle_FillBGFlag( false );
  55.     playergrid.GridStyle_LineColor = 0xC2D1DB;
  56.  
  57.     playergrid.GridStyle_ShowHeaderHoverHilite = false;
  58.     playergrid.GridStyle_HeaderHoverTextColor = 0x000000;
  59.     playergrid.GridStyle_HeaderHoverBGColor = 0xFFCC00;
  60.  
  61.     playergrid.GridStyle_ShowSortHeaderHilite = false;
  62.     playergrid.GridStyle_SortHeaderTextColor = 0x000000;
  63.     playergrid.GridStyle_SortHeaderBGColor = 0x6699CC;
  64.  
  65.     playergrid.GridStyle_ShowHoverHilite = false;
  66.     playergrid.GridStyle_HoverTextColor = 0x000000;
  67.     playergrid.GridStyle_HoverBGColor = 0xFFCC00;
  68.     playergrid.GridStyle_HiliteEntireHoverRow = false;
  69.     playergrid.GridStyle_SelectionTextColor = 0x000000;
  70.     playergrid.GridStyle_SelectionBGColor = 0xffffff;
  71.     playergrid.GridStyle_HiliteEntireSelectionRow = false;
  72.     playergrid.GridStyle_ShowSelectionHilite = false;
  73.  
  74.     playergrid.AddColumn(0,120, nhlMsg("PLAYERS", true));
  75.     playergrid.AddColumn(1,36, scMsg("SC_PING", true));
  76.  
  77.     playergrid.SetColumnStyle_DataAlignment( 1, 'left', false);
  78.     playergrid.SetColumnStyle_DataAlignment( 0, 'right', false);
  79.  
  80.     playergrid.AddImage(0, (System.getInstallFolder() + "fe/sc/images/clubs/but_con_menu.gif"));
  81.  
  82.  
  83.     playergrid.SetDataFontStyle("verdana", 7, false, false);
  84.     playergrid.SetHeaderFontStyle("verdana", 7, true, false);
  85.     playergrid.SetDefaultHeaderStyle_Height(22);    //sets height for the header row
  86.     playergrid.SetDefaultRowStyle_Height(14);        //sets height for all data rows
  87.     playergrid.GridStyle_DataPadding = 4;
  88.  
  89.  
  90.     function playergrid::OnMouseDownPixel(rowID, colID, nX, nY) {
  91.         if (nX > 3 && nX < 96) {
  92.             //hideUserMenu();
  93.             //sClickedUserName = playergrid.GetCellData(rowID, 0);
  94.             //doViewProfile();
  95.         }
  96.         else if (nX > 96 && nX < 108) {
  97.             //showGridUserMenu(document.all.playergrid, 96, rowID, 0, false);
  98.         }
  99.         else {
  100.             //hideUserMenu();
  101.         }
  102.     }
  103. }
  104.  
  105. function shutdownOnline()
  106. {
  107.     if (oLeagueFace.ProviderInterface.IsOnlineSetup())
  108.     {
  109.         oGameFace.CommInterface.ShutdownGameChat();
  110.     }
  111. }
  112.  
  113. function OnChatUpdated()
  114. {
  115.     // ape: why is users being called ? If it is an init problem call it elsewhere
  116.     // OnChatUsersUpdated();
  117.     var newChat = oGameFace.CommInterface.GetGameChat().split("^d^#");
  118.     var numLines = parseInt(newChat.length/3);
  119.     var startIndex;
  120.  
  121.     // importance is element 0 with values 0-normal, 1-private, 2-informational
  122.     // sender is element 1 and is ID (match with user list)
  123.     // element 2 is the actual text
  124.  
  125.     for (var i=0; i<numLines; i++)
  126.     {
  127.         startIndex = i * 3;
  128.  
  129.         if (newChat[startIndex] != 2)
  130.         {
  131.             addChatMessage(newChat[startIndex+1],newChat[startIndex+2]);
  132.         }
  133.         else
  134.         {
  135.             addChatMessage(-1,newChat[startIndex+2]);
  136.         }
  137.  
  138.     }
  139.  
  140.     //play audio sound
  141.     oAudioInterface.PlayNewChatMessageSFX();
  142. }
  143.  
  144. function OnChatUsersUpdated()
  145. {
  146.     var newUsers = oGameFace.CommInterface.GetGameChatUsers().split("^d^#");
  147.     var numLines = parseInt(newUsers.length/3);
  148.     var startIndex;
  149.  
  150.     playergrid.numThings = 0;
  151.     playergrid_scroll.max_value = 0;
  152.  
  153.     // clear out old players
  154.     //playerArray = new Array();
  155.     for (i=0; i<playergrid.NumRows; i++)
  156.     {
  157.         playerArray[i]="";
  158.         playergrid.SetCellDataOnLayer(i, 0, 0, "");
  159.         playergrid.SetCellDataOnLayer(i, 0, 1, "");
  160.         playergrid.SetCellDataOnLayer(i, 1, 0, "");
  161.     }
  162.  
  163.  
  164.     // chat ID, latency, chatname
  165.     for (i=0; i<numLines; i++)
  166.     {
  167.         startIndex = i * 3;
  168.         playerArray[i]=newUsers[startIndex+2];
  169.         playergrid.numThings++;
  170.         playergrid.SetCellDataOnLayer(i, 0, 0, newUsers[startIndex+2]);
  171.         playergrid.SetCellDataOnLayer(i, 0, 1, newUsers[startIndex]);
  172.  
  173.         // add context menu button for all but the current user
  174.         //if (player.name != pl_myName()) {
  175.         //    playergrid.SetCellImage(playergridRowIndex, 0, 0, 96, 4, false, true);
  176.         //}
  177.  
  178.         playergrid.SetCellDataOnLayer(i, 1, 0, newUsers[startIndex+1]);
  179.  
  180.         if (newUsers[startIndex+1] < 76)
  181.             playergrid.setCellStyle_DataColor(i, 1, 0x33FF00);
  182.         else if (newUsers[startIndex+1] > 75 && newUsers[startIndex+1] < 201 )
  183.             playergrid.setCellStyle_DataColor(i, 1, 0xFFCC00);
  184.         else
  185.             playergrid.setCellStyle_DataColor(i, 1, 0xFF0000);
  186.  
  187.         // adjust scrollbar to reflect changed content size
  188.         initGridScrollBar( playergrid_scroll , playergrid );
  189.     }
  190.  
  191.     chatUsersUpdatedCallback();
  192. }
  193.  
  194. function getPlayerName(playerId)
  195. {
  196.     if (playergrid.numThings == 0)
  197.         OnChatUsersUpdated();
  198.  
  199.     var playerName="";
  200.  
  201.     for (var i=0; i<playergrid.numThings; i++)
  202.     {
  203.         if (playergrid.GetCellDataFromLayer(i, 0, 1) == playerId)
  204.         {
  205.             playerName = playergrid.GetCellDataFromLayer(i, 0, 0);
  206.             break;
  207.         }
  208.     }
  209.  
  210.     return playerName;
  211. }
  212.  
  213. function SendChat()
  214. {
  215.     oGameFace.CommInterface.SendGameChat(0, chatline.value);
  216. }
  217.  
  218.  
  219. /********************
  220.  Chat
  221.  *******************/
  222.  
  223. function SendChatMessage(str) {
  224.     oGameFace.CommInterface.SendGameChat(0, str);
  225.     chatform.chatmessage.value = "";
  226.     chatform.chatmessage.focus();
  227. }
  228.  
  229. function addChatMessage(plrName, msg) {
  230.  
  231.     // create text elements
  232.     var nameElement = document.createElement("span");
  233.     var textElement = document.createElement("span");
  234.  
  235.     if (plrName != -1)
  236.     {
  237.         plrName = getPlayerName(plrName);//playerArray[plrName-1];
  238.         nameElement.appendChild(document.createTextNode(plrName + ": "));
  239.         nameElement.className = "yellow";
  240.     }
  241.     else
  242.     {
  243.         textElement.className = "red";
  244.     }
  245.  
  246.     textElement.appendChild(document.createTextNode(msg));
  247.  
  248.     // append to chatgrid
  249.     chatbox.appendChild(nameElement);
  250.     chatbox.appendChild(textElement);
  251.     chatbox.appendChild(document.createElement("br"));
  252.  
  253.     // if the text element is out of the viewable area, scroll chatgrid so that it is at the bottom
  254.     if (parseInt(chatbox.currentStyle.height) - parseInt(chatbox.currentStyle.top) - 15 < chatbox.lastChild.offsetTop) {
  255.         chatbox.style.top = -(parseInt(chatbox.lastChild.offsetTop) - parseInt(chatbox.currentStyle.height) + 11) + 'px';
  256.         chatbox.style.clip = 'rect(' + (-(parseInt(chatbox.currentStyle.top)-3)) + ' 357 ' + (-parseInt(chatbox.currentStyle.top) + parseInt(chatbox.currentStyle.height)+4) + ' 0)';
  257.     }
  258.  
  259.     // adjust scrollbar to reflect changed content size
  260.     chat_scroll.max_value = (chatbox.lastChild.offsetTop + 12 > parseInt(chatbox.currentStyle.height)) ? (chatbox.lastChild.offsetTop - parseInt(chatbox.currentStyle.height) + 12)/12 : 0;
  261.     
  262.     if (chat_scroll.max_value > 1) {        
  263.         chat_scroll.style.visibility = "visible";
  264.         chat_scroll.SetValue(chat_scroll.max_value);
  265.     }
  266. }
  267.  
  268. function scrollChat() {
  269.     var firstResult = chat_scroll.value*12;
  270.     var clipTop = firstResult;
  271.     chatbox.style.top = (-(clipTop-1)) + "px";
  272.  
  273.     var top        = chat_scroll.value*12+3;
  274.     var left    = 0;
  275.     var bottom    = (parseInt(chatarea.style.height)-25) + top;
  276.     var right    = 357 + left;
  277.  
  278.     chatbox.style.clip = "rect(" + top + " " + right + " " + bottom + " " + left + ")";
  279. }
  280.  
  281.  
  282.  
  283. /********************
  284.  Player Grid
  285.  *******************/
  286.  
  287. function addPlayerToGrid(player) {
  288.     // create a new row
  289.     var playergridRowIndex = playergrid.numThings;
  290.     playergrid.numThings++;
  291.     playergrid.SetCellDataOnLayer(playergridRowIndex, 0, 0, player.name);
  292.     playergrid.SetCellDataOnLayer(playergridRowIndex, 0, 1, player.id);
  293.  
  294.     // add context menu button for all but the current user
  295.     if (player.name != pl_myName()) {
  296.         playergrid.SetCellImage(playergridRowIndex, 0, 0, 96, 4, false, true);
  297.     }
  298.  
  299.     playergrid.SetCellDataOnLayer(playergridRowIndex, 1, 0, player.ping);
  300.  
  301.     if (player.ping < 76)
  302.         playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0x33FF00);
  303.     else if (player.ping > 75 && player.ping < 201 )
  304.         playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0xFFCC00);
  305.     else
  306.         playergrid.setCellStyle_DataColor(playergridRowIndex, 1, 0xFF0000);
  307.  
  308.     // adjust scrollbar to reflect changed content size
  309.     initGridScrollBar( playergrid_scroll , playergrid );
  310.  
  311.     // update number of players in room
  312.     room_info_population.innerText = playergrid.numThings;
  313. }
  314.  
  315. function removePlayerFromGrid(plrID) {
  316.  
  317.     // find row corresponding to player to delete
  318.     for (var rowIndex = 0; rowIndex < playergrid.numThings; rowIndex++) {
  319.  
  320.         // delete row corresponding to player's id
  321.         if (playergrid.GetCellDataFromLayer(rowIndex, 0, 1) == plrID) {
  322.             playergrid.DeleteRow(rowIndex);
  323.             playergrid.numThings--;
  324.             break;
  325.         }
  326.  
  327.     }
  328.  
  329.     // adjust scrollbar to reflect changed content size
  330.     initGridScrollBar( playergrid_scroll , playergrid );
  331. }
  332.  
  333.  
  334. function clearPlayerGrid() {
  335.  
  336.     if (playergrid != null) {
  337.         playergrid.ClearCells();
  338.         playergrid.numThings = 0;
  339.     }
  340.  
  341.     // adjust scrollbar
  342.     initGridScrollBar( playergrid_scroll , playergrid );
  343. }
  344.  
  345. function scrollPlayers() {
  346.     var playergrid = document.getElementById("playergrid");
  347.     playergrid.PageStartRow = playergrid_scroll.value;
  348. }
  349.  
  350.  
  351. function setChatHasFocus(bFocus)
  352. {
  353.     bChatHasFocus = bFocus;
  354. }
  355.  
  356. function writeChatHTML()
  357. {
  358.     var filespec = System.getInstallFolder() + "fe/nhl/html/chat.html";
  359.     var msg = "";
  360.     msg = oGameFace.GetTextFile(filespec);
  361.     document.write( msg );
  362. }