Пример #1
0
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;
}
Пример #3
0
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();
}
Пример #4
0
void RenderSystem::v_Render()
{

	BeginScene();

	m_Matrix.view = m_Camera.GetViewMatrix();
	m_Grid.Render(m_pD3D11DeviceContext, m_Matrix);

	DrawInfo();

	EndScene();

}
Пример #5
0
void CDebug::Render()
{
	if(m_bWireFrame)
	{
		_SINGLE(CDevice)->GetDevice()->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
	}
	else
	{
		_SINGLE(CDevice)->GetDevice()->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
	}

	DrawInfo();
}
Пример #6
0
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 ();
	}
Пример #7
0
	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();

	}
Пример #8
0
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;
  }
}
Пример #9
0
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);
	}		
}
Пример #10
0
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();
	}
}
Пример #11
0
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 );
}
Пример #12
0
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;
}
Пример #15
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;
}
Пример #16
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();

}
Пример #17
0
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;
}
Пример #18
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;
}
Пример #19
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;
}