Ejemplo n.º 1
0
static LRESULT CALLBACK _funcToolProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//	static BOOL bCapture=false;
//	static POINT Dif;
	RECT Rect; 
//	POINT Point;
    INT Child=0;
	
	LPDRAWITEMSTRUCT DIs;
    // S_WINSCENA WScena;
	CHAR *lpIcone;
//	INT OldCol;
    INT wID;	
	INT a,x,y;
	PAINTSTRUCT ps;
	LPRECT lprc;
	INT ColBg;
	S_WTOOLBAR * psTb;
	HDC hDC;
    TOOLINFO ti;
    INT SizePlus=GetSystemMetrics(SM_CXFRAME)*2;
	INT ilx,ily,slx,sly;
	CHAR Buf[10];
	INT idx;
	LPCREATESTRUCT psCs;
	WINDOWPLACEMENT  sWp;
	
	psTb=(S_WTOOLBAR *) GetWindowLong(hWnd,GWL_USERDATA);

	switch (message)
	{
		case WM_CREATE: 

            //if (_s.iToolNow==-1) ehExit("ToolBar Full");

			psCs=(LPCREATESTRUCT) lParam;
			psTb=psCs->lpCreateParams;
			SetWindowLong(hWnd,GWL_USERDATA,(LONG) psTb);

			psTb->hWnd=hWnd;
			psTb->hWndTT= CreateWindowEx(0, TOOLTIPS_CLASS, (LPSTR) NULL, 
							           TTS_ALWAYSTIP, 
							           CW_USEDEFAULT, CW_USEDEFAULT, 
							           CW_USEDEFAULT, CW_USEDEFAULT, 
							           psTb->hWnd, (HMENU) NULL, 
							           sys.EhWinInstance, NULL); 

			// Creo la ToolTip
			//InitCommonControls();  
			for (a=0;a<psTb->iElement;a++)
			{
				psTb->arhButton[a]=CreateWindow("Button","",
					WS_CHILD|BS_OWNERDRAW|WS_VISIBLE|
					//BS_FLAT|
					BS_PUSHLIKE|BS_NOTIFY|
					BS_VCENTER,						        
					0,0,10,10,
					hWnd,
					//GetForegroundWindow(),
					(HMENU) a,
					sys.EhWinInstance,
					NULL);

				// Inserisco i Nuovi ToolTip
				ti.cbSize = sizeof(TOOLINFO);             
				ti.uFlags = TTF_IDISHWND|TTF_SUBCLASS; 
				ti.hwnd   = hWnd;             
				ti.hinst  = 0;//sys.EhWinInstance; 
				ti.uId    = (UINT) psTb->arhButton[a];             
				ti.lpszText    = psTb->arsObj[a].lpHmz; 
				SendMessage(psTb->hWndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);

				if (!psTb->arsObj[a].bEnable) EnableWindow(psTb->arhButton[a],FALSE); 
			}
			break;

		case WM_DESTROY: 
//			if ((Tb=GiveMeTb(hWnd))==NULL) break;
			
			if (!psTb) break;
			for (a=0;a<psTb->iElement;a++) DestroyWindow(psTb->arhButton[a]);
            DestroyWindow(psTb->hWndTT);
			break;

		case WM_MOVE: break;
		
		case WM_SIZE: 
			// if ((Tb=GiveMeTb(hWnd))==NULL) break;
			GetWindowRect(psTb->hWnd,&Rect);  
            psTb->WinLx=Rect.right-Rect.left;
            psTb->WinLy=Rect.bottom-Rect.top;

			GetClientRect(psTb->hWnd,&Rect);  
            psTb->ClientLx=Rect.right-Rect.left;
            psTb->ClientLy=Rect.bottom-Rect.top;

			_keysMove(psTb); //return 0;
			break;
        
		case WM_EXITSIZEMOVE: 
//			if ((Tb=GiveMeTb(hWnd))==NULL) break;
			SetFocus(psTb->hWndOwner); 
			break;

		case WM_SIZING:
			//fwSide = wParam;       
            lprc = (LPRECT) lParam;
//			if ((Tb=GiveMeTb(hWnd))==NULL) break;
			//dispx(" ->> %d      ",GetSystemMetrics(SM_CYEDGE));
			switch (wParam)
			{
				 case WMSZ_TOP: 
				 case WMSZ_BOTTOM: 
				 case WMSZ_BOTTOMLEFT: 
				 case WMSZ_BOTTOMRIGHT: 
								   a=lprc->bottom-lprc->top-psTb->KeySy-SizePlus; 
								   y=(a/psTb->KeyLy); if (y<1) y=1;
								   x=(psTb->iElement/y); if (x<1) x=1;
								   for (;;)
								   {
									   if ((x*y)<psTb->iElement) x++; else break;
								   }
	                               
								   if ((x*y)>(psTb->iElement-x))  {y=((psTb->iElement+x-1)/x);}

								   break;
				 case WMSZ_LEFT: 
				 case WMSZ_RIGHT: 
				 default:
								   a=lprc->right-lprc->left-(psTb->KeySx<<1)-SizePlus; 
								   x=(a/psTb->KeyLx); if (x<1) x=1;
								   y=(psTb->iElement/x); if (y<1) y=1;
								   for (;;)
								   {
									   if ((x*y)<psTb->iElement) y++; else break;
								   }
							   break;
			}


			if ((y*x)>psTb->iElement)
			{
			  if (x==1) y=psTb->iElement; 
              if (y==1) x=psTb->iElement;
			}

            GiveToolRect(psTb,x,y,lprc);
            return TRUE;

		case WM_MEASUREITEM:
            //MIs=(LPMEASUREITEMSTRUCT) lParam;
			//MIs->itemWidth=24;
			//MIs->itemHeight=24;
			return TRUE;

		case WM_DRAWITEM: 

			// DRAWITEMSTRUCT
			{
				RECT rc;
				RECTD rcd;
				HDC dc;
				DIs=(LPDRAWITEMSTRUCT) lParam;
				dc=DIs->hDC;

	//			dispx("%d- %d",DIs->CtlID,DIs->itemState&ODS_CHECKED);

				// WinDirectDC(DIs->hDC,&WScena,NULL);
				
//				OldCol=ModeColor(TRUE);
				idx=DIs->CtlID%psTb->iElement;
				lpIcone=psTb->arsObj[idx].lpIcone;
			
				switch(psTb->arsObj[idx].iType)
				{
					case O_TBCOLORRADIO:
						
						rectCopy(rc,DIs->rcItem); rc.right--; rc.bottom--;
						dcBoxp(dc,&rc,sys.ColorBackGround);
					//boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,sys.ColorBackGround,SET);
						if (strlen(lpIcone)==6)
						{
							Buf[2]=0;
							memcpy(Buf,lpIcone,2);   ColBg=xtoi(Buf);
							memcpy(Buf,lpIcone+2,2); ColBg+=(xtoi(Buf)<<8);
							memcpy(Buf,lpIcone+4,2); ColBg+=(xtoi(Buf)<<16);
						}

						rc.left+=2; rc.top+=2; rc.right--; rc.bottom--;
						dcBoxp(dc,&rc,ColBg);

						//boxp(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,ColBg,SET); 

					if (*lpIcone=='*')
					{
						dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3),sys.arsColor[15]);
					  //boxp(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,sys.arsColor[15],SET); 
						dcLine(dc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,0);
						dcLine(dc,DIs->rcItem.right-3,DIs->rcItem.top+2,DIs->rcItem.left+2,DIs->rcItem.bottom-3,0);
					}

					if ((DIs->itemState&ODS_SELECTED)||psTb->arsObj[DIs->CtlID].fChecked)
					{
						//box(DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3,15,XOR);
						dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+2,DIs->rcItem.top+2,DIs->rcItem.right-3,DIs->rcItem.bottom-3),sys.arsColor[15]);
						//box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,1);
						//box3d(DIs->rcItem.left+1,DIs->rcItem.top+1,DIs->rcItem.right-2,DIs->rcItem.bottom-2,4);
					}
					else
					{
					 //box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,0);
					}
					break;
				
				 default:
                

					if (DIs->itemState&ODS_SELECTED) ColBg=ColorLum(sys.ColorBackGround,-4); else ColBg=sys.ColorBackGround;
					if (psTb->arsObj[DIs->CtlID].fChecked)  
					{   INT a,b;
						INT Len=DIs->rcItem.right-DIs->rcItem.left+1;
						for (a=0,b=0;a<Len;a++,b+=4)
						{
						// X:100:A:(len-1)  

						 //boxp(DIs->rcItem.left+a,DIs->rcItem.top,DIs->rcItem.left+a,DIs->rcItem.bottom,ColorFusion(RGB(0,80,200),RGB(0,200,255),a*100/(Len-1)),SET);	
							dcBoxp(dc,rectFill(&rc,DIs->rcItem.left+a,DIs->rcItem.top,DIs->rcItem.left+a,DIs->rcItem.bottom),ColorFusion(RGB(0,80,200),RGB(0,200,255),a*100/(Len-1)));
						}
						/*
						ColBg=ColorLum(sys.ColorBackGround,-20);
						boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.left,DIs->rcItem.bottom,ColBg,SET);	
						for (a=0,b=0;a<7;a++,b+=16)
						{
						 box(DIs->rcItem.left+a,DIs->rcItem.top+a,DIs->rcItem.right-a,DIs->rcItem.bottom-a,
							  ColorFusion(ColorLum(sys.ColorBackGround,70),ColBg,b),SET);	
						}
						*/

					} 
					else
					//boxp(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,ColBg,SET);
						dcBoxp(dc,rectFill(&rc,DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1),ColBg);
	            
					if (ico_info(&ilx,&ily,lpIcone)<0) break; //{ilx=1;ily=1;}
					slx=(psTb->KeyLx-ilx)>>1; sly=(psTb->KeyLy-ily)>>1;
					
					if ((DIs->itemState&ODS_SELECTED)||psTb->arsObj[idx].fChecked)
					{
						//ico_disp(DIs->rcItem.left+1+slx,DIs->rcItem.top+1+sly,lpIcone);
						dcIcone(dc,DIs->rcItem.left+1+slx,DIs->rcItem.top+1+sly,lpIcone);
					//	box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,1);
					//	box3d(DIs->rcItem.left+1,DIs->rcItem.top+1,DIs->rcItem.right-2,DIs->rcItem.bottom-2,4);
					}
					else
					{
						S_ICONE_EFFECT sEfx;
						sEfx.enType=IEFX_GRAYSCALE;

						if (DIs->itemState&ODS_DISABLED) //ico_disp3D(DIs->rcItem.left+slx,DIs->rcItem.top+sly,sys.ColorBackGround,lpIcone);
														 //dcIconeEx(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone,&sEfx);
														 dcIconeGray(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone,sys.Color3DShadow,0);
														 else
														 //ico_disp(DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone);
														 dcIcone(dc,DIs->rcItem.left+slx,DIs->rcItem.top+sly,lpIcone);
						dcBox(dc,rectFillD(&rcd,DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1),rgba(0,0,0,255),1.0);
						//box3d(DIs->rcItem.left,DIs->rcItem.top,DIs->rcItem.right-1,DIs->rcItem.bottom-1,0);
					}
					
					break;
				}
	//AVANTISSIMO:
