void DrawTowers(TowerList *TL) { Tower *tempTower; for (int i = 0; i < TowerSize(TL); i++) { tempTower = TowerPeek(i,TL); int xPos = STARTX+TowerPosX(tempTower)*MAPSCALE; int yPos = STARTY+TowerPosY(tempTower); DrawEffect(tempTower,1); if (TowerDamage(tempTower) < 0) { // attron(COLOR_PAIR(8)); mvprintw(yPos,xPos,"%dR%d%d",TowerDamage(tempTower)*-1,TowerRange(tempTower),TowerRate(tempTower)); // attroff(COLOR_PAIR(8)); } else { mvprintw(yPos,xPos,"%dT%d%d",TowerDamage(tempTower),TowerRange(tempTower),TowerRate(tempTower)); } DrawEffect(tempTower,0); } }
TBool CHuiFxVg10BlurFilter::Draw(CHuiFxEngine& aEngine, CHuiGc& /* aGc */, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface) { aTarget.BindAsTexture(ERenderbufferUsageWriteOnly); aSource.BindAsTexture(ERenderbufferUsageReadOnly); VGImage srcImage = (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aSource))->AcquireSubImage(aSourceRect); VGImage destImage = (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aTarget))->AcquireSubImage(aTargetRect); // take opacity into account const VGfloat opacity = clamp(iOpacity, 0.0f, 1.0f); if(opacity > EPSILON) { DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height(), aHasSurface); } else { // VGint width = vgGetParameteri(srcImage, VG_IMAGE_WIDTH); // VGint height = vgGetParameteri(srcImage, VG_IMAGE_HEIGHT); VGint width = aSourceRect.Width(); VGint height = aSourceRect.Height(); vgClearImage(destImage, 0, 0, width, height); } HUIFX_VG_INVARIANT(); (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aSource))->ReleaseSubImage(srcImage); (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aTarget))->ReleaseSubImage(destImage); aTarget.UnbindAsTexture(); aSource.UnbindAsTexture(); return wasEnoughMemory(); }
void ParticleManager::DrawEffects() { for (auto it = _effects.begin(); it != _effects.end(); ++it) { for (auto it2 = it->begin(); it2 != it->end(); ++it2) { DrawEffect(*it2); } } }
void ParticleManager::DrawEffect( Effect *e ) { for (int i = 0; i < 10; ++i) { // particle const auto& plist = e->GetParticles(i); for (auto it = plist.begin(); it != plist.end(); ++it) { DrawParticle(*it); // effect auto& subeffects = (*it)->GetChildren(); for (auto it2 = subeffects.begin(); it2 != subeffects.end(); ++it2) { DrawEffect(static_cast<Effect*>(*it2)); } } } }
void StageDraw() { DrawMap(map, 0); DrawEnemy(map); DrawItem(map); DrawBomb(map); DrawEffect(map); DrawPlayer(map); #if !MAP_EDIT_MODE DrawTextureObject(res.player_right, 0, 0); FontPrintf(32, 16, "x %d", life); DrawTextureObject(res.font_stage, 128, 16); FontPrintf(128 + 16 * 5, 16, "%d", stageNum + 1); DrawTextureObject(res.font_score, 128 + 16 * 5 + 32, 16); FontPrintf(128 + 16 * 5 + 32 + 16 * 5 + 16 , 16, "%d", score); PrintWindow("fps: %d", engineFps); #endif }
void GloriousShot::Draw() { if( m_StatusFlags[ INVISIBLE ] ){ return; } float posX = m_GUData.m_PosX.GetFloat(); float posY = m_GUData.m_PosY.GetFloat(); int color = 0xFFFFFFFF; int scale = m_ImgScale; DrawEffect(); // 消去されるときは徐々に薄くなっていく。 if( m_StatusFlags[ DEAD ] ){ color = ( ( 20 - m_DeadCounter ) * 5 ) << 24 | 0xFFFFFF; scale += m_DeadCounter * 0.05f; } // 点滅 if( m_Counter % 16 >= 8 ){ m_DrawingMultiplicity = 2; } else{ m_DrawingMultiplicity = 1; } // 描画 for( int i = 0; i < m_DrawingMultiplicity; ++i ){ MAPIL::Assert( m_AtlasImgID != -1, CURRENT_POSITION, TSTR( "Invalid image ID was input." ), -1 ); for( int i = 0; i < m_DrawingMultiplicity; ++i ){ AddToAtlasSpriteBatch( true, m_AlphaBlendingMode, m_AtlasImgID, posX, posY, m_ImgScale, m_ImgScale, m_ImgRotAngle, true, color ); } } }
//******************************************************************************* void CBCGPChartInterLineColoringEffect::OnDraw(CBCGPGraphicsManager* pGM) { ASSERT_VALID(this); if (m_pSeries1 == NULL || m_arPointsSeries1.GetSize() < 2 || !IsVisible()) { return; } BOOL bWasTransparency = CBCGPGraphicsManagerGDI::IsTransparencyEnabled(); CBCGPGraphicsManagerGDI::EnableTransparency(); BCGPChartFormatSeries::ChartCurveType curveType = m_pSeries1->GetCurveType(); if (curveType == BCGPChartFormatSeries::CCT_STEP || curveType == BCGPChartFormatSeries::CCT_REVERSED_STEP || m_pSeries2 != NULL && (m_pSeries2->GetCurveType() == BCGPChartFormatSeries::CCT_STEP || m_pSeries2->GetCurveType() == BCGPChartFormatSeries::CCT_REVERSED_STEP)) { return; } CBCGPChartAxis* pXAxis = m_pSeries1->GetRelatedAxis(CBCGPChartSeries::AI_X); CBCGPRect rectBounds = pXAxis->GetBoundingRect(); CBCGPChartAxis* pYAxis = m_pSeries1->GetRelatedAxis(CBCGPChartSeries::AI_Y); if (pYAxis->m_bReverseOrder) { pYAxis->IsVertical() ? rectBounds.SwapTopBottom() : rectBounds.SwapLeftRight(); } if (pXAxis->m_bReverseOrder) { pXAxis->IsVertical() ? rectBounds.SwapTopBottom() : rectBounds.SwapLeftRight(); } BCGPSeriesColorsPtr colors; m_pSeries1->GetColors(colors, -1); CBCGPBrush& brFill = m_brTopBrush.IsEmpty() ? *colors.m_pBrElementFillColor : m_brTopBrush; CBCGPGeometry* pDrawGeometry = CreateGeometry(m_arPointsSeries1, rectBounds, curveType, FALSE); CBCGPGeometry* pClipGeometry = m_pSeries2 != NULL ? CreateGeometry(m_arPointsSeries2, rectBounds, m_pSeries2->GetCurveType(), TRUE) : CreateClipGeometry(m_dblOrigin); ASSERT_VALID(pDrawGeometry); ASSERT_VALID(pClipGeometry); DrawEffect(pGM, pDrawGeometry, pClipGeometry, rectBounds, brFill); delete pClipGeometry; delete pDrawGeometry; if (m_pSeries2 != NULL && m_arPointsSeries2.GetSize() > 2 && !m_bTopOnly) { BCGPSeriesColorsPtr colors; m_pSeries2->GetColors(colors, -1); pDrawGeometry = CreateGeometry(m_arPointsSeries2, rectBounds, m_pSeries2->GetCurveType(), FALSE); pClipGeometry = CreateGeometry(m_arPointsSeries1, rectBounds, curveType, TRUE); CBCGPBrush& brFill = m_brBottomBrush.IsEmpty() ? *colors.m_pBrElementFillColor : m_brBottomBrush; DrawEffect(pGM, pDrawGeometry, pClipGeometry, rectBounds, brFill); delete pClipGeometry; delete pDrawGeometry; } CBCGPGraphicsManagerGDI::EnableTransparency(bWasTransparency); }
void KeyDown_Level( SDLKey key ) { if( key == SDLK_d && ( event.key.keysym.mod & KMOD_LCTRL ) ) { if( Game_debug ) { sprintf( debugdisplay->text, "Game debugmode Disabled" ); debugdisplay->counter = DESIRED_FPS * 2; Game_debug = 0; } else { sprintf( debugdisplay->text, "Game debugmode Enabled" ); debugdisplay->counter = DESIRED_FPS * 2; Game_debug = 1; } return; } // Debug Keys only for some testing ;) // use F2 - F4 else if( key == SDLK_F3 && Game_debug ) { pPlayer->GotoNextLevel(); return; } else if( key == SDLK_F4 && Game_debug ) { DrawEffect( FIXED_RECTANGLE_PIXELATION ); //pPlayer->Fireball_add( FIREBALL_EXPLOSION ); return; } else if( key == SDLK_F5 ) { Save_Screenshot(); return; } else if( pJoystick->shoot && !Leveleditor_Mode ) { pPlayer->Fireball_add(); return; } else if( pJoystick->enter && !Leveleditor_Mode ) { Itembox->Request_Item(); return; } else if( key == SDLK_s && Leveleditor_Mode ) { pLevel->Save(); return; } else if( key == SDLK_F8 ) { Leveleditor_Mode = !Leveleditor_Mode; if( Leveleditor_Mode ) { if( !pLeveleditor->wMenu_Count ) { pLeveleditor->Load_Default_Menu(); } sprintf( debugdisplay->text, "Editor Mode enabled" ); } else { sprintf( debugdisplay->text, "Editor Mode disabled" ); cameraposy = pPlayer->posy - (double)( screen->h/2 ); cameraposx = pPlayer->posx + (double)( screen->w/2 ); pMouseCursor->mover_mode = 0; pMouseCursor->fastCopyMode = 0; } debugdisplay->counter = DESIRED_FPS * 2; pAudio->PlaySound( SOUNDS_DIR "/leveleditor.ogg" ); return; } else if( keys[SDLK_g] && keys[SDLK_o] && keys[SDLK_d] && !Leveleditor_Mode ) { if( pPlayer->debugmode ) { pPlayer->debugmode = 0; sprintf( debugdisplay->text, "Funky Godmode disabled" ); } else { pPlayer->debugmode = 1; sprintf( debugdisplay->text, "Funky Godmode enabled" ); } debugdisplay->counter = DESIRED_FPS * 2; return; } else if( key == pPreferences->Key_up ) { pPlayer->Start_jump_keytime(); return; } else if( SDLK_j && pPlayer->debugmode ) { pPlayer->Start_jump(); return; } else if( key == pPreferences->Key_down && !Leveleditor_Mode ) { pPlayer->Start_ducking(); return; } else if( Leveleditor_Mode ) // Additional EditMode Keys { if ( key == SDLK_F1 ) { // Todo : a leveditor help screen } else if( key == SDLK_HOME ) // new { cameraposx = 0; cameraposy = 0; } else if( key == SDLK_END ) // new { double new_cameraposx = 0; double new_cameraposy = 0; for( unsigned int i = 0; i < ActiveObjects.size(); i++ ) { if( !ActiveObjects[i] ) { continue; } if( ActiveObjects[i]->type == TYPE_LEVELEXIT && new_cameraposx < ActiveObjects[i]->posx ) { new_cameraposx = ActiveObjects[i]->posx; new_cameraposy = ActiveObjects[i]->posy; } } if( new_cameraposx != 0 || new_cameraposy != 0 ) { cameraposx = new_cameraposx - ( pPreferences->Screen_W/2 ); cameraposy = new_cameraposy - ( pPreferences->Screen_H/2 ); } } else if( key == SDLK_n ) { cameraposx += pPreferences->Screen_W; } else if( key == SDLK_p ) { cameraposx -= pPreferences->Screen_W; } // Precise Pixel-Positioning else if( key == SDLK_KP2 && pMouseCursor->MouseObject ) { if( pMouseCursor->fastCopyMode ) { if( pMouseCursor->MouseObject->StartImage ) { pMouseCursor->Copy( pMouseCursor->MouseObject, pMouseCursor->MouseObject->posx, pMouseCursor->MouseObject->posy + pMouseCursor->MouseObject->StartImage->h ); cameraposy += pMouseCursor->MouseObject->StartImage->h; } } else { cameraposy++; } } else if( key == SDLK_KP4 && pMouseCursor->MouseObject ) { if( pMouseCursor->fastCopyMode ) { if( pMouseCursor->MouseObject->StartImage ) { pMouseCursor->Copy( pMouseCursor->MouseObject, pMouseCursor->MouseObject->posx - pMouseCursor->MouseObject->StartImage->w, pMouseCursor->MouseObject->posy ); cameraposx -= pMouseCursor->MouseObject->StartImage->w; } } else { cameraposx--; } } else if( key == SDLK_KP6 && pMouseCursor->MouseObject ) { if( pMouseCursor->fastCopyMode ) { if( pMouseCursor->MouseObject->StartImage ) { pMouseCursor->Copy( pMouseCursor->MouseObject, pMouseCursor->MouseObject->posx + pMouseCursor->MouseObject->StartImage->w, pMouseCursor->MouseObject->posy ); cameraposx += pMouseCursor->MouseObject->StartImage->w; } } else { cameraposx++; } } else if( key == SDLK_KP8 && pMouseCursor->MouseObject ) { if( pMouseCursor->fastCopyMode ) { if( pMouseCursor->MouseObject->StartImage ) { pMouseCursor->Copy( pMouseCursor->MouseObject, pMouseCursor->MouseObject->posx, pMouseCursor->MouseObject->posy - pMouseCursor->MouseObject->StartImage->h ); cameraposy -= pMouseCursor->MouseObject->StartImage->h; } } else { cameraposy--; } } else if( key == SDLK_m && pMouseCursor->MouseObject ) { // modify Passive/Massive/Halfmassive/Climbable pLeveleditor->Switch_ObjectState(); return; } else if( key == SDLK_c && ( event.key.keysym.mod & KMOD_LCTRL ) && Leveleditor_Mode ) // Copy an Sprite { if( pMouseCursor->MouseObject ) { pMouseCursor->CopyObject = pMouseCursor->MouseObject; } } else if( key == SDLK_v && ( event.key.keysym.mod & KMOD_LCTRL ) && Leveleditor_Mode ) // Paste an Sprite { if( pMouseCursor->CopyObject ) { pMouseCursor->Copy( pMouseCursor->CopyObject, pMouseCursor->posx, pMouseCursor->posy ); pMouseCursor->mouse_H = pMouseCursor->CopyObject->rect.h/2; pMouseCursor->mouse_W = pMouseCursor->CopyObject->rect.w/2; } } } }
void BeamShotM::Draw() { if( m_StatusFlags[ INVISIBLE ] ){ return; } float posX = m_GUData.m_PosX.GetFloat(); float posY = m_GUData.m_PosY.GetFloat(); int color = 0xFFFFFFFF; float scale = 0.0f; float angle = ::atan2( m_Line.GetEndY() - m_Line.GetStartY(), -m_Line.GetEndX() + m_Line.GetStartX() ) - MAPIL::DegToRad( 90.0f ); float length = std::sqrt( ( m_Line.GetEndX() - m_Line.GetStartX() ) * ( m_Line.GetEndX() - m_Line.GetStartX() ) + ( m_Line.GetEndY() - m_Line.GetStartY() ) * ( m_Line.GetEndY() - m_Line.GetStartY() ) ); // 消去されるときは徐々に薄くなっていく。 if( m_StatusFlags[ DEAD ] ){ color = ( ( 20 - m_DeadCounter ) * 5 ) << 24 | 0xFFFFFF; scale = ( 20 - m_DeadCounter ) / 20.0f; } else{ // 拡大率 if( m_Counter < 20 ){ scale = 1.0f; } else if( m_Counter >= 20 && m_Counter < 60 ){ scale = ( m_Counter - 20 ) / 40.0f; } else if( m_Counter >= 60 ){ scale = 1.0f; } } // 点滅エフェクト if( m_Counter > 20 ){ if( m_Counter % 16 == 0 || m_Counter % 16 == 12 ){ m_DrawingMultiplicity = 2; } if( m_Counter % 16 == 10 || m_Counter % 16 == 14 ){ m_DrawingMultiplicity = 1; } } else{ m_DrawingMultiplicity = 1; } // 描画 unsigned int texSizeX; unsigned int texSizeY; int img; MAPIL::Assert( m_AtlasImgID != -1, CURRENT_POSITION, TSTR( "Invalid image ID was input." ), -1 ); ResourceMap::TextureAtlas atlas; if( m_Counter < 20 ){ img = LASER_MAKER_TEX_ID + m_TexColor; } else{ img = m_AtlasImgID; } atlas = m_pResourceMap->m_pGlobalResourceMap->m_TexAtlasMap[ img ]; texSizeX = atlas.m_Width; texSizeY = atlas.m_Height; for( int i = 0; i < m_DrawingMultiplicity; ++i ){ AddToAtlasSpriteBatch( true, m_AlphaBlendingMode, img, m_Line.GetStartX() - ( texSizeX * scale / 2.0f ) * cos( angle ), m_Line.GetStartY() + ( texSizeX * scale / 2.0f ) * sin( angle ), scale, length / texSizeY, angle, false, color ); } DrawEffect(); }