void DumpInfo(int thingToDump)
{
    switch(thingToDump)
    {
    case DUMP_COLORS:
        DebuggerAppendMsg("----Colors----\nPrim Color:\t%08X\nEnv Color:\t%08X\n"
            "Fill Color:\t%08X\nFog Color:\t%08X\n"
            "Prim Depth:\t%f\nPrim LOD Frac:\t%08X\n",
        GetPrimitiveColor(), GetEnvColor(), gRDP.fillColor,
        CRender::GetRender()->GetFogColor(), GetPrimitiveDepth(), GetLODFrac());
        break;
    case DUMP_CUR_MUX:
        CRender::GetRender()->m_pColorCombiner->DisplayMuxString();
        break;
    case DUMP_LIGHT:
        DebuggerAppendMsg("----Light Colors----\nNumber of Lights: %d\n",GetNumLights());
        for( uint32 i=0; i<GetNumLights()+2; i++)
        {
            DebuggerAppendMsg("Light %d:\t%08X, (%d,%d,%d)\n", i, gRSPn64lights[i].dwRGBA,gRSPn64lights[i].x,gRSPn64lights[i].y,gRSPn64lights[i].z );
        }
        break;
    case DUMP_TEXTURE_AT:
        {
        }
        break;
    case DUMP_CUR_TEXTURE_RGBA:
        DumpTexture(gRSP.curTile, TXT_RGBA);
        break;
    case DUMP_CUR_1_TEXTURE_RGBA:
        DumpTexture((1+gRSP.curTile)%7, TXT_RGBA);
        break;
    case DUMP_CUR_TEXTURE_RGB:
        DumpTexture(gRSP.curTile, TXT_RGB);
        break;
    case DUMP_CUR_1_TEXTURE_RGB:
        DumpTexture((1+gRSP.curTile)%7, TXT_RGB);
        break;
    case DUMP_CUR_TEXTURE_TO_FILE:
        DumpTextureToFile(0,TXT_RGB);
        DumpTextureToFile(0,TXT_ALPHA);
        DumpTextureToFile(0,TXT_RGBA);
        break;
    case DUMP_CUR_1_TEXTURE_TO_FILE:
        DumpTextureToFile(1,TXT_RGB);
        DumpTextureToFile(1,TXT_ALPHA);
        DumpTextureToFile(1,TXT_RGBA);
        break;
    case DUMP_CUR_TEXTURE_ALPHA:
        DumpTexture(0, TXT_ALPHA);
        break;
    case DUMP_CUR_1_TEXTURE_ALPHA:
        DumpTexture(1, TXT_ALPHA);
        break;
    case DUMP_TLUT:
        DumpTlut(g_wRDPTlut);
        break;
    case DUMP_OBJ_TLUT:
        DumpTlut((uint16*)(g_pRDRAMu8+gObjTlutAddr));
        break;
    case DUMP_TILE_AT:
        {
        }
        break;
    case DUMP_VERTEXES:
        DumpVertexArray();
        break;
    case DUMP_VI_REGS:
        DumpVIRegisters();
        break;
    case DUMP_SIMPLE_MUX:
        CRender::GetRender()->m_pColorCombiner->DisplaySimpleMuxString();
        break;
    case DUMP_OTHER_MODE:
        DumpOtherMode();
        break;
    case DUMP_FRAME_BUFFER:
        CRender::GetRender()->DrawFrameBuffer(true);
        break;
    case DUMP_CONTENT_AT:
        {
        }
        break;
    case DUMP_DLIST_AT:
        {
        }
        break;
    case DUMP_MATRIX_AT:
        {
        }
        break;
    case DUMP_NEXT_TEX:
        CachedTexIndex++;
        if( CachedTexIndex >= gTextureManager.GetNumOfCachedTexture() )
        {
            CachedTexIndex = 0;
        }
        DumpCachedTexture(CachedTexIndex);
        break;
    case DUMP_PREV_TEX:     
        CachedTexIndex--;
        if( CachedTexIndex < 0 || CachedTexIndex >= gTextureManager.GetNumOfCachedTexture() )
            CachedTexIndex = 0;
        DumpCachedTexture(CachedTexIndex);
        break;
    case DUMP_CACHED_TEX:
        DumpCachedTexture(CachedTexIndex);
        break;
    case DUMP_TEXBUFFER_AT:
        {
        }
        break;
    case DUMP_COMBINED_MATRIX:
        DumpMatrix2(gRSPworldProject,"Combined Matrix");
        break;
    case DUMP_WORLD_TOP_MATRIX:
        DumpMatrix2(gRSP.modelviewMtxs[gRSP.modelViewMtxTop],"World Top Matrix");
        break;
    case DUMP_WORLD_MATRIX_AT:
        {
        }
        break;
    case DUMP_PROJECTION_MATRIX:
        DumpMatrix2(gRSP.projectionMtxs[gRSP.projectionMtxTop],"Projection Top Matrix");
        break;
    }
}
Ejemplo n.º 2
0
void UPhATEdSkeletalMeshComponent::RenderAssetTools(const FSceneView* View, class FPrimitiveDrawInterface* PDI, bool bHitTest)
{
	check(SharedData);

	UPhysicsAsset* const PhysicsAsset = GetPhysicsAsset();
	check(PhysicsAsset);

	bool bHitTestAndBodyMode = bHitTest && SharedData->EditingMode == FPhATSharedData::PEM_BodyEdit;
	bool bHitTestAndConstraintMode = bHitTest && SharedData->EditingMode == FPhATSharedData::PEM_ConstraintEdit;

	FPhATSharedData::EPhATRenderMode CollisionViewMode = SharedData->GetCurrentCollisionViewMode();

#if DEBUG_CLICK_VIEWPORT
	PDI->DrawLine(SharedData->LastClickOrigin, SharedData->LastClickOrigin + SharedData->LastClickDirection * 5000.0f, FLinearColor(1, 1, 0, 1), SDPG_Foreground);
	PDI->DrawPoint(SharedData->LastClickOrigin, FLinearColor(1, 0, 0), 5, SDPG_Foreground);
#endif
	// Draw bodies
	for (int32 i = 0; i <PhysicsAsset->BodySetup.Num(); ++i)
	{
		int32 BoneIndex = GetBoneIndex(PhysicsAsset->BodySetup[i]->BoneName);

		// If we found a bone for it, draw the collision.
		// The logic is as follows; always render in the ViewMode requested when not in hit mode - but if we are in hit mode and the right editing mode, render as solid
		if (BoneIndex != INDEX_NONE)
		{
			FTransform BoneTM = GetBoneTransform(BoneIndex);
			float Scale = BoneTM.GetScale3D().GetAbsMax();
			FVector VectorScale(Scale);
			BoneTM.RemoveScaling();

			FKAggregateGeom* AggGeom = &PhysicsAsset->BodySetup[i]->AggGeom;

			for (int32 j = 0; j <AggGeom->SphereElems.Num(); ++j)
			{
				if (bHitTest)
				{
					PDI->SetHitProxy(new HPhATEdBoneProxy(i, KPT_Sphere, j));
				}

				FTransform ElemTM = GetPrimitiveTransform(BoneTM, i, KPT_Sphere, j, Scale);

				//solids are drawn if it's the ViewMode and we're not doing a hit, or if it's hitAndBodyMode
				if( (CollisionViewMode == FPhATSharedData::PRM_Solid && !bHitTest) || bHitTestAndBodyMode)
				{
					UMaterialInterface*	PrimMaterial = GetPrimitiveMaterial(i, KPT_Sphere, j, bHitTestAndBodyMode);
					AggGeom->SphereElems[j].DrawElemSolid(PDI, ElemTM, VectorScale, PrimMaterial->GetRenderProxy(0));
				}

				//wires are never used during hit
				if(!bHitTest)
				{
					if (CollisionViewMode == FPhATSharedData::PRM_Solid || CollisionViewMode == FPhATSharedData::PRM_Wireframe)
					{
						AggGeom->SphereElems[j].DrawElemWire(PDI, ElemTM, VectorScale, GetPrimitiveColor(i, KPT_Sphere, j));
					}
				}

				if (bHitTest)
				{
					PDI->SetHitProxy(NULL);
				}
				
			}

			for (int32 j = 0; j <AggGeom->BoxElems.Num(); ++j)
			{
				if (bHitTest)
				{
					PDI->SetHitProxy(new HPhATEdBoneProxy(i, KPT_Box, j));
				}

				FTransform ElemTM = GetPrimitiveTransform(BoneTM, i, KPT_Box, j, Scale);

				if ( (CollisionViewMode == FPhATSharedData::PRM_Solid && !bHitTest) || bHitTestAndBodyMode)
				{
					UMaterialInterface*	PrimMaterial = GetPrimitiveMaterial(i, KPT_Box, j, bHitTestAndBodyMode);
					AggGeom->BoxElems[j].DrawElemSolid(PDI, ElemTM, VectorScale, PrimMaterial->GetRenderProxy(0));
				}

				if(!bHitTest)
				{
					if (CollisionViewMode == FPhATSharedData::PRM_Solid || CollisionViewMode == FPhATSharedData::PRM_Wireframe)
					{
						AggGeom->BoxElems[j].DrawElemWire(PDI, ElemTM, VectorScale, GetPrimitiveColor(i, KPT_Box, j));
					}
				}
				

				if (bHitTest) 
				{
					PDI->SetHitProxy(NULL);
				}
			}

			for (int32 j = 0; j <AggGeom->SphylElems.Num(); ++j)
			{
				if (bHitTest) 
				{
					PDI->SetHitProxy(new HPhATEdBoneProxy(i, KPT_Sphyl, j));
				}

				FTransform ElemTM = GetPrimitiveTransform(BoneTM, i, KPT_Sphyl, j, Scale);

				if ( (CollisionViewMode == FPhATSharedData::PRM_Solid && !bHitTest) || bHitTestAndBodyMode)
				{
					UMaterialInterface*	PrimMaterial = GetPrimitiveMaterial(i, KPT_Sphyl, j, bHitTestAndBodyMode);
					AggGeom->SphylElems[j].DrawElemSolid(PDI, ElemTM, VectorScale, PrimMaterial->GetRenderProxy(0));
				}

				if(!bHitTest)
				{
					if (CollisionViewMode == FPhATSharedData::PRM_Solid || CollisionViewMode == FPhATSharedData::PRM_Wireframe)
					{
						AggGeom->SphylElems[j].DrawElemWire(PDI, ElemTM, VectorScale, GetPrimitiveColor(i, KPT_Sphyl, j));
					}
				}

				if (bHitTest) 
				{
					PDI->SetHitProxy(NULL);
				}
			}

			for (int32 j = 0; j <AggGeom->ConvexElems.Num(); ++j)
			{
				if (bHitTest) 
				{
					PDI->SetHitProxy(new HPhATEdBoneProxy(i, KPT_Convex, j));
				}

				FTransform ElemTM = GetPrimitiveTransform(BoneTM, i, KPT_Convex, j, Scale);

				//convex doesn't have solid draw so render lines if we're in hitTestAndBodyMode
				if(!bHitTest || bHitTestAndBodyMode)
				{
					if (CollisionViewMode == FPhATSharedData::PRM_Solid || CollisionViewMode == FPhATSharedData::PRM_Wireframe)
					{
						AggGeom->ConvexElems[j].DrawElemWire(PDI, ElemTM, Scale, GetPrimitiveColor(i, KPT_Convex, j));
					}
				}
				

				if (bHitTest) 
				{
					PDI->SetHitProxy(NULL);
				}
			}

			if (!bHitTest && SharedData->bShowCOM && Bodies.IsValidIndex(i))
			{
				Bodies[i]->DrawCOMPosition(PDI, COMRenderSize, SharedData->COMRenderColor);
			}
		}
	}

	// Draw Constraints
	FPhATSharedData::EPhATConstraintViewMode ConstraintViewMode = SharedData->GetCurrentConstraintViewMode();
	if (ConstraintViewMode != FPhATSharedData::PCV_None)
	{
		for (int32 i = 0; i <PhysicsAsset->ConstraintSetup.Num(); ++i)
		{
			int32 BoneIndex1 = GetBoneIndex(PhysicsAsset->ConstraintSetup[i]->DefaultInstance.ConstraintBone1);
			int32 BoneIndex2 = GetBoneIndex(PhysicsAsset->ConstraintSetup[i]->DefaultInstance.ConstraintBone2);
			// if bone doesn't exist, do not draw it. It crashes in random points when we try to manipulate. 
			if (BoneIndex1 != INDEX_NONE && BoneIndex2 != INDEX_NONE)
			{
				if (bHitTest) 
				{
					PDI->SetHitProxy(new HPhATEdConstraintProxy(i));
				}

				if(bHitTestAndConstraintMode || !bHitTest)
				{
					DrawConstraint(i, View, PDI, SharedData->EditorSimOptions->bShowConstraintsAsPoints);
				}
					
				if (bHitTest) 
				{
					PDI->SetHitProxy(NULL);
				}
			}
		}
	}

	if (!bHitTest && SharedData->EditingMode == FPhATSharedData::PEM_BodyEdit && SharedData->bShowInfluences)
	{
		DrawCurrentInfluences(PDI);
	}

	// If desired, draw bone hierarchy.
	if (!bHitTest && SharedData->bShowHierarchy)
	{
		DrawHierarchy(PDI, false);
	}

	// If desired, draw animation skeleton.
	if (!bHitTest && SharedData->bShowAnimSkel)
	{
		DrawHierarchy(PDI, SharedData->bRunningSimulation);
	}
}