//---------------------------------------------------------------------------- public void DrawCube(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling) { PKFxFX fx = (PKFxFX)target; Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform; if (!worldSpaceSampling) { shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform; } Vector3 position = shapeTransform.GetColumn(3); Quaternion rotation = shapeTransform.rotation; Vector3 size = sampler.m_Dimensions; Vector3 A = position + rotation * new Vector3(-size.x / 2, size.y / 2, size.z / 2); Vector3 B = position + rotation * new Vector3(size.x / 2, size.y / 2, size.z / 2); Vector3 C = position + rotation * new Vector3(size.x / 2, -size.y / 2, size.z / 2); Vector3 D = position + rotation * new Vector3(-size.x / 2, -size.y / 2, size.z / 2); Vector3 E = position + rotation * new Vector3(-size.x / 2, size.y / 2, -size.z / 2); Vector3 F = position + rotation * new Vector3(size.x / 2, size.y / 2, -size.z / 2); Vector3 G = position + rotation * new Vector3(size.x / 2, -size.y / 2, -size.z / 2); Vector3 H = position + rotation * new Vector3(-size.x / 2, -size.y / 2, -size.z / 2); Vector3[] face = new Vector3[5]; Handles.color = Color.cyan; face[0] = A; face[1] = B; face[2] = C; face[3] = D; face[4] = A; Handles.DrawPolyLine(face); face[0] = A; face[1] = E; face[2] = H; face[3] = D; face[4] = A; Handles.DrawPolyLine(face); face[0] = B; face[1] = F; face[2] = G; face[3] = C; face[4] = B; Handles.DrawPolyLine(face); face[0] = E; face[1] = F; face[2] = G; face[3] = H; face[4] = E; Handles.DrawPolyLine(face); }
//---------------------------------------------------------------------------- public void DrawSphere(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling) { PKFxFX fx = (PKFxFX)target; float radius = sampler.m_Dimensions.x; float innerRadius = sampler.m_Dimensions.y; Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform; if (!worldSpaceSampling) { shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform; } Vector3 position = shapeTransform.GetColumn(3); Quaternion rotation = shapeTransform.rotation; Vector3 scale = shapeTransform.lossyScale; Handles.color = Color.blue; innerRadius = Handles.RadiusHandle(rotation, position, Mathf.Min(radius, innerRadius)); Handles.color = Color.cyan; radius = Handles.RadiusHandle(rotation, position, Mathf.Max(radius, innerRadius)); }
public void DrawCylinder(int i, PKFxFX.Sampler sampler, bool worldSpaceSampling) { PKFxFX fx = (PKFxFX)target; float radius = sampler.m_Dimensions.x; float innerRadius = sampler.m_Dimensions.y; float height = sampler.m_Dimensions.z; Matrix4x4 shapeTransform = sampler.m_ShapeTransform.transform; if (!worldSpaceSampling) { shapeTransform = ((GameObject)fx.gameObject).transform.localToWorldMatrix * shapeTransform; } Vector3 position = shapeTransform.GetColumn(3); Quaternion rotation = shapeTransform.rotation; Handles.color = Color.blue; _PrimitiveCylinder(innerRadius, height, position, rotation); Handles.color = Color.cyan; _PrimitiveCylinder(radius, height, position, rotation); }
//---------------------------------------------------------------------------- public void OnSceneGUI() { if (target != null) { PKFxFX fx = target as PKFxFX; if (fx != null && fx.m_FxSamplersList != null) { for (int i = 0; i < fx.m_FxSamplersList.Count; i++) { PKFxFX.Sampler sampler = fx.m_FxSamplersList[i]; if (sampler != null && sampler.m_Descriptor.m_Type == (int)PKFxFxAsset.SamplerDesc.ESamplerType.SamplerShape) { // Show the shapes in world space instead of local space (just for the editor workflow, does not change the actual sampling) bool worldSpaceSampling = sampler.m_WorldSpaceSampling; if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.BoxShape) { DrawCube(i, sampler, worldSpaceSampling); } else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.SphereShape) { DrawSphere(i, sampler, worldSpaceSampling); } else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.CylinderShape) { DrawCylinder(i, sampler, worldSpaceSampling); } else if (sampler.m_ShapeType == PKFxFX.Sampler.EShapeType.CapsuleShape) { DrawCapsule(i, sampler, worldSpaceSampling); } } } } } }