void RenderSystem::v_Render() { BeginScene(); m_Matrix.view = m_Camera.GetViewMatrix(); DisableZbuffer(); DisableCulling(); m_Matrix.view._14 = 0.0f; m_Matrix.view._24 = 0.0f; m_Matrix.view._34 = 0.0f; m_Matrix.view._41 = 0.0f; m_Matrix.view._42 = 0.0f; m_Matrix.view._43 = 0.0f; XMMATRIX sphereWorld = XMMatrixIdentity(); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(sphereWorld)); m_Skymap.Render(m_pD3D11DeviceContext, m_Matrix); EnableCulling(); EnableZbuffer(); m_Matrix.view = m_Camera.GetViewMatrix(); XMMATRIX gridModel = XMMatrixIdentity(); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(gridModel)); m_Terrain.Render(m_pD3D11DeviceContext, m_Matrix); DrawInfo(); EndScene(); }
//---------------------------------------------------------------------------- bool GamePlayApp::OnIdle () { bool odle = Application::OnIdle(); if (!odle) return false; if (IsIsInBackground()) return false; if (!mIsProjectCreated) return false; Project *proj = Project::GetSingletonPtr(); if (!proj) return false; Scene *scene = proj->GetScene(); UIView *uiView = PX2_UIM.GetDefaultView(); if (mRenderer->PreDraw()) { mRenderer->SetViewport(0, 0, mWidth, mHeight); mRenderer->InitRenderStates(); mRenderer->ClearBuffers(); // scene if (scene) { mRenderer->SetCamera(scene->GetCameraActor()->GetCamera()); scene->CallRendererSetViewport(); mRenderer->Draw(scene->GetCuller().GetVisibleSet().Sort()); } // ui if (uiView && proj->IsShowUI()) { mRenderer->InitRenderStates(); mRenderer->ClearDepthBuffer(); CameraPtr beforeCam = mRenderer->GetCamera(); mRenderer->SetCamera(uiView->GetCamera()); uiView->CallRendererSetViewport (); mRenderer->Draw(uiView->GetCuller().GetVisibleSet().Sort()); if (proj->IsShowProjectInfo()) { DrawInfo(uiView->GetCamera()); } mRenderer->SetCamera(beforeCam); } mRenderer->PostDraw(); mRenderer->DisplayColorBuffer(); } return true; }
void RenderSystem::v_Render() { BeginScene(); UpdateScene(); XMMATRIX Model = XMMatrixIdentity(); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(Model)); m_Matrix.view = m_Camera.GetViewMatrix(); m_Cube.Render(m_pD3D11DeviceContext.Get(), m_Matrix.model, m_Matrix.view, m_Matrix.proj); XMFLOAT3 camPos = m_Camera.GetPos(); XMFLOAT3 modelPos; modelPos.x = 0.0f; modelPos.y = 1.5f; modelPos.z = 0.0f; // Calculate the rotation that needs to be applied to the billboard model to face the current camera position using the arc tangent function. float angle = atan2(modelPos.x - camPos.x, modelPos.z - camPos.z) * (180.0 / XM_PI); // Convert rotation into radians. float rotation = (float)angle * 0.0174532925f; // Setup the rotation the billboard at the origin using the world matrix. XMMATRIX world = XMMatrixRotationY(rotation); // Setup the translation matrix from the billboard model. XMMATRIX trans = XMMatrixTranslation(modelPos.x, modelPos.y, modelPos.z); world *= trans; XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(world)); m_Square.Render(m_pD3D11DeviceContext.Get(), m_Matrix.model, m_Matrix.view, m_Matrix.proj); DrawInfo(); EndScene(); }
void RenderSystem::v_Render() { BeginScene(); m_Matrix.view = m_Camera.GetViewMatrix(); m_Grid.Render(m_pD3D11DeviceContext, m_Matrix); DrawInfo(); EndScene(); }
void CDebug::Render() { if(m_bWireFrame) { _SINGLE(CDevice)->GetDevice()->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); } else { _SINGLE(CDevice)->GetDevice()->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); } DrawInfo(); }
static void Redraw (void) { char sdev[64]; Video_DrawBackgroud (1); *sdev = '\0'; if (!config.subpath[0]) { strcpy (sdev, ""); if ((config.appDev == 0 || config.appDev == 1) && devices_Get(DEV_SD)) { strcat (sdev, "["); strcat (sdev, devices_Get(DEV_SD)); strcat (sdev, "] "); } if ((config.appDev == 0 || config.appDev == 2) && devices_Get(DEV_USB)) { strcat (sdev, "["); strcat (sdev, devices_Get(DEV_USB)); strcat (sdev, "] "); } if (strlen (sdev) == 0) { strcpy (sdev, "Invalid dev !!!"); } } else { sprintf (sdev, "%s://apps/%s", config.submount, config.subpath); } Video_SetFont(TTFNORM); int w1 = grlib_printf ( 25, 26, GRLIB_ALIGNLEFT, 0, "postLoader::HomeBrews - %s", sdev); int w2 = grlib_printf ( 615, 26, GRLIB_ALIGNRIGHT, 0, "Page %d of %d", page+1, pageMax+1); w1 = w1 + 25; w2 = 615 - w2; Video_SetFont(TTFVERYSMALL); grlib_printf ( w1 + (w2 - w1) / 2, 27, GRLIB_ALIGNCENTER, 0, GetFilterString((w2 - w1) - 30), sdev); if (redrawIcons) RedrawIcons (0,0); Video_DrawVersionInfo (); if (!redrawSkipInfo) DrawInfo (); }
void RenderSystem::v_Render() { static float rot = 0.0f; rot += m_Timer.GetDeltaTime(); BeginScene(); m_Matrix.view = m_Camera.GetViewMatrix(); m_Hill.Render(m_pD3D11DeviceContext, m_Matrix, &m_Timer); DrawInfo(); EndScene(); }
static void RedrawSubScreen(void) { switch(ProcState.Text.TopScrMode){ case ETTSM_LightOff: { pScreenSub->pCanvas->FillFull(RGB15(0,0,0)|BIT15); IPC6->LCDPowerControl=LCDPC_ON_BOTTOM; } break; case ETTSM_Text: { DrawCurrentText_Sub(pScreenSub->pCanvas); } break; case ETTSM_Clock: { Clock_Standby_Draw(pTmpBM); DrawInfo(pTmpBM); pTmpBM->BitBltFullBeta(pScreenSub->pCanvas); IPC6->LCDPowerControl=LCDPC_ON_BOTH; } break; } }
void Sprite::Draw(HDC hdcDest) { if (obj_statu == STATU_dormant) return; if (spBitMap[spAnimations[animIndex][BitMapFrame]]) { if (Dir == NORTHEAST || Dir == EAST || Dir == SOUTHEAST) { spBitMap[spAnimations[animIndex][BitMapFrame]]->Draw(hdcDest, pos_x - ViewportPos_x, pos_y - ViewportPos_y, true); } else { spBitMap[spAnimations[animIndex][BitMapFrame]]->Draw(hdcDest, pos_x - ViewportPos_x, pos_y - ViewportPos_y); } DrawInfo(hdcDest); } }
void CpermoDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); //解决闪烁问题,双缓冲绘图 //可以单独建立一个内存DC类 RECT rcClient; this->GetClientRect(&rcClient); CDC MemDC; CBitmap bitmap; MemDC.CreateCompatibleDC(&dc); bitmap.CreateCompatibleBitmap(&dc, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top); MemDC.SelectObject(&bitmap); DrawBackground(&MemDC); DrawInfo(&MemDC); dc.BitBlt(0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, &MemDC, 0, 0, SRCCOPY); bitmap.DeleteObject(); MemDC.DeleteDC(); CDialog::OnPaint(); } }
void InitLevel( void ) { int i; char text[64]; in_level=0; pause=0; killall=0; action=0; lem_in=0; lem_run=0; afunc=-1; main_x=660; memset(deko,0,sizeof(deko)); memset(bgImage,STEELBLUE,1600*160); deko[0]=CreateSprite(0,0,main_x+160,80); // cursor deko[0]->anilocked=1; switch( level ) { case 1 : case 4 : case 6 : /* deko */ deko[1]=CreateSprite(1,0,726,39); // tor deko[1]->anilocked=1; deko[1]->backlocked=1; /* zielhaus */ deko[2]=CreateSprite(7,0,871,106); // haus deko[2]->anilocked=1; deko[2]->backlocked=1; deko[3]=CreateSprite(2,0,876,108); // flamme deko[3]->backlocked=1; deko[4]=CreateSprite(2,3,902,108); // flamme deko[4]->backlocked=1; MirrorSprite( deko[4] ); /* setup */ memset(lemm,0,sizeof(lemm)); memset(portfolio,0,sizeof(portfolio)); switch( level ) { case 6 : portfolio[7]=2; portfolio[3]=2; portfolio[2]=2; break; case 1 : portfolio[7]=10; #if 1 portfolio[6]=10; portfolio[4]=10; portfolio[3]=10; portfolio[2]=10; #endif break; case 4 : portfolio[2]=5; break; } haus_x=889; haus_y1=117; haus_y2=135; to_rescue=level==6?39:5; newspeed=level==6?1:50; lem_cnt=level==6?40:10; break; case 2 : /* deko */ deko[1]=CreateSprite(1,0,726,7); // tor deko[1]->anilocked=1; deko[1]->backlocked=1; /* zielhaus */ deko[2]=CreateSprite(7,1,700,128); // haus deko[2]->anilocked=1; deko[2]->backlocked=1; deko[3]=CreateSprite(2,0,704,129); // flamme deko[3]->backlocked=1; deko[4]=CreateSprite(2,3,731,129); // flamme deko[4]->backlocked=1; MirrorSprite( deko[4] ); /* setup */ memset(lemm,0,sizeof(lemm)); memset(portfolio,0,sizeof(portfolio)); portfolio[3]=4; haus_x=718; haus_y1=139; haus_y2=157; to_rescue=25; newspeed=50; lem_cnt=50; break; case 3 : /* deko */ deko[1]=CreateSprite(1,0,726,23); // tor deko[1]->anilocked=1; deko[1]->backlocked=1; /* zielhaus */ deko[2]=CreateSprite(7,1,1000,128); // haus deko[2]->anilocked=1; deko[2]->backlocked=1; deko[3]=CreateSprite(2,0,1004,129); // flamme deko[3]->backlocked=1; deko[4]=CreateSprite(2,3,1031,129); // flamme deko[4]->backlocked=1; MirrorSprite( deko[4] ); /* setup */ memset(lemm,0,sizeof(lemm)); memset(portfolio,0,sizeof(portfolio)); portfolio[3]=2; portfolio[7]=2; haus_x=1018; haus_y1=139; haus_y2=157; to_rescue=50; newspeed=50; lem_cnt=50; break; case 5 : /* deko */ deko[1]=CreateSprite(1,0,712,3); // tor deko[1]->anilocked=1; deko[1]->backlocked=1; /* zielhaus */ deko[2]=CreateSprite(7,1,1150,117); // haus deko[2]->anilocked=1; deko[2]->backlocked=1; deko[3]=CreateSprite(2,0,1154,118); // flamme deko[3]->backlocked=1; deko[4]=CreateSprite(2,3,1181,118); // flamme deko[4]->backlocked=1; MirrorSprite( deko[4] ); /* feuer */ deko[5]=CreateSprite(9,0,849,39); // feuer deko[6]=CreateSprite(9,0,979,39); // feuer deko[7]=CreateSprite(9,0,880,66); // feuer deko[8]=CreateSprite(9,0,880,107); // feuer deko[9]=CreateSprite(9,0,979,131); // feuer deko[10]=CreateSprite(9,0,1002,86); // feuer /* setup */ memset(lemm,0,sizeof(lemm)); memset(portfolio,0,sizeof(portfolio)); portfolio[2]=5; portfolio[3]=3; haus_x=1168; haus_y1=128; haus_y2=146; to_rescue=30; newspeed=50; lem_cnt=50; break; } minspeed=newspeed; DrawLevelIntoBg(); /* copy level to screen */ CopyBg2Screen( main_x, 0, 328, 160 ); SpritesGetBackground(); DrawSprites(); /* Draw Menu-Item-Numbers */ for( i=0; i<8; i++ ) DrawNumber( 106+i*32, 389, portfolio[i] ); DrawNumber( 42, 389, newspeed ); DrawNumber( 74, 389, 100-newspeed ); DrawInfo(3); /* show level info */ FBFillRect( 60, 448, 200, 100, BLACK ); sprintf(text,"Lemmings : %d ",lem_cnt); FBDrawString(64,450,32,text,WHITE,0); sprintf(text,"%d%% to be saved ",to_rescue*100/lem_cnt); FBDrawString(64,482,32,text,WHITE,0); sprintf(text,"Release Rate %d ",100-newspeed); FBDrawString(64,514,32,text,WHITE,0); SoundPlay( SND_LETSGO ); }
void RunLemm( void ) { static int counter1=0; static int blinkc=0; int i; int f; int b; Sprite *s; int cursor_get=0; int kab=0; int hbk=0; // hat boden kontakt //int hhy=0; blinkc++; if ( action==3 ) { counter1=0; action=4; DrawSprite( deko[0] ); return; } if ( action==4 ) { counter1++; if ( counter1 < 24 ) return; if ( to_rescue > lem_in ) { FBDrawString( 252, 142, 64, "You lost !", WHITE, 0 ); FBDrawString( 250, 140, 64, "You lost !", RED, 0 ); } else { level++; if ( level>LASTLEVEL ) { FBDrawString( 252, 142, 64, "all level solved", WHITE, 0 ); FBDrawString( 250, 140, 64, "all level solved", GREEN, 0 ); FBDrawString( 240, 250, 36, "thanx to emuman for his javacode,", WHITE, 0 ); FBDrawString( 240, 286, 36, "Psygnosis and DMA for artwork...", WHITE, 0 ); level=1; doexit=2; return; } else { FBDrawString( 252, 142, 64, "Level solved", WHITE, 0 ); FBDrawString( 250, 140, 64, "Level solved", GREEN, 0 ); } } if ( afunc != -1 ) FBCopyImage( (afunc+2)*32+32, 384, 32, 48, svdimage[afunc+2] ); action=5; doexit=1; } if ( action != 2 ) { DrawSprite( deko[0] ); return; } if ( pause ) { UndrawSprite( deko[0] ); for( i=0; i<lem_run; i++ ) { if ( !lemm[i] ) continue; UndrawSprite( lemm[i] ); } DrawSprite( deko[1] ); // ziel DrawSprite( deko[2] ); // ziel for( i=0; i<lem_run; i++ ) { if ( !lemm[i] ) continue; s=lemm[i]; if (( s->type & TYP_EXPLODE ) && ( s->countdown > 0 )) { DrawSimpleNumber( s->x-main_x, s->y-6, s->countdown, 1 ); } SpriteGetBackground( s ); DrawSprite( s ); } SpriteSelPic( deko[0], 0 ); SpriteGetBackground( deko[0] ); DrawSprite( deko[0] ); if ( blinkc%5 ) return; if ( pause == 1 ) { FBCopyImage( 10*32+32, 384, 32, 48, svdimage[10] ); pause=2; } else { FBDrawRect( 10*32+32, 384, 31, 47, BLUE ); FBDrawRect( 10*32+33, 385, 29, 45, BLUE ); pause=1; } return; } sel_sprite=-1; if (( lem_run < lem_cnt ) && !( counter1%((newspeed/2)+3) ) && !killall ) { lemm[ lem_run ] = CreateSprite(3,0,deko[1]->x+19,deko[1]->y); lemm[ lem_run ]->dir=0; // rechts lemm[ lem_run ]->type = TYP_WALKER; in_level++; lem_run++; DrawInfo(1); } if ( in_level ) UndrawSprite( deko[0] ); for( i=0; i<lem_run; i++ ) { if ( !lemm[i] ) continue; s=lemm[i]; if ( s->type & TYP_EXPLODE ) restorecd( i ); else if (( s->type & TYP_FALLEN ) && s->partikel ) restorecd( i ); UndrawSprite( s ); s->counter1++; if ( !( s->counter1 % 10 ) && ( s->type & TYP_EXPLODE ) ) { s->countdown--; if ( s->countdown == -1 ) { s->counter1=0; bg2CopyImage( s->x-7, s->y-4, 21, 21, pbomb ); CopyBg2Screen( s->x-7,s->y-4, 21, 21); } } if (( s->counter1 == 2 ) && ( s->type & TYP_STOPPER ) && !( s->type & TYP_EXPLODE )) bgRect( s->x+1, s->y, s->width-1, s->height-2, 150 ); } // DrawSprite( deko[2] ); // ziel UnanimatedDeko(); for( i=0; i<lem_run; i++ ) { if ( !lemm[i] ) continue; s=lemm[i]; if ( killall && !kab ) { if ( !(s->type & TYP_EXPLODE ) ) { s->type |= TYP_EXPLODE; s->counter1=1; kab++; } } if ( (s->countdown==-1) && ( s->type & TYP_EXPLODE ) ) { s->partikel=1; partikel(i,1); } if ( !( s->counter1 % 10 ) && ( s->type & TYP_EXPLODE ) ) { if ( s->countdown == -1 ) { s->y-=4; s->x-=4; SpriteChangePic( s, 8 ); // explosion SpriteGetBackground( s ); DrawSprite(s); SoundPlay( SND_EXPLODE ); } if ( s->countdown == -2 ) { partikel(i,0); killlem( i ); s=0; DrawInfo(1); } } if ( s && ( s->countdown < 0 )) s=0; if ( s && ( s->type & TYP_FALLEN ) ) { if ( s->counter1 < 10 ) { s->partikel=1; partikel(i,1); } else { killlem( i ); DrawInfo(1); } s=0; } if ( s&&(s->countdown>0) ) { SpriteNextPic( s ); if ( s->type&TYP_ATHOME ) { s->y-=1; if(s->ani==4) { lem_in++; killlem(i); SoundPlay( SND_OING ); DrawInfo(3); } } else { /* lemming im ziel ? */ if((s->x==haus_x)&&(s->y>haus_y1)&& (s->y<haus_y2)) { s->type=TYP_ATHOME; s->counter2=0; SpriteChangePic( s, 6 ); // lemming4 } else { /* kein bodenkontakt ? */ switch( s->type & TYP_WORK ) { case TYP_WALKER : case TYP_DIGDOWN : hbk=isBrick(s->x+1,s->y+s->height,0)|| isBrick(s->x-2+s->width,s->y+s->height,0); break; case TYP_STOPPER : hbk=isBrick(s->x+1,s->y+s->height+1,0)|| isBrick(s->x-2+s->width,s->y+s->height+1,0); break; case TYP_DIGDIAG : hbk=isBrick(s->x+10,s->y+s->height-2,0)|| isBrick(s->x+11,s->y+s->height-2,0); break; case TYP_BUILDER : hbk=1; break; } if ( !hbk ) { #if 0 if ( s->type & TYP_DIGDIAG ) { hhy=s->y+s->height-2; printf("kein boden on %d, %d\n",s->x,s->y+s->height); } #endif if( !( s->type&TYP_WALKER ) ) { switch( s->type & TYP_WORK ) { case TYP_STOPPER : bgRect(s->x+1,s->y,s->width-1,s->height-2,14); break; case TYP_DIGDIAG : s->y+=5; if ( !s->dir ) s->x+=7; break; case TYP_DIGDOWN : s->y+=2; break; } s->type=TYP_WALKER|(s->type&TYP_UTILS); SpriteChangePic( s, 3 ); // lemming1-faller if ( s->dir ) MirrorSprite( s ); } // freier fall s->y += 2; s->counter2++; // aus bild gefallen if(s->y>=160) { SoundPlay( SND_DIE ); killlem(i); DrawInfo(1); } } else { if(s->type&TYP_WALKER) { /* aufgeschlagen */ if(s->counter2>=40) { s->counter1=0; s->type=TYP_FALLEN; SoundPlay( SND_DIE ); s->partikel=1; partikel(i,1); s=0; } else { /* wieder auf boden */ s->counter2=0; /* laeufer - getestet wird oben */ if((isBrick(s->x,s->y+1,1)&& (s->dir==1))|| (isBrick(s->x+s->width,s->y+1,1)&& (s->dir==0))) { MirrorSprite( s ); s->dir^=1; } else { s->x += (s->dir?-1:1); if ( s->dir ) { for(b=8;b>0;b--) { if(isBrick(s->x, s->y+s->height-b,0)) { s->y-=1; b=0; } } } else { for(b=8;b>0;b--) { if(isBrick(s->x+s->width, s->y+s->height-b,0)) { s->y-=1; b=0; } } } } } /* else, kein matsch */ } /** walker **/ else if(s&&(s->type&TYP_BUILDER)) { unsigned char c=118; // stair if ( !s->ani ) { s->counter2++; s->y--; if ( s->counter2 != 13 ) { if ( s->dir ) { s->x-=2; bghLine(s->x+2,s->y+s->height,6,&c,1); CopyBg2Screen( s->x+2,s->y+s->height,6,1); if ( isBrick(s->x+1,s->y+2,1) ) { s->y+=2; s->dir=0; s->counter2=13; } } else { s->x+=2; bghLine(s->x+1,s->y+s->height,6,&c,1); CopyBg2Screen( s->x+1,s->y+s->height,6,1); if ( isBrick(s->x+s->width,s->y+2,1) ) { s->y+=2; s->dir=1; s->counter2=13; } } } if ( s->counter2 == 12 ) { s->y+=2; SpriteChangePic( s, 32 );//keinesteine if ( s->dir ) MirrorSprite( s ); } if ( s->counter2 == 13 ) { s->type&=TYP_UTILS; s->type|=TYP_WALKER; SpriteChangePic( s, 3 );// lemming1 if ( s->dir ) MirrorSprite( s ); } } } else if(s&&(s->type&TYP_DIGDOWN)) { if(!(s->counter1%8)) { if(s->y<160) { bgRect( s->x+1, s->y+4, 10, 8-max(0,s->y-152), STEELBLUE ); s->y+=1; cursor_get=1; } } } /* digger */ else if(s&&(s->type&TYP_DIGDIAG)) { if ( s->ani == 8 ) { if ( s->dir ) { unsigned char *data = GetMirrorPic(34); bg2CopyImage(s->x+1,s->y+2,6,14,data); } else { inBg(34,0,s->x+11,s->y+2); } } if ( !s->ani ) { s->y+=1; if ( s->dir ) s->x-=2; else s->x+=2; } } } /* freier fall */ } /* nicht am ziel */ } /* countdown */ if ( s&&(level==5) ) { /* ab ins feuer ? */ for( f=5; f<11; f++ ) { if ( SpriteCollide( deko[f], s->x+s->width, s->y ) ) { SoundPlay( SND_DIE ); killlem(i); s=0; break; } } } } /* typ-fallen */ if ( !lemm[i] || !s ) continue; if (( s->type & TYP_EXPLODE ) && ( s->countdown > 0 )) { DrawSimpleNumber( s->x-main_x, s->y-6, s->countdown, 1 ); } SpriteGetBackground( s ); DrawSprite( s ); if ( SpriteCollide( s, deko[0]->x+7, deko[0]->y+7 ) ) { sel_sprite=i; } } if ( cursor_get ) SpriteGetBackground( deko[0] ); if ( sel_sprite != -1 ) { SpriteSelPic( deko[0], 1 ); } else { SpriteSelPic( deko[0], 0 ); } DrawSprite( deko[0] ); #if 0 if ( hhy ) FBDrawLine(32,hhy+hhy+32,656,hhy+hhy+32,RED); #endif counter1++; }
void Window_ActorInfo::Refresh() { contents->Clear(); DrawInfo(); }
// // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; int nWinX, nWinY, nClientX, nClientY; RECT rect; BOOL bTmpTetris[4][4]; switch (message) { case WM_CREATE: //获取窗口大小 GetWindowRect(hWnd, &rect); nWinX = rect.right - rect.left; nWinY = rect.bottom - rect.top; //获取客户区大小 GetClientRect(hWnd, &rect); nClientX = rect.right - rect.left; nClientY = rect.bottom - rect.top; MoveWindow(hWnd, 0, 0, 3 * BOUND_SIZE + (GAME_X + INFO_X)* TETRIS_SIZE + (nWinX - nClientX), 2 * BOUND_SIZE + GAME_Y * TETRIS_SIZE + (nWinY - nClientY), TRUE); InitGame(); SetTimer(hWnd, MY_TIMER, g_uiInterval, NULL); break; case WM_TIMER: if (CheckTetris(TetrisX, TeTrisY + 1, g_CurTetris, g_stGame)) { TeTrisY++; } else { if (TeTrisY == 0) { KillTimer(hWnd, MY_TIMER); MessageBox(NULL, L"失败", L"FAIL", MB_OK); } RefreshTetris(TetrisX, TeTrisY, g_CurTetris, g_stGame); } InvalidateRect(hWnd, NULL, TRUE); break; case WM_LBUTTONDOWN: RotateTetris(g_CurTetris); InvalidateRect(hWnd, NULL, TRUE); break; case WM_KEYDOWN: switch (wParam) { case VK_LEFT: //左方向键 if (CheckTetris(TetrisX - 1, TeTrisY, g_CurTetris, g_stGame)) { TetrisX--; InvalidateRect(hWnd, NULL, TRUE); } else { MessageBeep(0); } break; case VK_RIGHT: if (CheckTetris(TetrisX + 1, TeTrisY, g_CurTetris, g_stGame)) { TetrisX++; InvalidateRect(hWnd, NULL, TRUE); } break; case VK_UP: memcpy(bTmpTetris, g_CurTetris, sizeof (bTmpTetris)); RotateTetris(bTmpTetris); if (CheckTetris(TetrisX, TeTrisY, bTmpTetris, g_stGame)) { memcpy(g_CurTetris, bTmpTetris, sizeof (bTmpTetris)); InvalidateRect(hWnd, NULL, TRUE); } break; case VK_DOWN: while (CheckTetris(TetrisX, TeTrisY + 1, g_CurTetris, g_stGame)) { TeTrisY++; } RefreshTetris(TetrisX, TeTrisY, g_CurTetris, g_stGame); InvalidateRect(hWnd, NULL, TRUE); break; default: break; } case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... DrawBackGround(hdc); DrawInfo(hdc); DrawTetris(hdc, TetrisX, TeTrisY, g_CurTetris); EndPaint(hWnd, &ps); break; case WM_DESTROY: KillTimer(hWnd, MY_TIMER); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 主界面绘制和按键处理 // u32 PageMain(u8 event) { if(event==PV_INIT) { FILE *ficon=fopen("res/flymode.bmp","rb"); if(ficon) { setbuf(ficon,0); fseek(ficon,62,SEEK_SET); fread(ChsIcon,sizeof(ChsIcon),1,ficon); fclose(ficon); } PageMainDrawMask=PMD_ALL; BatteryHandler();//启动一次电压检测 return 1; } //界面绘制 if(PageMainDrawMask) { LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); if(PageMainDrawMask&PMD_BACK) LcdDrawBmpFile(0,0,"res/main.bmp"); //模型图标 if(PageMainDrawMask&PMD_ICON) { char file[20]; strcpy(file,"icon/"); strcat(file,Model.Icon); strcat(file,".bmp"); LcdDrawBmpFile(74,9,file); } //模型名称 if(PageMainDrawMask&PMD_NAME) { u16 x=100-strlen(Model.Name)*6/2; LcdWriteStr(x,6,Model.Name); } //绘制电池 if(PageMainDrawMask&PMD_BAT) DrawBattery(); if(PageMainDrawMask&PMD_TRIM) DrawTrimBar(); LcdDrawStop(); PageMainDrawMask=0; } //定时界面绘制 DrawInfo(); //按键处理 if(KeyTstDown(KEY_ENT)) { PageEnter(PageMenuMain,PV_INIT); PageMainDrawMask=PMD_ALL; } //定时器处理 if(PageMainTimerSel>0 && PageMainTimerSel<=3) { if(KeyTstDown(KEY_R)) { TxTimer[PageMainTimerSel-1].Cnt+=60; } if(KeyTstDown(KEY_L)) { TxTimer[PageMainTimerSel-1].Cnt-=60; } } if(KeyTstDown(KEY_DW)) { PageMainTimerSel++; } if(KeyTstDown(KEY_UP)) { PageMainTimerSel--; } if(PageMainTimerSel>3) PageMainTimerSel=0; else if(PageMainTimerSel<0) PageMainTimerSel=3; else { if(KeyTstDown(KEY_EXT)) { TxTimer[PageMainTimerSel-1].Reset=1; } } //清空未处理按键 KeyClearDown(KEY_MENUALL); return 0; }
void RenderSystem::v_render() { BeginScene(); static float rot = 0.0f; rot += m_Timer.GetDeltaTime(); UpdateScene(); m_pD3D11DeviceContext->RSSetState(m_pRasterState.Get()); m_pD3D11DeviceContext->OMSetDepthStencilState(m_pDepthStencilState.Get(), 1); //////////////////////Render Refraction To Texture///////////////////////////// float blackColor[] ={ 0.0f, 0.0f, 0.0f, 0.0f}; // Setup a clipping plane based on the height of the water to clip everything above it. XMFLOAT4 clipPlane = XMFLOAT4(0.0f, -1.0f, 0.0f, 2.75f + 0.1f); m_pD3D11DeviceContext->OMSetRenderTargets(1, m_pRefractRTV.GetAddressOf(), m_pDepthStencilView.Get()); m_pD3D11DeviceContext->ClearDepthStencilView(m_pDepthStencilView.Get(), D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0); m_pD3D11DeviceContext->ClearRenderTargetView(m_pRenderTargetView.Get(), blackColor); XMMATRIX World = XMMatrixTranslation(0.0f, 2.0f, 0.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(World)); m_RefracShader.use(m_pD3D11DeviceContext.Get(), m_Matrix); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"marble01.dds").GetAddressOf()); bathModel.render(m_pD3D11DeviceContext.Get()); //////////////////////Render Reflection To Texture//////////////////////////////// m_pD3D11DeviceContext->RSSetState(m_pRasterState.Get()); m_pD3D11DeviceContext->OMSetDepthStencilState(m_pDepthStencilState.Get(), 1); m_pD3D11DeviceContext->OMSetRenderTargets(1, m_pReflectRTV.GetAddressOf(), m_pDepthStencilView.Get()); m_pD3D11DeviceContext->ClearDepthStencilView(m_pDepthStencilView.Get(), D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0); m_pD3D11DeviceContext->ClearRenderTargetView(m_pRenderTargetView.Get(), blackColor); // Translate to where the wall model will be rendered. World = XMMatrixTranslation(0.0f, 6.0f, 8.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(World)); XMFLOAT4X4 View = m_Camera.GetViewMatrix(); XMFLOAT3 camPos = m_Camera.GetPos(); XMFLOAT3 camTarget = m_Camera.GetTarget(); XMFLOAT3 camUp = m_Camera.GetUp(); camPos.y = -camPos.y; XMVECTOR pos = XMLoadFloat3(&camPos); XMVECTOR target = XMLoadFloat3(&camTarget); XMVECTOR up = XMLoadFloat3(&camUp); XMMATRIX reflectMat = XMMatrixLookAtLH(pos, target, up); XMFLOAT4X4 Reflect; XMStoreFloat4x4(&Reflect, XMMatrixTranspose(reflectMat)); m_Matrix.view = Reflect; m_LightShader.use(m_pD3D11DeviceContext.Get(), m_Matrix); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"wall01.dds").GetAddressOf()); wallModel.render(m_pD3D11DeviceContext.Get()); ///////////////////////////////Render Scene/////////////////////////////////////// BeginScene(); m_Matrix.view = m_Camera.GetViewMatrix(); /////////////////////Render the scene Model////////////////////////////// XMMATRIX Model = XMMatrixTranslation(0.0f, 1.0f, 0.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(Model)); m_LightShader.use(m_pD3D11DeviceContext.Get(), m_Matrix); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"ground01.dds").GetAddressOf()); groundModel.render(m_pD3D11DeviceContext.Get()); Model = XMMatrixTranslation(0.0f, 6.0f, 8.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(Model)); m_LightShader.use(m_pD3D11DeviceContext.Get(), m_Matrix); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"wall01.dds").GetAddressOf()); wallModel.render(m_pD3D11DeviceContext.Get()); Model = XMMatrixTranslation(0.0f, 2.0f, 0.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(Model)); m_LightShader.use(m_pD3D11DeviceContext.Get(), m_Matrix); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"marble01.dds").GetAddressOf()); bathModel.render(m_pD3D11DeviceContext.Get()); ///////////////////////////////////////////////////////////////////////////// Model = XMMatrixTranslation(0.0f, 2.75f, 0.0f); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(Model)); m_WaterShader.use(m_pD3D11DeviceContext.Get(), m_Matrix, Reflect); m_pD3D11DeviceContext->PSSetShaderResources(0, 1, m_TextureMgr.GetTexture(L"water01.dds").GetAddressOf()); m_pD3D11DeviceContext->PSSetShaderResources(1, 1, m_pReflectSRV.GetAddressOf()); m_pD3D11DeviceContext->PSSetShaderResources(2, 1, m_pRefractSRV.GetAddressOf()); waterModel.render(m_pD3D11DeviceContext.Get()); DrawInfo(); EndScene(); }
void TrafficInformation::FormatLine(int num,LPCSTR line,time_t tm) { char str[50]; int n,cn; InfoItem it; if(num < 0 || num >= MAX_TRAF_LINES || !line || !line[0]) return; for(n = 0; *line && n < MAX_TRAF_WIDTH; line++) { //Char if(*line != '%') { Lines[num][n++] = *line; continue; } //% if(line[1] == '%') { line++; Lines[num][n++] = *line; continue; } line++; //Code if(*line == '\\') { line++; for(cn = 0; *line && strchr("0123456789",*line) && cn < (int)(ARRAYSIZE(str)-1); cn++,line++) str[cn] = *line; str[cn] = 0; cn = atoi(str); if(!cn || *line != '%') { strcpy(Lines[num]+n,"<badCmd>"); n += 8; break; } Lines[num][n++] = (char)cn; continue; } it.Type = 0; it.Line = num; it.Pos = n; it.Align = tNone; it.Size = 0; //Filler if(*line == '*') { line++; it.Fill = *line; line++; } else it.Fill = ' '; //Align if(*line == '-') it.Align = tLeft; else if(*line == '+') it.Align = tRight; else if(*line == '.') it.Align = tCenter; else if(*line == '>') { //Right line line++; it.Fill = *line++; if(*line != '%') { strcpy(Lines[num]+n,"<badCmd>"); n += 8; break; } if(Count >= MAX_TRAF_ITEMS) { strcpy(Lines[num]+n,"<many>"); break; } it.Align = tRightFill; Items[Count++] = it; continue; } if(it.Align != tNone) line++; //Size if(isdigit(*line)) { for(cn = 0; *line && strchr("+-0123456789",*line) && cn < (int)(ARRAYSIZE(str)-1); cn++,line++) str[cn] = *line; str[cn] = 0; it.Size = atoi(str); } //Type for(cn = 0; *line && *line != '%' && cn < (int)(ARRAYSIZE(str)-1); cn++,line++) str[cn] = *line; str[cn] = 0; for(cn = 0; StdCommands[cn]; cn++) if(StrCmp(StdCommands[cn],str,-1,FALSE) == 0) break; if(*line == 0 || !StdCommands[cn]) { strcpy(Lines[num]+n,"<badCmd>"); n += 8; break; } it.Type = cn; //Wide center if(it.Align == tCenter && !it.Size) { if(Count >= MAX_TRAF_ITEMS) { strcpy(Lines[num]+n,"<many>"); break; } Items[Count++] = it; continue; } //Draw DrawInfo(&it,tm); n += it.Size; } Lines[num][n] = 0; }
void TrafficInformation::DrawInfos(time_t tm) { char str[ MAX_TRAF_WIDTH+1 ]; char key[ MAX_TRAF_WIDTH+1 ]; int n,i; Count = 0; _snprintf(key,ARRAYSIZE(key),"CopyDialog\\%s",FTP_Info->GetMsg(MLanguage)); LineCount = Min(MAX_TRAF_LINES,FTP_Info->GetRegKeyFullInt(key,"Count", 0)); if(!LineCount) { LineCount = ARRAYSIZE(StdDialogLines); for(i = 0; i < LineCount; i++) FormatLine(i,StdDialogLines[i],tm); } else { for(i = 0; i < LineCount; i++) { FTP_Info->GetRegKeyFullStr(key, FTP_Info->Message("Line%02d",i+1), str,"",ARRAYSIZE(str)); if(!str[0]) break; FormatLine(i,str,tm); } LineCount = i; } if(!Count) return; int w; for(w = n = 0; n < LineCount; n++) w = Max(w,static_cast<int>(strlen(Lines[n]))); for(n = 0; n < LineCount; n++) if(Lines[n][0] != '\x1' && Lines[n][0] != '\x2') { for(i = static_cast<int>(strlen(Lines[n])); i < w; i++) Lines[n][i] = ' '; Lines[n][i] = 0; } for(n = 0; n < Count; n++) { //Center if(Items[n].Align == tCenter) Items[n].Pos = w/2 - Items[n].Size/2; else if(Items[n].Align == tRightFill) Items[n].Size = w - Items[n].Pos; if(static_cast<int>(strlen(Lines[Items[n].Line])) > Items[n].Pos) DrawInfo(&Items[n],tm); } for(n = 0; n < LineCount; n++) Lines[n][w] = 0; }
HRESULT KG3DScenePvsEditor::RenderForMainWindow(KG3DSceneOutputWnd& wndCur) { KG3DSceneOutputWnd* pWnd = &wndCur; KG3DRenderState RenderState; D3DXVECTOR3 vPlacePos; D3DXMATRIX matProj; D3DXMATRIX matView; KG3DRepresentObjectPVS* pPvs = m_pPvs; ProcessSpaceNodeByCamera(&pWnd->GetCamera()); CalcFrustum(&pWnd->GetCamera()); if (KG3DSceneSpaceNode::GetTopVisableNode() != g_cGraphicsTool.GetCurScene()->m_lpSceneOutDoorSpaceMgr) pPvs = static_cast<KG3DRepresentObjectPVS*>(KG3DSceneSpaceNode::GetTopVisableNode()); if (pPvs) pPvs->UpdateVisiableSubset(NULL); if (m_bRunMode && m_pRunder) { KG3DTrackCamera* pTrackCamera = pWnd->GetCamera().GetTrackCameraInterface(); D3DXVECTOR3 vecNpcPos; D3DXVECTOR3 vecNpcDir; m_pRunder->GetCurPosition(&vecNpcPos); m_pRunder->GetDirection(&vecNpcDir); vecNpcPos = vecNpcPos + D3DXVECTOR3(0.0f, 180.0f, 0.0f); pTrackCamera->BindScene(this); pTrackCamera->UpdateAsClient(vecNpcPos, vecNpcDir, m_pRunder->m_fMoveSpeed, m_pRunder->m_dwMovementType); pTrackCamera->FrameMove(); } else TrackCamareFrameMove(); if (m_lpPointLightRender) m_lpPointLightRender->FrameMove(); RenderWindowBegin(pWnd,TRUE); if(m_lpLightMapBaker && m_lpLightMapBaker->m_bShowDebug) { m_lpLightMapBaker->ShowDebug(); } else { RenderState.SetSamplerState(0, D3DSAMP_MAGFILTER, (D3DTEXTUREFILTERTYPE)g_cEngineOption.nSampMagFilter); RenderState.SetSamplerState(0, D3DSAMP_MINFILTER, (D3DTEXTUREFILTERTYPE)g_cEngineOption.nSampMinFilter); RenderState.SetSamplerState(0, D3DSAMP_MIPFILTER, (D3DTEXTUREFILTERTYPE)g_cEngineOption.nSampMipFilter); RenderState.SetSamplerState(0, D3DSAMP_MAXANISOTROPY ,g_cEngineOption.dwMaxAnisotropy); RenderState.SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); RenderState.SetRenderState(D3DRS_ZENABLE, TRUE); g_cGraphicsTool.ApplyLight(*this); g_SetShaderSharedParams(*this, wndCur, NULL, NULL);//这个没有ConverMap if (m_pPvs) { m_pPvs->FrameMove(); m_pPvs->RenderHierarchy(m_bCull, m_lpPointLightRender); } if (m_pHandObj) { if (GetPlaceObjectPos(vPlacePos, pWnd)) m_pHandObj->SetTranslation(&vPlacePos); m_pHandObj->FrameMove(); m_pHandObj->RenderHierarchy(); } if (m_pHandPtl) { D3DXVECTOR3 vScal = D3DXVECTOR3(1.f, 1.f, 1.f); D3DXMATRIX matLocal; D3DXMATRIX matScal; D3DXMatrixIdentity(&matLocal); switch (m_dwPlacePortalMode) { case PLACE_PTL_BILLBOARD : *((D3DXVECTOR3*)&matLocal.m[0]) = pWnd->GetCamera().GetCameraRight(); *((D3DXVECTOR3*)&matLocal.m[1]) = pWnd->GetCamera().GetCameraUp(); *((D3DXVECTOR3*)&matLocal.m[2]) = pWnd->GetCamera().GetCameraFront(); break; case PLACE_PTL_LOCK_Y : *((D3DXVECTOR3*)&matLocal.m[0]) = pWnd->GetCamera().GetCameraRight(); *((D3DXVECTOR3*)&matLocal.m[1]) = D3DXVECTOR3(0.f, 1.f, 0.f); D3DXVec3Cross((D3DXVECTOR3*)&matLocal.m[2], (D3DXVECTOR3*)&matLocal.m[0], (D3DXVECTOR3*)&matLocal.m[1]); break; case PLACE_PTL_HOR : *((D3DXVECTOR3*)&matLocal.m[0]) = D3DXVECTOR3(1.f, 0.f, 0.f); *((D3DXVECTOR3*)&matLocal.m[1]) = D3DXVECTOR3(0.f, 0.f, 1.f); *((D3DXVECTOR3*)&matLocal.m[2]) = D3DXVECTOR3(0.f, -1.f, 0.f); break; default : break; } if (GetPlacePortalPos(vPlacePos, pWnd, m_pHandPtl)) *((D3DXVECTOR3*)&matLocal.m[3]) = vPlacePos; m_pHandPtl->GetScaling(&vScal); D3DXMatrixScaling(&matScal, vScal.x, vScal.y, vScal.z); matLocal = matScal * matLocal; m_pHandPtl->UpdateByMatrix(matLocal); m_pHandPtl->FrameMove(); m_pHandPtl->Render(0x550000ff); } if (m_bRunMode && m_pRunder) { //m_pRunder->NPCFrameMove(); _ASSERTE(NULL != m_pRunder); KSF::FrameMoveSceneRunner(*m_pRunder, *this); m_pRunder->RenderHierarchy(); } if (m_pPvs) m_pPvs->Render(0x550000ff); for_each(m_listRenderEntity.begin(), m_listRenderEntity.end(), mem_fun_ref(&KG3DSceneEntity::Render)); ////////////////////////////////////////////////////////////////////////// if(m_lpLightMapBaker) m_lpLightMapBaker->Render(); matProj = m_SceneWndManager->GetCurOutputWnd()->GetCamera().GetProjectionMatrix(); matView = m_SceneWndManager->GetCurOutputWnd()->GetCamera().GetViewMatrix(); if (!m_bRunMode) RenderSelectedEntityMark(this->GetEditState(), m_SceneWndManager->GetCurOutputWnd()->m_Viewport, matProj, matView, TRUE); DrawGroundGrid(); DrawInfo(); if (g_cEngineManager.GetFocusScene() == this) { g_cGraphicsTool.DrawFocusRect( m_SceneWndManager->GetCurOutputWnd()->m_Viewport, 4, 0xFFFFFF00 ); } GetEnvironment().Render(); } RenderWindowEnd(pWnd); if (m_pPvs) m_pPvs->ClearFrustums(); return S_OK; }