//				ModeColor(OldCol);
			//WinDirectDC(NULL,&WScena,NULL);
			}
			break;

		case WM_LBUTTONDOWN:

			psTb->bCapture=true;
			sWp.length=sizeof(sWp);
			GetWindowPlacement(hWnd,&sWp);
			//GetWindowRect(hWnd,&psTb->rcShot); // Posizione attuale
			rectCopy(psTb->rcShot,sWp.rcNormalPosition);
			GetCursorPos(&psTb->ptStart);
			SetCapture(hWnd);
//			Dif.x=Point.x-Rect.left;
//			Dif.y=Point.y-Rect.top;
			//return TRUE;
			break;
		
		case WM_LBUTTONUP:
			if (psTb->bCapture) ReleaseCapture();
			psTb->bCapture=false;
			break;
			//return TRUE;
			//break;
	
		case WM_RBUTTONDOWN:
		case WM_RBUTTONUP:
		case WM_LBUTTONDBLCLK:
		case WM_ACTIVATEAPP:
			break;

		case WM_MOUSEMOVE: 
			if (psTb->bCapture)
			{
				POINT ptNow;
				POINT ptDelta;
				GetCursorPos(&ptNow);
				ptDelta.x=ptNow.x-psTb->ptStart.x;
				ptDelta.y=ptNow.y-psTb->ptStart.y;
//				printf("%d,%d" CRLF,ptDelta.x,ptDelta.y);
				MoveWindow(hWnd,psTb->rcShot.left+ptDelta.x,psTb->rcShot.top+ptDelta.y,psTb->WinLx,psTb->WinLy,TRUE);
			}
			break;

        case WM_NCHITTEST: 
