PhysicsDebug::PhysicsDebug() { for (U32 n = 0; n < 2048; ++n) { mObjectColors[n] = BGFXCOLOR_RGBA(gRandGen.randRangeI(0, 255), gRandGen.randRangeI(0, 255), gRandGen.randRangeI(0, 255), 255); } }
void TransformTool::renderTool() { if (!mActive) return; // Grid { Point3F editorPos = mEditorManager->mEditorCamera.getWorldPosition(); editorPos = editorPos / 10.0f; editorPos.x = mFloor(editorPos.x); editorPos.y = mFloor(editorPos.y); editorPos = editorPos * 10.0f; Torque::Debug.ddPush(); Torque::Debug.ddSetState(true, false, true); Torque::Debug.ddSetWireframe(true); Torque::Debug.ddSetColor(BGFXCOLOR_RGBA(255, 255, 255, 255)); F32 gridNormal[3] = { 0.0f, 0.0f, 1.0f }; F32 gridPos[3] = { editorPos.x, editorPos.y, -0.01f }; Torque::Debug.ddDrawGrid(gridNormal, gridPos, 100, 10.0f); } // Draw Light Icons /*if (mLightIcon != NULL) { Vector<Lighting::LightData*> lightList = Torque::Lighting.getLightList(); for (S32 n = 0; n < lightList.size(); ++n) { Lighting::LightData* light = lightList[n]; Torque::Graphics.drawBillboard(mEditorManager->mRenderLayer4View->id, mLightIcon, light->position, 1.0f, 1.0f, ColorI(light->color[0] * 255, light->color[1] * 255, light->color[2] * 255, 255), NULL); } }*/ if (mMultiselect) { Box3F multiSelectBox; multiSelectBox.set(Point3F(0, 0, 0)); for (S32 n = 0; n < mSelectedObjects.size(); ++n) { Scene::SceneObject* obj = dynamic_cast<Scene::SceneObject*>(mSelectedObjects[n]); if (obj) { if (n == 0) multiSelectBox = obj->mBoundingBox; else multiSelectBox.intersect(obj->mBoundingBox); } Scene::BaseComponent* component = dynamic_cast<Scene::BaseComponent*>(mSelectedObjects[n]); if (component) { Box3F boundingBox = component->getBoundingBox(); boundingBox.transform(component->mTransform.matrix); if (n == 0) multiSelectBox = boundingBox; else multiSelectBox.intersect(boundingBox); } } mSelectionBounds = true; mSelectionBoundsStart = multiSelectBox.minExtents; mSelectionBoundsEnd = multiSelectBox.maxExtents; } // Object Selected if (mSelectedObject != NULL && mSelectedComponent == NULL) { mSelectionBounds = true; mSelectionBoundsStart = mSelectedObject->mBoundingBox.minExtents; mSelectionBoundsEnd = mSelectedObject->mBoundingBox.maxExtents; } // Component Selected if (mSelectedObject != NULL && mSelectedComponent != NULL) { Box3F boundingBox = mSelectedComponent->getBoundingBox(); boundingBox.transform(mSelectedObject->mTransform.matrix); mSelectionBounds = true; mSelectionBoundsStart = boundingBox.minExtents; mSelectionBoundsEnd = boundingBox.maxExtents; } // Selection Bounding Box if (mSelectionBounds) { Aabb debugBox; debugBox.m_min[0] = mSelectionBoundsStart.x; debugBox.m_min[1] = mSelectionBoundsStart.y; debugBox.m_min[2] = mSelectionBoundsStart.z; debugBox.m_max[0] = mSelectionBoundsEnd.x; debugBox.m_max[1] = mSelectionBoundsEnd.y; debugBox.m_max[2] = mSelectionBoundsEnd.z; Torque::Debug.ddSetWireframe(true); Torque::Debug.ddSetColor(BGFXCOLOR_RGBA(mSelectionBoundsColor.red, mSelectionBoundsColor.green, mSelectionBoundsColor.blue, mSelectionBoundsColor.alpha)); Torque::Debug.ddDrawAabb(debugBox); Torque::Debug.ddPop(); } // Gizmo mGizmo.render(); // Debug if (mDebugWorldRay) { Torque::Debug.ddMoveTo(mLastRayStart.x, mLastRayStart.y, mLastRayStart.z); Torque::Debug.ddLineTo(mLastRayEnd.x, mLastRayEnd.y, mLastRayEnd.z); } if (mDebugBoxSelection) { for (U32 i = 0; i < 4; ++i) { Torque::Debug.ddMoveTo(mBoxNearPoint.x, mBoxNearPoint.y, mBoxNearPoint.z); Torque::Debug.ddLineTo(mBoxFarPoint[i].x, mBoxFarPoint[i].y, mBoxFarPoint[i].z); } } }