//描画 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; }
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(); } }