//			if ((Tb=GiveMeTb(hWnd))==NULL) break;
			break;

		// Messaggio di cambio cursore
		//case WM_SETCURSOR: break;
		// Intercettazione degli oggetti Windows
		//case WM_COMMAND: break;
		case WM_COMMAND: 
			wID = LOWORD(wParam);
			if (HIWORD(wParam)==BN_CLICKED)
			{
//				 if ((Tb=GiveMeTb(hWnd))==NULL) break;
				 LKeySelect(psTb,wID);
				 _objEvent(psTb,wID);
				 SetFocus(psTb->hWndOwner); 
			}
			
			break;

		case WM_PAINT: 

			hDC=BeginPaint(hWnd,&ps); 
/*
			if ((Tb=GiveMeTb(hWnd))==NULL) break;
			// WinDirectDC(hDC,&WScena,NULL);
			if (psTb->ClientLy>psTb->ClientLx)
			{
			 box3d(0,0,psTb->ClientLx,1,0);
			 box3d(0,2,psTb->ClientLx,3,0);
			 box3d(0,psTb->ClientLy-2,psTb->ClientLx,psTb->ClientLy-1,0);
			 box3d(0,psTb->ClientLy-4,psTb->ClientLx,psTb->ClientLy-3,0);
			}
			 else
			{
			 box3d(0,0,1,psTb->ClientLy,0);
			 box3d(2,0,3,psTb->ClientLy,0);
			 box3d(psTb->ClientLx-2,0,psTb->ClientLx-1,psTb->ClientLy-1,0);
			 box3d(psTb->ClientLx-4,0,psTb->ClientLx-3,psTb->ClientLy-1,0);
			 //box3d(2,0,3,psTb->ClientLy,0);
			}
			WinDirectDC(NULL,&WScena,NULL);
			*/
			EndPaint(hWnd,&ps);
			break;
		//case WM_SETFOCUS: IsFocus=TRUE; break;
		//case WM_KILLFOCUS: IsFocus=FALSE; break;


	}  // switch message

 return(DefWindowProc(hWnd, message, wParam, lParam));
} 
Ejemplo n.º 2
0
void DebugRenderSystem::Process()
{
    uint32 size = entities.size();
	for(uint32 i = 0; i < size; ++i)
	{
        Entity * entity = entities[i];
        
        DebugRenderComponent * debugRenderComponent = cast_if_equal<DebugRenderComponent*>(entity->GetComponent(Component::DEBUG_RENDER_COMPONENT));
        TransformComponent * transformComponent = cast_if_equal<TransformComponent*>(entity->GetComponent(Component::TRANSFORM_COMPONENT));
        //RenderComponent * renderComponent = cast_if_equal<RenderComponent*>(entity->GetComponent(Component::RENDER_COMPONENT));
        
        Matrix4 worldTransform = /*(*transformComponent->GetWorldTransform()) * */camera->GetMatrix();
        RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, camera->GetMatrix());

        AABBox3 debugBoundigBox = entity->GetWTMaximumBoundingBoxSlow();
        uint32 debugFlags = debugRenderComponent->GetDebugFlags();

		// Camera debug draw
		if(debugFlags & DebugRenderComponent::DEBUG_DRAW_CAMERA)
		{
			CameraComponent * entityCameraComp = (CameraComponent *) entity->GetComponent(Component::CAMERA_COMPONENT);

			if(NULL != entityCameraComp)
			{
				Camera* entityCamera = entityCameraComp->GetCamera();
				if(NULL != entityCamera && camera != entityCamera)
				{
					Color camColor(0.0f, 1.0f, 0.0f, 1.0f);
					Vector3 camPos = entityCamera->GetPosition();
					//Vector3 camDirect = entityCamera->GetDirection();
					AABBox3 camBox(camPos, 2.5f);

					// If this is clip camera - show it as red camera
					if (entityCamera == entity->GetScene()->GetClipCamera()) camColor = Color(1.0f, 0.0f, 0.0f, 1.0f);

					RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
					RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE);
					RenderManager::Instance()->SetColor(camColor);

					RenderHelper::Instance()->DrawBox(camBox, 2.5f);

					RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE);
					RenderManager::Instance()->ResetColor();

					debugBoundigBox = camBox;
				}
			}
		}

		// UserNode debug draw
		if(debugFlags & DebugRenderComponent::DEBUG_DRAW_USERNODE)
		{
			if(NULL != entity->GetComponent(Component::USER_COMPONENT))
			{
				Color dcColor(0.0f, 0.0f, 1.0f, 1.0f);
				AABBox3 dcBox(Vector3(), 1.0f);

				Matrix4 prevMatrix = RenderManager::Instance()->GetMatrix(RenderManager::MATRIX_MODELVIEW);
				Matrix4 finalMatrix = transformComponent->GetWorldTransform() * prevMatrix;
				RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, finalMatrix);

				RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
				RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE | RenderState::STATE_DEPTH_TEST);

				RenderManager::Instance()->SetColor(1.f, 1.f, 0, 1.0f);
				RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(1.f, 0, 0));
				RenderManager::Instance()->SetColor(1.f, 0, 1.f, 1.0f);
				RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 1.f, 0));
				RenderManager::Instance()->SetColor(0, 1.f, 1.f, 1.0f);
				RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 0, 1.f));

				RenderManager::Instance()->SetColor(dcColor);
				RenderHelper::Instance()->DrawBox(dcBox);

				RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE);
				RenderManager::Instance()->ResetColor();
				RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix);

				dcBox.GetTransformedBox(transformComponent->GetWorldTransform(), debugBoundigBox);
			}
		}

		// LightNode debug draw
		if (debugFlags & DebugRenderComponent::DEBUG_DRAW_LIGHT_NODE)
		{
			LightComponent *lightComp = (LightComponent *) entity->GetComponent(Component::LIGHT_COMPONENT);

			if(NULL != lightComp)
			{
				Light* light = lightComp->GetLightObject();

				if(NULL != light)
				{
					Vector3 lPosition = light->GetPosition();

					RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
					RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE);
					RenderManager::Instance()->SetColor(1.0f, 1.0f, 0.0f, 1.0f);

					switch (light->GetType())
					{
					case Light::TYPE_DIRECTIONAL:
						{
							Vector3 lDirection = light->GetDirection();

							RenderHelper::Instance()->DrawArrow(lPosition, lPosition + lDirection * 10, 2.5f);
							RenderHelper::Instance()->DrawBox(AABBox3(lPosition, 0.5f), 1.5f);

							debugBoundigBox = AABBox3(lPosition, 2.5f);
						}
						break;
					default:
						{
							AABBox3 lightBox(lPosition, 2.5f);
							RenderHelper::Instance()->DrawBox(lightBox, 2.5f);

							debugBoundigBox = lightBox;
						}
						break;
					}

					RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE);
					RenderManager::Instance()->ResetColor();
				}
			}
		}
        
        if ((debugFlags & DebugRenderComponent::DEBUG_DRAW_AABOX_CORNERS))
        {            
            RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
            RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE | RenderState::STATE_DEPTH_TEST);
            RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
            RenderHelper::Instance()->DrawCornerBox(debugBoundigBox, 1.5f);
            RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE);
            RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
            //		RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix);
        }
        
        if (debugFlags & DebugRenderComponent::DEBUG_DRAW_RED_AABBOX)
        {
            RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
            RenderManager::Instance()->SetState(RenderState::STATE_COLORMASK_ALL | RenderState::STATE_DEPTH_WRITE);
            RenderManager::Instance()->SetColor(1.0f, 0.0f, 0.0f, 1.0f);
            RenderHelper::Instance()->DrawBox(debugBoundigBox, 1.5f);
            RenderManager::Instance()->SetState(RenderState::DEFAULT_3D_STATE);
            RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
        }
        

        // UserNode Draw
