void CText2D::Render(float _posX, float _posY) { __INT32 posX = __INT32 (_posX); __INT32 posY = __INT32 (_posY); for(int i = 0; i < strlen(m_strText); i++) { SCharMap* map = m_CharMap->GetMap(m_strText[i]); if(map != NULL) { SRect<__INT32> border(posX, posY, 30, 30); SRect<__INT32> texCoord(map->x, map->y, map->w, map->h); g->DrawImageRegion(border, texCoord, m_img); posX += 30; } } }
void MapObject::OnControllerEvent(SControllerEvent Event) { float ax,ay,az,aw; Matrix MVP; int mx=0; int my=0; float fx=0; float fy=0; __INT32 distance=0; TowerObject* tower; if (Event.Type == ECE_POINTER) { switch (Event.PointerData.Event) { case EPE_PRESSED: isPressed = true; dragDistanceX = 0; dragDistanceY = 0; break; case EPE_DRAGGED: distance= dragDistanceX*dragDistanceX + dragDistanceY*dragDistanceY; if (distance>50) isDrag=true; break; case EPE_RELEASED: if (isPressed) { MVP.LoadIdentity(); MVP.Multiply(*(CCamera3D::GetInstance()->GetProjectMatrix())); MVP.Multiply(*(CCamera3D::GetInstance()->GetViewMatrix())); ScreenPos2MapPos(Event.PointerData.X,Event.PointerData.Y,MVP,fx,fy); mx = __INT32(fx/scale); my = __INT32(fy/scale); if ((!isDrag)/* && ((mLogicMap[my*mWidth+mx]==OBJECT_NONE) || (mLogicMap[my*mWidth+mx]==OBJECT_TOWER))*/) { if (mx>=0 && mx<mWidth &&my>=0 && my<mHeight) { if (mLogicMap[my*mWidth+mx]==OBJECT_NONE) //click len vung dat trong' { ScreenPos2TowerPos(Event.PointerData.X,Event.PointerData.Y,MVP,mx,my); Log("Logic map position: %d %d", mx, my); if ((mx<mWidth) && (my<mHeight) && (mx>=0) && (my>=0)) { if (selected == my * mWidth + mx) { selected =-1; drawRange = 0; CList<__INT32> NullList; UpdateTowerBuildBar(&NullList); return; } selected = my * mWidth + mx; if ((mLogicMap[selected]==OBJECT_NONE) && (mLogicMap[selected+1]==OBJECT_NONE) && (mLogicMap[selected+mWidth]==OBJECT_NONE) && (mLogicMap[selected+mWidth+1]==OBJECT_NONE) && CPathManagement::GetInstance()->IsStillExist(selected)) //Vung dat 2x2 trong' { CStateIngame::currentBuildBar->sellButton->SetVisible(false); //kiem tra so button xay tru can hien CStateIngame::currentBuildBar->Tower1->SetVisible(true); Log("Truoc calc boundary"); CalculateBoundary(mx, my, SELECTED_BUILDABLE_CELL_COLOR,0); Log("Sau calc boundary"); CList<__INT32> towerList;//sau nay de thong tin cac tower co the xay tu dat' trong vao day towerList.AddItem(TOWER_GUN); UpdateTowerBuildBar(&towerList); } else //2x2 khong trong' { CStateIngame::currentBuildBar->sellButton->SetVisible(false); CalculateBoundary(mx, my, SELECTED_UNBUILDABLE_CELL_COLOR,0); //an het cac button xay tru CStateIngame::currentBuildBar->Tower1->SetVisible(false); CStateIngame::currentBuildBar->Tower2->SetVisible(false); CStateIngame::currentBuildBar->Tower3->SetVisible(false); CStateIngame::currentBuildBar->Tower4->SetVisible(false); } } } else if(mLogicMap[my*mWidth+mx]==OBJECT_TOWER)//click len TOWER { CStateIngame::currentBuildBar->sellButton->SetVisible(true); tower = (CObjectManagement::GetInstance()->GetTower(MapPosition(mx,my))); if (!tower) tower = (CObjectManagement::GetInstance()->GetTower(MapPosition(mx-1,my))); if (!tower) tower = (CObjectManagement::GetInstance()->GetTower(MapPosition(mx-1,my-1))); if (!tower) tower = (CObjectManagement::GetInstance()->GetTower(MapPosition(mx,my-1))); if (selected == tower->mPosition.mY * mWidth + tower->mPosition.mX) { selected =-1; drawRange = 0; CList<__INT32> NullList; UpdateTowerBuildBar(&NullList); return; } selected = tower->mPosition.mY * mWidth + tower->mPosition.mX; CalculateBoundary( tower->mPosition.mX, tower->mPosition.mY, SELECTED_TOWER_CELL_COLOR, tower->mProperties->mRange); UpdateTowerBuildBar(tower->mProperties->mLstChildren); } else //click len Enemy hoac tree { CStateIngame::currentBuildBar->sellButton->SetVisible(false); ScreenPos2TowerPos(Event.PointerData.X,Event.PointerData.Y,MVP,mx,my); CalculateBoundary(mx, my, SELECTED_UNBUILDABLE_CELL_COLOR,0); //an het cac button xay tru CStateIngame::currentBuildBar->Tower1->SetVisible(false); CStateIngame::currentBuildBar->Tower2->SetVisible(false); CStateIngame::currentBuildBar->Tower3->SetVisible(false); CStateIngame::currentBuildBar->Tower4->SetVisible(false); } } else selected = -1; } isPressed = false; } isDrag = false; break; } } }
void CSprite::UpdateAnimation(__UINT32 dt) { if (m_isEndOfAnimtion) { m_iElapsedTime = 0; return; } m_isEndOfAnimtion = true; if (m_pCurrentAnimation) { //Log("m_iElapsedTime %d", m_iElapsedTime); // calculate frame number m_iElapsedTime += dt; int frameNo = __INT32((m_iElapsedTime*m_iFps)/1000); //Log("%d m_iElapsedTime %d frNo %d",dt, __INT32(m_iElapsedTime), frameNo); // if move to new frame m_isEndOfAnimtion = false; if (frameNo != m_iCurrentFrameNo) { m_isEndOfAnimtion = true; m_iCurrentFrameNo = frameNo; // find suitable key frame if (m_pCurrentAnimation->KeyFrameList) { m_pCurrentAnimation->KeyFrameList->BeginTravel(); int nf = 0; while (!m_pCurrentAnimation->KeyFrameList->IsEndOfTravel()) { SSpriteDBAnimKeyFrame* kf = m_pCurrentAnimation->KeyFrameList->Travel(); nf += kf->Loop; if (nf > m_iCurrentAnimTotalFrame) {m_iCurrentAnimTotalFrame = nf;} //Log("nf %d %d",nf, m_iCurrentFrameNo); // if found if (nf > m_iCurrentFrameNo) { m_isEndOfAnimtion = false; //check if new KF if (m_pCurrentKeyFrame != kf) { m_pCurrentKeyFrame = kf; m_pCurrentFrame = 0; //link from KF to Frame if (m_pCurrentKeyFrame) { int frameID = m_pCurrentKeyFrame->FrameID; m_SpriteData->m_Frames.BeginTravel(); while (!m_SpriteData->m_Frames.IsEndOfTravel()) { SSpriteDBFrame *frame = m_SpriteData->m_Frames.Travel(); if(frame && frame->ID == frameID) { m_pCurrentFrame = frame; //link to Bitmap if any m_pCurrentBitmap = 0; if (m_pCurrentFrame && m_pCurrentFrame->Type == ESPRFRAME_TYPE_RECT_IMG) { m_SpriteData->m_Bitmaps.BeginTravel(); while(!m_SpriteData->m_Bitmaps.IsEndOfTravel()) { SSpriteDBBitmap *bitmap = m_SpriteData->m_Bitmaps.Travel(); if (bitmap && bitmap->ID == m_pCurrentFrame->RectImgFrame.ImgID) { m_pCurrentBitmap = bitmap; } } } break; } } } } break; }//if (nf > m_iCurrentFrameNo) }//while (!m_pCurrentAnimation->KeyFrameList->IsEndOfTravel()) }//if (m_pCurrentAnimation->KeyFrameList) }//if (frameNo != m_iCurrentFrameNo) //Log("m_isEndOfAnimtion %d", m_isEndOfAnimtion); if (m_isEndOfAnimtion) { if (m_iLoopCounter != 0) { if (m_iLoopCounter > 0) m_iLoopCounter--; m_iElapsedTime = Math_Min<__UINT64>(m_iElapsedTime - m_iCurrentAnimTotalFrame*m_iFps, 0); m_iCurrentFrameNo = -1; m_isEndOfAnimtion = false; } } }//if (m_pCurrentAnimation) }