//
// Draw_TString
void Draw_TString(int x, int y, char *str)
{
	  TextBegin(network_text);
	  DrawString(network_text, x, y, str);
	  TextEnd();

} // end of the func
//
// Print_Score
//
void Print_Score(void)
{
	int i = 0;
	char buffer[80];
	int x,y;
	
	for (i = 0; i < MAX_SCORE_DISPLAY; i++)
	{
		sprintf(buffer, "P%d %0.2f %d\n", 
			ant_globals->score_obj[i].name, 
			ant_globals->score_obj[i].score, 
			ant_globals->score_obj[i].kills);

		TextBegin(score_text);
		DrawString(score_text, 10, 4+(i*10), buffer);
		TextEnd();

	} // end of the for 

	// Also, print frames per second
	sprintf(buffer, "FPS: %0.2f", framerate);
	TextBegin(score_text);
	DrawString(score_text, 500, 4, buffer);
	TextEnd();

	// And the score and health
	sprintf(buffer, "Armor: %0.2f", ant_globals->player_health);
	TextBegin(score_text);
	DrawString(score_text, 300, 4, buffer);
	TextEnd();

	// Print the current position
	sprintf(buffer, "%d/%d Bots",
		ant_globals->alive_bots, (MAX_FIRE_ANTS-1));
	TextBegin(score_text);
	DrawString(score_text, 300, 14, buffer);
	TextEnd();

	// Print some paused text
	if (ant_globals->paused)
	{
		
		// find the correct x pos
		x = 12 * 8;
		x /= 2;
		
		x = (SCREEN_WIDTH/2) - x;
		y = (SCREEN_HEIGHT / 2);
		
		// And the score and health
		sprintf(buffer, "- PAUSED -", ant_globals->player_health);
		TextBegin(score_text);
		DrawString(score_text, x, y, buffer);
		TextEnd();

		sprintf(buffer, "(GLANTS)");
		TextBegin(score_text);
		DrawString(score_text, x+8, y+10, buffer);
		TextEnd();



	} // end of the if 

} // end of the function 
//
// Draw_NetworkScreen
//
void Draw_NetworkScreen(void)
{
  const float box_x_min = 50.0f;
  const float box_x_max = 500.0f;
  const float box_y_min = 50.0f;
  const float box_y_max = 440.0f;

  const float msg_y = box_y_max - 32.0f;
  
  char buffer[80];

  glDisable(GL_TEXTURE_2D);

	// Draw a blue screen
	// in the background

	glColor3ub(20, 120, 235); 

	glLineWidth(3.0f);
	glBegin(GL_QUADS);
	        glVertex3f(box_x_min, box_y_min, 0.0f);
		glVertex3f(box_x_max, box_y_min, 0.0f);

		glVertex3f(box_x_max, box_y_max, 0.0f);
		glVertex3f(box_x_min, box_y_max, 0.0f);

	glEnd();


	// draw outline around object
	glColor3ub(255, 255, 255);
	glBegin(GL_LINE_LOOP);
	        glVertex3f(box_x_min, box_y_min, 0.0f);
		glVertex3f(box_x_max, box_y_min, 0.0f);

		glVertex3f(box_x_max, box_y_max, 0.0f);
		glVertex3f(box_x_min, box_y_max, 0.0f);
	glEnd();

	// The next line
	// will be used for the message screen
	glBegin(GL_LINE_LOOP);
	        glVertex3f(box_x_min, msg_y, 0.0f);
		glVertex3f(box_x_max, msg_y, 0.0f);
	glEnd();


	glLineWidth(1.0f);

	// before drawing the name, save selection
	Display_NetSel(network_str_);

	// Print the actual text
	Setup_NetMenu(CLIENT_NET_MENU, END_CLIENT_NET, VERT_TYPE_);
        Setup_NetMenu(C_HORZ_MENU, END_CLIENT_NET, HORZ_TYPE_);
	
	Setup_NetMenu(N_TITLE_X, N_TITLE_YY2, SERVER_SETTINGS);
	Setup_NetMenu(SERVER_NET_MENU, END_SERVER_NET, VERT_TYPE_);
	Setup_NetMenu(S_SERV_HORZ, E_SERV_HORZ, HORZ_TYPE_);

	
	// Draw the static text
	TextBegin(network_text);
	DrawString(network_text, T_COL_6, 
		   T_ROW_1, network_str_[_TEXT_CONNECT_]);
	TextEnd();

	TextBegin(network_text);
	DrawString(network_text, T_COL_7, 
		   T_ROW_1, network_str_[_TEXT_DISCONNECT_]);
	TextEnd();

	// Server buttons --
	TextBegin(network_text);
	DrawString(network_text, T_COL_6, 
		   T_ROW_2, network_str_[_TEXT_START_]);
	TextEnd();

	TextBegin(network_text);
	DrawString(network_text, T_COL_7, 
		   T_ROW_2, network_str_[_TEXT_SHUTDOWN_]);
	TextEnd();

	// And at the bottom
	// the network and help screens and messages
	TextBegin(network_text);

	// get network message
	Get_NetworkMsg(buffer);
	DrawString(network_text, TEXT_HORZ_START, 
		   T_ROW_3, buffer);
	TextEnd();

	// print connections if there are any
	printConnections();

} // end of the functino 
//
// Set_Net_Menu(int 
// - setup the horizontal or vertical positions
// and draw the text -- 
//
static void Setup_NetMenu(int start_pos, int end_pos, int h_type)
{

  int i;  
  float horz_pos;
  float vert_pos;

  // 
  // set the text changes before the code below
 
 
  switch(h_type)
    {
    case HORZ_TYPE_:
  
      // we only have two diferent cases to handle 
      if (start_pos == C_HORZ_MENU) 
	{

	  horz_pos = TEXT_HORZ_START;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU]);
	  TextEnd();

	  // next col --
	  horz_pos = T_COL_1;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+1]);
	  TextEnd();

	  // next col --
	  horz_pos = T_COL_2;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+2]);
	  TextEnd();

	  // next col --
	  horz_pos = T_COL_3;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+3]);
	  TextEnd();

	  
	  // next col --
	  horz_pos = T_COL_4;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+4]);
	  TextEnd();

	  
	  // next col --
	  horz_pos = T_COL_5;
	  vert_pos = TXT_V_START;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[C_HORZ_MENU+5]);
	  TextEnd();

	} // end of the 
      else {

	  horz_pos = TEXT_HORZ_START;
	  vert_pos = TXT_V_STARTYY2;
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ]);
	  TextEnd();

	  // next col
	  horz_pos = T_COL_1;
	  vert_pos = TXT_V_STARTYY2;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+1]);
	  TextEnd();


	  horz_pos = T_COL_2;
	  vert_pos = TXT_V_STARTYY2;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+2]);
	  TextEnd();

	  horz_pos = T_COL_3;
	  vert_pos = TXT_V_STARTYY2;
  
	  TextBegin(network_text);
	  DrawString(network_text, horz_pos, vert_pos, network_str_[S_SERV_HORZ+3]);
	  TextEnd();

      } // end of the if-else
    

  
      break;
      
    case VERT_TYPE_:

      if (start_pos == CLIENT_NET_MENU)
	vert_pos = TEXT_VERT_START;
      else 
	vert_pos = TEXT_VERT_STARTY2;

      for (i = start_pos; i <= end_pos; i++)
	{
	  TextBegin(network_text);
	  DrawString(network_text, TEXT_HORZ_START, vert_pos, network_str_[i]);
	  TextEnd();

	  vert_pos = vert_pos + TEXT_VERT_HEIGHT;

	} // end of the for 

      break;

    case STAT_TYPE_:      
      break;

   
    case SERVER_SETTINGS:
      TextBegin(network_text);
      DrawString(network_text, start_pos, 
		     end_pos, network_str_[SERVER_SETTINGS]);
	  TextEnd();
	  
	  break;


    case CLIENT_SETTINGS:
        TextBegin(network_text);
	  DrawString(network_text, start_pos, 
		     end_pos, network_str_[CLIENT_SETTINGS]);
	  TextEnd();

	  break;


    };

} // end of the function 
Exemple #5
0
BOOL WINPROC EXPORT DlgTextProc(
/***********************************************************************/
HWND 	hDlg,
UINT 	msg,
WPARAM 	wParam,
LPARAM 	lParam)
{
int i;
WORD wKey;
HFONT hFont;
STRING szString;

switch (msg)
    {
    case WM_INITDIALOG:
	RibbonInit( hDlg );
	ColorInit( hDlg );
	GetFonts( hDlg );
	CheckRadioButton( hDlg, IDC_TEXT_T1, IDC_TEXT_T10, Text.nFont+IDC_TEXT_T1 );
	Text.Size = 48;
	InitSlide( hDlg, IDC_TEXT_SIZE, Text.Size, 24, 200 );
	Text.Angle = 0;
	InitSlide( hDlg, IDC_TEXT_ANGLE, 0, -2, 2 );
	ControlEnable(hDlg, IDC_TEXT_ANGLE, TextCanRotate(hDlg, Text.nFont));
	for ( i=0; i<max(10,Text.nFont); i++ )
		{
		hFont = CreateFont(
				/* Height */ 45,
				/* Width */ 0,
				/* Escapement */ 0,
				/* Orientation */ 0,
				/* Weight */ FW_NORMAL,
				/* Italic */ FALSE,
				/* UnderLine */ FALSE,
				/* StrikeOut */ FALSE,
				/* CharSet */ Text.lpFontList[i].fdCharSet,
				/* Output Precis */ OUT_CHARACTER_PRECIS,
				/* Clip Precis */ CLIP_DEFAULT_PRECIS,
				/* Quality */ PROOF_QUALITY,
				/* PitchAndFamily */ Text.lpFontList[i].fdPitchAndFamily,
				/* Face */ Text.lpFontList[i].fdFaceName );
		if ( hFont )
			SendDlgItemMessage( hDlg, IDC_TEXT_T1+i, WM_SETFONT, (WPARAM)hFont, 0L );
		}
	if ( lpImage )
		{
		bTextBegun = TextBegin( lpImage->hWnd, 10/*x*/, 40/*y*/ );
		Tool.bActive = YES;
		SetFocus( lpImage->hWnd );
		}
	else
		bTextBegun = NO;
	// fall thru

    case WM_CONTROLENABLE:
    case WM_DOCACTIVATED:
	break;

	case WM_DESTROY:
	if ( bTextBegun )
		{
		if ( lpImage )
			{
			TextEnd( lpImage->hWnd, NO/*fCancel*/ );
			Tool.bActive = NO;
			AstralUpdateWindow( lpImage->hWnd );
			}
		bTextBegun = NO;
		}
	for ( i=0; i<max(10,Text.nFont); i++ )
		{
		if ( hFont = (HFONT)SendDlgItemMessage( hDlg, IDC_TEXT_T1+i, WM_GETFONT, (WPARAM)0, 0L ) )
			DeleteObject( hFont );
		}
	if ( Text.lpFontList )
		{
		FreeUp((LPTR)Text.lpFontList);
		Text.lpFontList = NULL;
		}
	break;

    case WM_CHAR:
	if ( !lpImage || !bTextBegun )
		return( FALSE );
	TextSetFocus();
	wKey = (WORD)lParam;
	TextKeystroke( lpImage->hWnd, wKey );
	if ( wKey == VK_RETURN )
		{
		TextAnchor( lpImage->hWnd );
		RandomizeActiveColor();
		break;
		}
	szString[0] = '_';
	szString[1] = wKey;
	szString[2] = '\0';
	Lowercase( szString );
	SoundStartResource( szString, NO/*bLoop*/, NULL/*hInstance*/ );
	break;

    case WM_KEYDOWN:
	if ( !lpImage || !bTextBegun )
		return( FALSE );
	wKey = lParam;
	switch (wKey)
		{
		case VK_UP:
			TextRMove( lpImage->hWnd, 0, -1 );
			break;
		case VK_DOWN:
			TextRMove( lpImage->hWnd, 0, 1);
			break;
		case VK_LEFT:
			TextRMove( lpImage->hWnd, -1, 0);
			break;
		case VK_RIGHT:
			TextRMove( lpImage->hWnd, 1, 0);
			break;
		default:
			break;
		}
	break;

    case WM_SETCURSOR:
	return( SetupCursor( wParam, lParam, IDD_TEXT ) );

    case WM_ERASEBKGND:
	break; // handle ERASEBKGND and do nothing; PAINT covers everything

    case WM_PAINT:
	LayoutPaint( hDlg );
	break;

    case WM_CLOSE:
	AstralDlgEnd( hDlg, FALSE );
	break;

    case WM_MEASUREITEM:
    case WM_DRAWITEM:
	return( OwnerDraw( hDlg, msg, lParam, NO ) );

    case WM_CTLCOLOR:
// We don't get this message
//	Print( "%u", HIWORD(lParam) );
//	if ( HIWORD(lParam) == CTLCOLOR_BTN )
//		{
//		SetTextColor( (HDC)wParam, RGB(0,0,255) ); // Blue text...
//		SetBkColor( (HDC)wParam, RGB(255,255,255) ); // on a white background
//		return( GetStockObject(WHITE_BRUSH) );
//		}
	return( (BOOL)SetControlColors( (HDC)wParam, hDlg, (HWND)LOWORD(lParam),
		HIWORD(lParam) ) );

    case WM_COMMAND:
	switch (wParam)
	    {
		case IDC_ACTIVECOLOR:
		case IDC_COLORS_TEXT:
		ColorCommand( hDlg, wParam, lParam );
		TextSetFocus();
		if (bTextBegun)
			TextFontChanged(lpImage->hWnd);
		break;

		case IDC_TEXT_T1:
		case IDC_TEXT_T2:
		case IDC_TEXT_T3:
		case IDC_TEXT_T4:
		case IDC_TEXT_T5:
		case IDC_TEXT_T6:
		case IDC_TEXT_T7:
		case IDC_TEXT_T8:
		case IDC_TEXT_T9:
		case IDC_TEXT_T10:
		CheckRadioButton( hDlg, IDC_TEXT_T1, IDC_TEXT_T10, wParam );
		Text.nFont = wParam - IDC_TEXT_T1;
		ControlEnable(hDlg, IDC_TEXT_ANGLE, TextCanRotate(hDlg, Text.nFont));
		TextSetFocus();
		if (bTextBegun)
			TextFontChanged(lpImage->hWnd);
		break;

	    case IDC_TEXT_SIZE:
		Text.Size = HandleSlide( hDlg, (ITEMID)wParam, (UINT)lParam, NULL );
		Text.Size = bound( Text.Size, 16, 216 );
		if ( !LBUTTON )
			TextSetFocus();
		if (bTextBegun)
			TextFontChanged(lpImage->hWnd);
		break;

	    case IDC_TEXT_ANGLE:
		i = HandleSlide( hDlg, (ITEMID)wParam, (UINT)lParam, NULL ); // -2 to 2
		Text.Angle = (i * 45);
		if ( Text.Angle < 0 )
			Text.Angle += 360;
		i = (Text.Angle + 22) / 45; // down to 0-8
		if ( i > 4 )
				i = bound( i - 8, -2, 0 );
		else	i = bound( i, 0, 2 );
		SetSlide( hDlg, wParam, i );
		if ( !LBUTTON )
			TextSetFocus();
		if (bTextBegun)
			TextFontChanged(lpImage->hWnd);
		break;

	    default:
		return( FALSE );
	    }

    default:
	return( FALSE );
    }

return( TRUE );
}