Example #1
0
//描画
void Label::Draw() 
{
	LPDIRECT3DDEVICE9 pD3DDevice = pGUIObj->GetpD3DDevice();
	D3DVERTEX_2D *vt = pGUIObj->Getpvt();
	RectWH rcAbsolutePos = this->GetAbsolutePos();
	//rcAbsolutePos.top += pGUIObj->GetFontHeight() + 8; //タイトルバー分を下に下げる

	ho::PT<int> ptDrawPos(rcAbsolutePos.left, rcAbsolutePos.top); //文字描画位置
	TCHAR *pStr = (TCHAR *)strLabel.c_str(); //描画する文字列のポインタ
	DWORD DrawedCharNum = 0; //描画した文字数

	while (DrawedCharNum < strLabel.size()) //全部の文字の描画が終わるまで繰り返す
	{
		DrawedCharNum += pGUIObj->GetpDrawStringObj()->DrawWidth(ptDrawPos.x, ptDrawPos.y, pStr + DrawedCharNum, rcPosition.width, 16); //幅制限付きで文字を描画
		ptDrawPos.y += 20;
	}

	return;
}
Example #2
0
void Pony48Engine::drawBoard()
{
	float fTotalWidth = BOARD_WIDTH * TILE_WIDTH + (BOARD_WIDTH + 1) * TILE_SPACING;
	float fTotalHeight = BOARD_HEIGHT * TILE_HEIGHT + (BOARD_HEIGHT + 1) * TILE_SPACING;
	//Fill in bg
	fillRect(Point(-fTotalWidth/2.0, fTotalHeight/2.0), Point(fTotalWidth/2.0, -fTotalHeight/2.0), m_BoardBg);	//Draw at z = 0
	//Fill in bg for individual tiles
	for(int i = 0; i < BOARD_HEIGHT; i++)
	{
		for(int j = 0; j < BOARD_WIDTH; j++)
		{
			//Draw tile bg
			glPushMatrix();
			glTranslatef(0, 0, TILEBG_DRAWZ);
			Point ptDrawPos(-fTotalWidth/2.0 + TILE_SPACING + (TILE_SPACING + TILE_WIDTH) * j,
							fTotalHeight/2.0 - TILE_SPACING - (TILE_SPACING + TILE_HEIGHT) * i);
			fillRect(ptDrawPos, Point(ptDrawPos.x + TILE_WIDTH, ptDrawPos.y - TILE_HEIGHT), m_TileBg[j][i]);
			glPopMatrix();
		}
	}
	
	//Draw joining-tile animations
	for(list<TilePiece*>::iterator i = m_lSlideJoinAnimations.begin(); i != m_lSlideJoinAnimations.end(); i++)
	{
		Point ptDrawPos(-fTotalWidth/2.0 + TILE_SPACING + (TILE_SPACING + TILE_WIDTH) * (*i)->destx,
						fTotalHeight/2.0 - TILE_SPACING - (TILE_SPACING + TILE_HEIGHT) * (*i)->desty);
		glPushMatrix();
		glTranslatef(ptDrawPos.x+TILE_WIDTH/2.0+(*i)->drawSlide.x, ptDrawPos.y-TILE_HEIGHT/2.0+(*i)->drawSlide.y, JOINANIM_DRAWZ);
		(*i)->draw();
		glPopMatrix();
	}
	
	//Draw tiles themselves (separate loop because z-order alpha issues with animations)
	for(int i = 0; i < BOARD_HEIGHT; i++)
	{
		for(int j = 0; j < BOARD_WIDTH; j++)
		{
			Point ptDrawPos(-fTotalWidth/2.0 + TILE_SPACING + (TILE_SPACING + TILE_WIDTH) * j,
							fTotalHeight/2.0 - TILE_SPACING - (TILE_SPACING + TILE_HEIGHT) * i);
			//Draw tile
			if(m_Board[j][i] != NULL)
			{
				glPushMatrix();
				glTranslatef(ptDrawPos.x+TILE_WIDTH/2.0+m_Board[j][i]->drawSlide.x, ptDrawPos.y-TILE_HEIGHT/2.0+m_Board[j][i]->drawSlide.y, TILE_DRAWZ);
				m_Board[j][i]->draw();
				glPopMatrix();
			}
		}
	}
	
	//Draw particle fx for highest tile
	if(m_highestTile != NULL)
	{
		for(int i = 0; i < BOARD_HEIGHT; i++)
		{
			for(int j = 0; j < BOARD_WIDTH; j++)
			{
				//Draw tile
				if(m_Board[j][i] == m_highestTile)
				{
					Point ptDrawPos(-fTotalWidth/2.0 + TILE_SPACING + (TILE_SPACING + TILE_WIDTH) * j,
								fTotalHeight/2.0 - TILE_SPACING - (TILE_SPACING + TILE_HEIGHT) * i);
					glPushMatrix();
					glTranslatef(ptDrawPos.x+TILE_WIDTH/2.0+m_Board[j][i]->drawSlide.x, ptDrawPos.y-TILE_HEIGHT/2.0+m_Board[j][i]->drawSlide.y, TILE_DRAWZ + 0.1);
					m_newHighTile->img = m_highestTile->bg->img;
					m_newHighTile->draw();
					m_newHighTile->img = m_highestTile->seg->img;
					m_newHighTile->draw();
					glPopMatrix();
					break;
				}
			}
		}
		
	}
	
	//Draw arrows for direction the mouse will move the board
	if(m_iMouseControl >= MOUSE_MOVE_TRIP_AMT && m_iCurMode == PLAYING)
	{
		glPushMatrix();
		Point ptMoveDir = worldPosFromCursor(getCursorPos());
		//Rotate first to simplify logic. Hooray!
		switch(getDirOfVec2(ptMoveDir))
		{
			case UP:
				glRotatef(90, 0, 0, 1);
				break;
				
			case DOWN:
				glRotatef(-90, 0, 0, 1);
				break;
				
			case LEFT:
				glRotatef(180, 0, 0, 1);
				break;
		}
		//Determine the drawing alpha based on how far away from the center the mouse is
		float32 fDestAlpha = min(fabs(ptMoveDir.Length() / (getCameraView().height() / 2.0)) - 0.4, 0.4);
		//Draw 16 arrows pointing in the direction we'll move
		for(int y = 0; y < BOARD_HEIGHT; y++)
		{
			for(int x = 0; x < BOARD_WIDTH; x++)
			{
				//Position to draw this arrow at
				Point ptDrawPos(-fTotalWidth/2.0 + (TILE_SPACING + TILE_WIDTH) * x + TILE_WIDTH / 2.0 + TILE_SPACING + m_fArrowAdd,
								fTotalHeight/2.0 - (TILE_SPACING + TILE_WIDTH) * y - TILE_HEIGHT / 2.0 - TILE_SPACING);
				
				//If this arrow is reaching the end of its lifespan, fade out
				float32 fDrawAlpha = fDestAlpha;
				if(m_fArrowAdd >= MOVEARROW_FADEOUTDIST && x == BOARD_WIDTH - 1)
					fDrawAlpha *= 1.0f - ((m_fArrowAdd - MOVEARROW_FADEOUTDIST) / MOVEARROW_FADEOUTDIST);
				fDrawAlpha = min(fDrawAlpha, 1.0f);
				fDrawAlpha = max(fDrawAlpha, 0.0f);
				
				//Now draw
				glColor4f(1,1,1,fDrawAlpha);
				glPushMatrix();
				glTranslatef(ptDrawPos.x, ptDrawPos.y, MOVEARROW_DRAWZ);
				m_imgMouseMoveArrow->render(Point(1,1));
				glPopMatrix();
				
				//See if we should draw new arrow spawning
				if(!x && (ARROW_RESET - m_fArrowAdd) <= MOVEARROW_FADEINDIST)
				{
					fDrawAlpha = fDestAlpha;
					fDrawAlpha *= 1.0 - (ARROW_RESET - m_fArrowAdd) / MOVEARROW_FADEINDIST;
					fDrawAlpha = min(fDrawAlpha, 1.0f);
					fDrawAlpha = max(fDrawAlpha, 0.0f);
					glColor4f(1,1,1,fDrawAlpha);
					glPushMatrix();
					glTranslatef(ptDrawPos.x - (TILE_SPACING + TILE_WIDTH), ptDrawPos.y, MOVEARROW_DRAWZ);
					m_imgMouseMoveArrow->render(Point(1,1));
					glPopMatrix();
				}
			}
		}
		glPopMatrix();
	}
}