#if 0
       	
        if (debugFlags & DEBUG_DRAW_USERNODE)
        {
            Matrix4 prevMatrix = RenderManager::Instance()->GetMatrix(RenderManager::MATRIX_MODELVIEW);
            Matrix4 finalMatrix = worldTransform * prevMatrix;
            RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, finalMatrix);
            
            RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
            RenderManager::Instance()->SetState(RenderStateBlock::STATE_COLORMASK_ALL | RenderStateBlock::STATE_DEPTH_WRITE | RenderStateBlock::STATE_DEPTH_TEST);
            RenderManager::Instance()->SetColor(0, 0, 1.0f, 1.0f);
            RenderHelper::Instance()->DrawBox(drawBox);
            RenderManager::Instance()->SetColor(1.f, 1.f, 0, 1.0f);
            RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(1.f, 0, 0));
            RenderManager::Instance()->SetColor(1.f, 0, 1.f, 1.0f);
            RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 1.f, 0));
            RenderManager::Instance()->SetColor(0, 1.f, 1.f, 1.0f);
            RenderHelper::Instance()->DrawLine(Vector3(0, 0, 0), Vector3(0, 0, 1.f));
            RenderManager::Instance()->SetState(RenderStateBlock::DEFAULT_3D_STATE);
            RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
            RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_MODELVIEW, prevMatrix);
        }
#endif
        
#if 0
        // ParticleEffectNode
        if (debugFlags != DEBUG_DRAW_NONE)
        {
            if (!(flags & SceneNode::NODE_VISIBLE))return;
            
            RenderManager::Instance()->SetRenderEffect(RenderManager::FLAT_COLOR);
            RenderManager::Instance()->SetState(RenderStateBlock::STATE_COLORMASK_ALL | RenderStateBlock::STATE_DEPTH_WRITE);
            
            Vector3 position = Vector3(0.0f, 0.0f, 0.0f) * GetWorldTransform();
            Matrix3 rotationPart(GetWorldTransform());
            Vector3 direction = Vector3(0.0f, 0.0f, 1.0f) * rotationPart;
            direction.Normalize();
            
            RenderManager::Instance()->SetColor(0.0f, 0.0f, 1.0f, 1.0f);
            
            RenderHelper::Instance()->DrawLine(position, position + direction * 10, 2.f);
            
            RenderManager::Instance()->SetState(RenderStateBlock::DEFAULT_3D_STATE);
            RenderManager::Instance()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
        }
#endif
        
    }
}