Пример #1
0
        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_;
        }
Пример #2
0
        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);
        }
Пример #3
0
 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();
        }