protected override void CloneData(CommandNode node) { base.CloneData(node); CNBody clone = (CNBody)node; clone.doCollide_ = doCollide_; clone.isSolidVsShell_ = isSolidVsShell_; clone.mass_ = mass_; clone.density_ = density_; clone.restitution_in01_ = restitution_in01_; clone.frictionKinetic_in01_ = frictionKinetic_in01_; clone.frictionStatic_in01_ = frictionStatic_in01_; clone.fromKinetic_ = fromKinetic_; clone.gravity_ = gravity_; clone.dampingPerSecond_WORLD_ = dampingPerSecond_WORLD_; clone.velocityStart_ = velocityStart_; clone.omegaStart_inRadSeg_ = omegaStart_inRadSeg_; clone.explosionOpacity_ = explosionOpacity_; clone.explosionResponsiveness_ = explosionResponsiveness_; }
void OnGUI() { Rect nodesArea = new Rect(5, 5, width - 10, Mathf.CeilToInt((height - 10f) / 3)); Rect nodesAreaBox = new Rect(nodesArea.xMin, nodesArea.yMin, nodesArea.width + 1, nodesArea.height + 1); GUI.Box(nodesAreaBox, ""); GUILayout.BeginArea(nodesArea); GUILayout.BeginHorizontal(); GUIStyle styleTitle = new GUIStyle(GUI.skin.label); styleTitle.fontStyle = FontStyle.Bold; GUILayout.Label("Nodes to bake:", styleTitle); GUILayout.EndHorizontal(); CarGUIUtils.DrawSeparator(); GUILayout.BeginHorizontal(); int bodyNodeCount = listBodyNode_.Count; EditorGUILayout.BeginHorizontal(); DrawToggleMixed(bodyNodeCount); Rect rect = GUILayoutUtility.GetLastRect(); GUILayout.Space(40f); EditorGUILayout.LabelField("Collapse/Skin"); EditorGUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); Rect boxRect = new Rect(nodesAreaBox.xMin - 5, rect.yMax, nodesAreaBox.width - 90f, nodesAreaBox.yMax - rect.yMax); Rect collapseRect = new Rect(boxRect.xMax, boxRect.yMin, 90f, boxRect.height); GUI.Box(boxRect, ""); GUI.Box(collapseRect, ""); scroller_ = GUILayout.BeginScrollView(scroller_); for (int i = 0; i < bodyNodeCount; i++) { GUILayout.BeginHorizontal(); CNBody bodyNode = listBodyNode_[i]; string name = bodyNode.Name; bitArrNeedsBaking_[i] = EditorGUILayout.ToggleLeft(name, bitArrNeedsBaking_[i], GUILayout.Width(250f)); GUILayout.Space(35f); bool isRigid = bodyNode is CNRigidbody; bool isAnimated = bodyNode is CNAnimatedbody; if (isRigid && !isAnimated) { bitArrNeedsCollapsing_[i] = EditorGUILayout.Toggle(bitArrNeedsCollapsing_[i]); } GUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); GUILayout.EndArea(); GUILayout.FlexibleSpace(); EditorGUILayout.Space(); EditorGUILayout.Space(); float start = EditorGUILayout.IntField("Frame Start : ", StartFrame); float end = EditorGUILayout.IntField("Frame End : ", EndFrame); EditorGUILayout.MinMaxSlider(new GUIContent("Frames:"), ref start, ref end, 0, MaxFrames); SetStartEndFrames((int)start, (int)end); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.animationFileType_ = (CarAnimationBaker.AnimationFileType)EditorGUILayout.EnumPopup("File type", simulationBaker_.animationFileType_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.skinRopes_ = EditorGUILayout.Toggle("Skin ropes", simulationBaker_.skinRopes_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.skinClothes_ = EditorGUILayout.Toggle("Skin clothes", simulationBaker_.skinClothes_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.vertexCompression_ = EditorGUILayout.Toggle("Vertex compression", simulationBaker_.vertexCompression_); GUILayout.EndHorizontal(); EditorGUI.BeginDisabledGroup(!simulationBaker_.vertexCompression_); simulationBaker_.vertexCompressionIdx_ = EditorGUILayout.Popup("Compression mode", simulationBaker_.vertexCompressionIdx_, arrVertexCompressionModes_); EditorGUI.EndDisabledGroup(); bool isFiberCompression = simulationBaker_.vertexCompression_ && simulationBaker_.vertexCompressionIdx_ == 1; EditorGUI.BeginDisabledGroup(isFiberCompression); GUILayout.BeginHorizontal(); simulationBaker_.vertexTangents_ = EditorGUILayout.Toggle("Save tangents", simulationBaker_.vertexTangents_); GUILayout.EndHorizontal(); EditorGUI.EndDisabledGroup(); GUILayout.BeginHorizontal(); simulationBaker_.alignData_ = EditorGUILayout.Toggle("Align data", simulationBaker_.alignData_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.bakeEvents_ = EditorGUILayout.Toggle("Save events", simulationBaker_.bakeEvents_); GUILayout.EndHorizontal(); //simulationBaker_.bakeVisibility_ = EditorGUILayout.Toggle("Save visibility", simulationBaker_.bakeVisibility_); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.animationName_ = EditorGUILayout.TextField("Animation name", simulationBaker_.animationName_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.bakeObjectName_ = EditorGUILayout.TextField("Root gameobject name", simulationBaker_.bakeObjectName_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.optionalRootTransform_ = (Transform)EditorGUILayout.ObjectField("Optional root transform", simulationBaker_.optionalRootTransform_, typeof(Transform), true); GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("Bake!", GUILayout.Height(20f))) { if (simulationBaker_.FrameEnd <= simulationBaker_.FrameStart) { EditorUtility.DisplayDialog("CaronteFX - Invalid frames", "Frame End must be above Frame Start", "Ok"); return; } EditorApplication.delayCall += () => { simulationBaker_.BakeSimulationAsAnim(); Close(); }; } GUILayout.BeginHorizontal(); GUILayout.EndHorizontal(); GUILayout.Space(5f); }
public CNBodyEditor(CNBody data, CNBodyEditorState state) : base(data, state) { Data = (CNBody)data; state_ = state; }
void OnGUI() { Rect nodesArea = new Rect(5, 5, width - 10, ((height - 10) / 2)); Rect nodesAreaBox = new Rect(nodesArea.xMin, nodesArea.yMin, nodesArea.width + 1, nodesArea.height + 1); GUI.Box(nodesAreaBox, ""); GUILayout.BeginArea(nodesArea); GUILayout.BeginHorizontal(); GUIStyle styleTitle = new GUIStyle(GUI.skin.label); styleTitle.fontStyle = FontStyle.Bold; GUILayout.Label("Nodes to bake:", styleTitle); GUILayout.EndHorizontal(); CRGUIUtils.DrawSeparator(); GUILayout.BeginHorizontal(); int bodyNodeCount = listBodyNode_.Count; EditorGUILayout.BeginHorizontal(); DrawToggleMixed(bodyNodeCount); Rect rect = GUILayoutUtility.GetLastRect(); GUILayout.Space(65f); EditorGUILayout.LabelField("Collapse"); EditorGUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); Rect boxRect = new Rect(nodesAreaBox.xMin - 5, rect.yMax, nodesAreaBox.width - 70f, nodesAreaBox.yMax - rect.yMax); Rect collapseRect = new Rect(boxRect.xMax, boxRect.yMin, 70f, boxRect.height); GUI.Box(boxRect, ""); GUI.Box(collapseRect, ""); scroller_ = GUILayout.BeginScrollView(scroller_); for (int i = 0; i < bodyNodeCount; i++) { GUILayout.BeginHorizontal(); CNBody bodyNode = listBodyNode_[i]; string name = bodyNode.Name; bitArrNeedsBaking_[i] = EditorGUILayout.ToggleLeft(name, bitArrNeedsBaking_[i], GUILayout.Width(250f)); GUILayout.Space(40f); bool isRigid = bodyNode is CNRigidbody; bool isAnimated = bodyNode is CNAnimatedbody; if (isRigid && !isAnimated) { bitArrNeedsCollapsing_[i] = EditorGUILayout.Toggle(bitArrNeedsCollapsing_[i]); } GUILayout.EndHorizontal(); } EditorGUILayout.EndScrollView(); GUILayout.EndArea(); GUILayout.FlexibleSpace(); Rect optionsArea = new Rect(5, nodesArea.yMax, width - 10, (height - 10) / 2); GUILayout.BeginArea(optionsArea); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Frame Start : " + StartFrame); EditorGUILayout.LabelField("Frame End : " + EndFrame); float start = StartFrame; float end = EndFrame; EditorGUILayout.MinMaxSlider(new GUIContent("Frames:"), ref start, ref end, 0, MaxFrames); SetStartEndFrames((int)start, (int)end); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.sbCompression_ = EditorGUILayout.Toggle("Vertex compression", simulationBaker_.sbCompression_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.sbTangents_ = EditorGUILayout.Toggle("Save tangents", simulationBaker_.sbTangents_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.bakeEvents_ = EditorGUILayout.Toggle("Save events", simulationBaker_.bakeEvents_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.animationName_ = EditorGUILayout.TextField("Animation name", simulationBaker_.animationName_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.bakeObjectName_ = EditorGUILayout.TextField("Root gameobject name", simulationBaker_.bakeObjectName_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("Bake!")) { EditorApplication.delayCall += () => { simulationBaker_.BakeSimulationAsAnim(); Close(); }; } GUILayout.BeginHorizontal(); GUILayout.EndHorizontal(); GUILayout.EndArea(); }
void OnGUI() { Rect nodesArea = new Rect(5, 5, width - 10, ((height - 10) * 0.70f)); Rect nodesAreaBox = new Rect(nodesArea.xMin, nodesArea.yMin, nodesArea.width + 1, nodesArea.height + 1); GUI.Box(nodesAreaBox, ""); GUILayout.BeginArea(nodesArea); GUILayout.BeginHorizontal(); GUIStyle styleTitle = new GUIStyle(GUI.skin.label); styleTitle.fontStyle = FontStyle.Bold; GUILayout.Label("Nodes to bake:", styleTitle); GUILayout.EndHorizontal(); CRGUIUtils.DrawSeparator(); GUILayout.BeginHorizontal(); int bodyNodeCount = listBodyNode_.Count; EditorGUILayout.BeginHorizontal(); DrawToggleMixed(bodyNodeCount); Rect rect = GUILayoutUtility.GetLastRect(); GUILayout.Space(65f); EditorGUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); Rect boxRect = new Rect(nodesAreaBox.xMin - 5f, rect.yMax, nodesAreaBox.width, (nodesAreaBox.yMax - rect.yMax) + 1f); GUI.Box(boxRect, ""); scroller_ = GUILayout.BeginScrollView(scroller_); for (int i = 0; i < bodyNodeCount; i++) { CNBody bodyNode = listBodyNode_[i]; string name = bodyNode.Name; bitArrNeedsBaking_[i] = EditorGUILayout.ToggleLeft(name, bitArrNeedsBaking_[i], GUILayout.Width(250f)); } EditorGUILayout.EndScrollView(); GUILayout.EndArea(); GUILayout.FlexibleSpace(); Rect optionsArea = new Rect(5f, nodesArea.yMax + 15f, width - 10f, ((height - 10f) * 0.30f)); GUILayout.BeginArea(optionsArea); EditorGUILayout.Space(); EditorGUILayout.Space(); GUILayout.BeginHorizontal(); simulationBaker_.combineMeshesInFrame_ = EditorGUILayout.Toggle("Combine meshes", simulationBaker_.combineMeshesInFrame_); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); simulationBaker_.bakeObjectName_ = EditorGUILayout.TextField("Bake object name", simulationBaker_.bakeObjectName_); GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("Bake!")) { EditorApplication.delayCall += () => { simulationBaker_.BakeCurrentFrame(); Close(); }; } GUILayout.EndArea(); }