void OnEnable()
        {
            Instance = this;

            this.minSize = new Vector2(width, height);
            this.maxSize = new Vector2(width, height);

            if (CarVersionChecker.IsAdvanceCompressionVersion())
            {
                arrVertexCompressionModes_ = new string[2] {
                    "Box (medium compression)", "Fiber (high compression)"
                };
            }
            else
            {
                arrVertexCompressionModes_ = new string[1] {
                    "Box (medium compression)"
                };
            }

            Controller = CarManager.Instance;
            Controller.Player.pause();

            simulationBaker_ = Controller.SimulationBaker;

            listBodyNode_ = simulationBaker_.listBodyNode_;

            bitArrNeedsBaking_     = simulationBaker_.bitArrNeedsBaking_;
            bitArrNeedsCollapsing_ = simulationBaker_.bitArrNeedsCollapsing_;
        }
Esempio n. 2
0
        public void OnGUI()
        {
            GUI.DrawTexture(new Rect(-30f, -10f, 230f, 230f), CarManagerEditor.ic_logoCaronte_);

            GUILayout.BeginArea(new Rect(180f, 5f, 195f, 210f));
            GUILayout.FlexibleSpace();

            if (versionType_.IsFlagSet(VersionType.Evaluation))
            {
                GUILayout.Label(new GUIContent("EVALUATION version.\n\nAny commercial use, \ncopying, or redistribution of \nthis plugin is strictly forbidden.\n"), EditorStyles.miniLabel);
            }

            if (CarVersionChecker.DoVersionExpires())
            {
                GUILayout.Label(new GUIContent("Expiration date of this version is:\n\n" + expirationDateTime_.ToShortDateString() + " (month/day/year).\nUse of this software is forbidden\nafter the expiration date."), EditorStyles.miniLabel);
            }

            if (CarVersionChecker.CompanyName != string.Empty)
            {
                GUILayout.Label(new GUIContent("This version is exclusive for " + CarVersionChecker.CompanyName + "\ninternal use.\n"), EditorStyles.miniLabel);
                GUILayout.Label(new GUIContent(companyIcon_), GUILayout.MaxWidth(69.7f), GUILayout.MaxHeight(32f));
            }

            GUILayout.FlexibleSpace();

            GUILayout.Label(new GUIContent("Powered by Caronte physics engine."), EditorStyles.miniLabel);
            GUILayout.Label(new GUIContent("(c) 2017 Next Limit Technologies."), EditorStyles.miniLabel);
            GUILayout.Label(new GUIContent(versionString_), EditorStyles.miniLabel);

            EditorGUILayout.Space();

            GUILayout.EndArea();
        }
Esempio n. 3
0
        public void Weld()
        {
            GameObject[] arrGOtoWeld = FieldController.GetUnityGameObjects();

            int arrGOtoWeld_size = arrGOtoWeld.Length;

            if (arrGOtoWeld_size == 0)
            {
                EditorUtility.DisplayDialog("CaronteFX", "Input objects are mandatory", "Ok");
                return;
            }

            GameObject[] arrWeldedObject;
            Mesh[]       arrWeldedMesh;

            EditorUtility.DisplayProgressBar(Data.Name, "Welding...", 1.0f);
            CarGeometryUtils.WeldObjects(arrGOtoWeld, Data.Name, out arrWeldedObject, out arrWeldedMesh);
            EditorUtility.ClearProgressBar();

            if (CarVersionChecker.IsFreeVersion() && arrWeldedObject == null)
            {
                EditorUtility.DisplayDialog("CaronteFX - Free version", "CaronteFX Free version can only weld the meshes included in the example scenes and the unity primitives (cube, plane, sphere, etc.).", "Ok");
            }

            if (arrWeldedObject != null)
            {
                DeleteOldObjects();

                List <GameObject> listWeldedObjects = new List <GameObject>();
                listWeldedObjects.AddRange(arrWeldedObject);

                Bounds bounds = CarEditorUtils.GetGlobalBoundsWorld(listWeldedObjects);

                GameObject go = new GameObject(Data.Name + "_output");
                go.transform.position = bounds.center;

                foreach (GameObject weldedGO in listWeldedObjects)
                {
                    weldedGO.transform.parent = go.transform;
                }

                if (Data.WeldGameObject != null)
                {
                    go.transform.parent = Data.WeldGameObject.transform.parent;
                    Object.DestroyImmediate(Data.WeldGameObject);
                }

                Data.WeldGameObject = go;
                Data.ArrWeldedGO    = arrWeldedObject;
                Data.ArrWeldedMesh  = arrWeldedMesh;
                EditorUtility.SetDirty(Data);

                UnityEditor.Selection.activeGameObject = Data.WeldGameObject;
            }
        }
Esempio n. 4
0
        void OnEnable()
        {
            string version = CaronteSharp.Caronte.GetNativeDllVersion();
            string versionTypeName;

            if (CarVersionChecker.IsFreeVersion())
            {
                versionTypeName = " FREE";
                versionType_    = VersionType.Free;
            }
            else if (CarVersionChecker.IsPremiumVersion())
            {
                if (CarVersionChecker.IsEvaluationVersion())
                {
                    versionTypeName = " PREMIUM TRIAL";
                    versionType_    = VersionType.Premium | VersionType.Evaluation;
                }
                else
                {
                    versionTypeName = " PREMIUM";
                    versionType_    = VersionType.Premium;
                }
            }
            else // PRO VERSION
            {
                if (CarVersionChecker.IsEvaluationVersion())
                {
                    versionTypeName = " PRO TRIAL";
                    versionType_    = VersionType.Pro | VersionType.Evaluation;
                }
                else
                {
                    versionTypeName = " PRO";
                    versionType_    = VersionType.Pro;
                }
            }

            if (CarVersionChecker.DoVersionExpires())
            {
                expirationDateTime_ = CarVersionChecker.GetExpirationDateDateInSeconds();
            }

            if (CarVersionChecker.IsAdvanceCompressionVersion())
            {
                compressionType_ = CompressionType.Advanced;
            }
            else
            {
                compressionType_ = CompressionType.Normal;
            }

            companyIcon_   = CarEditorResource.LoadEditorTexture(CarVersionChecker.CompanyIconName);
            versionString_ = "Version: " + version + versionTypeName + " \n(Compression type: " + compressionType_.ToString() + ")";
        }
Esempio n. 5
0
        public void Tessellate()
        {
            GameObject[] arrGOtoTessellate = FieldController.GetUnityGameObjects();

            GameObject[] arrGOTessellated;
            Mesh[]       arrMeshTessellated;

            if (arrGOtoTessellate.Length == 0)
            {
                EditorUtility.DisplayDialog("CaronteFX", "Please, first add some objects to tessellate to the field.", "Ok");
                return;
            }

            EditorUtility.DisplayProgressBar(Data.Name, "Tessellating...", 1.0f);
            CarGeometryUtils.TessellateObjects(arrGOtoTessellate, Data.MaxEdgeDistance, Data.LimitByMeshDimensions, out arrGOTessellated, out arrMeshTessellated);
            EditorUtility.ClearProgressBar();

            if (CarVersionChecker.IsFreeVersion() && arrGOTessellated == null)
            {
                EditorUtility.DisplayDialog("CaronteFX - Free version", "CaronteFX Free version can only tessellate the meshes included in the example scenes and the unity primitives (cube, plane, sphere, etc.).", "Ok");
            }

            if (arrGOTessellated != null)
            {
                DeleteOldObjects();

                List <GameObject> listGameObject = new List <GameObject>();
                listGameObject.AddRange(arrGOTessellated);

                Bounds     bounds = CarEditorUtils.GetGlobalBoundsWorld(listGameObject);
                GameObject nodeGO = new GameObject(Data.Name);

                nodeGO.transform.position = bounds.center;

                foreach (GameObject go in arrGOTessellated)
                {
                    go.transform.parent = nodeGO.transform;
                }

                if (Data.NodeGO != null)
                {
                    nodeGO.transform.parent = Data.NodeGO.transform.parent;
                    Object.DestroyImmediate(Data.NodeGO);
                }

                Data.NodeGO             = nodeGO;
                Data.ArrTessellatedGO   = arrGOTessellated;
                Data.ArrTessellatedMesh = arrMeshTessellated;

                EditorUtility.SetDirty(Data);

                Selection.activeGameObject = nodeGO;
            }
        }
 void OnEnable()
 {
     if (CarVersionChecker.IsAdvanceCompressionVersion())
     {
         arrVertexCompressionModes_ = new string[2] {
             "Box (medium compression)", "Fiber (high compression)"
         };
     }
     else
     {
         arrVertexCompressionModes_ = new string[1] {
             "Box (medium compression)"
         };
     }
 }
Esempio n. 7
0
        void OnEnable()
        {
            activeAnimationTextProp_  = serializedObject.FindProperty("activeAnimationText");
            activeAnimationAssetProp_ = serializedObject.FindProperty("activeAnimation");

            decondeInGPUProp_       = serializedObject.FindProperty("decodeInGPU_");
            bufferAllFramesProp_    = serializedObject.FindProperty("bufferAllFrames_");
            gpuFrameBufferSizeProp_ = serializedObject.FindProperty("gpuFrameBufferSize_");
            overrideShaderForVertexAnimationProp_ = serializedObject.FindProperty("overrideShaderForVertexAnimation_");
            useDoubleSidedShaderProp_             = serializedObject.FindProperty("useDoubleSidedShader_");
            recomputeNormalsProp_ = serializedObject.FindProperty("recomputeNormals_");

            ac_          = (CRAnimation)target;
            editorFrame_ = Mathf.Max(ac_.LastReadFrame, 0);
            SetAnimationPreviewMode();

            LoadCaronteIcon();

            playerPremiumVersion_ = CarVersionChecker.IsPremiumVersion();
        }
Esempio n. 8
0
        //-----------------------------------------------------------------------------------
        protected override void RenderFieldsBody(bool isEditable)
        {
            EditorGUILayout.Space();
            EditorGUILayout.Space();

            CarGUIUtils.DrawSeparator();
            CarGUIUtils.Splitter();

            scroller_ = EditorGUILayout.BeginScrollView(scroller_);

            EditorGUILayout.Space();
            float originalLabelWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 180f;

            EditorGUI.BeginDisabledGroup(!isEditable);
            {
                DrawDoCollide();
                DrawDoAutocollide();
                DrawDisableCollisionsAtJoints();
                EditorGUILayout.Space();

                DrawGUIMassOptions();

                GUILayout.Space(simple_space);
                DrawCollisionRadius();
                DrawSafeModeIntegration();
                if (CarVersionChecker.IsPremiumVersion())
                {
                    DrawClothGrouping();
                }

                GUILayout.Space(simple_space);
                DrawBendStiffness();
                DrawStretchStiffness();
                GUILayout.Space(simple_space);
                DrawDampingBend();
                DrawDampingStretch();
                GUILayout.Space(simple_space);

                CarGUIUtils.Splitter();
                GUILayout.Space(simple_space);

                DrawRestitution();
                DrawFrictionKinetic();

                GUILayout.BeginHorizontal();
                EditorGUI.BeginDisabledGroup(Data.FromKinetic);
                DrawFrictionStatic();
                EditorGUI.EndDisabledGroup();
                DrawFrictionStaticFromKinetic();
                GUILayout.EndHorizontal();

                GUILayout.Space(simple_space);
                DrawDampingPerSecondWorld();
                GUILayout.Space(simple_space);

                bool currentMode = EditorGUIUtility.wideMode;
                EditorGUIUtility.wideMode = true;
                DrawLinearVelocity();
                DrawAngularVelocity();

                CarGUIUtils.Splitter();
                GUILayout.Space(simple_space);
                DrawExplosionOpacity();
                DrawExplosionResponsiveness();
                EditorGUIUtility.wideMode = currentMode;
            }
            EditorGUI.EndDisabledGroup();

            CarGUIUtils.Splitter();
            EditorGUILayout.Space();

            EditorGUIUtility.labelWidth = originalLabelWidth;

            EditorGUILayout.Space();
            EditorGUILayout.EndScrollView();
        }
        private void DrawCustomColliderFields()
        {
            Caronte_Fx_Body     component = (Caronte_Fx_Body)target;
            SkinnedMeshRenderer smr       = component.GetComponent <SkinnedMeshRenderer>();

            if (smr == null)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedColliderType_, new GUIContent("Collider"));
                EditorGUILayout.EndHorizontal();

                Color curColor = GUI.contentColor;
                if (serializedColliderType_.enumValueIndex == 2)
                {
                    GUI.contentColor = Color.green;
                }
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedColliderMesh_, new GUIContent("Custom Mesh"));
                GUI.contentColor = curColor;
                EditorGUILayout.EndHorizontal();

                if (serializedColliderType_.enumValueIndex == 3)
                {
                    GUI.contentColor = Color.green;
                }
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedColliderGameObject_, new GUIContent("Custom GameObject"));
                GUI.contentColor = curColor;
                EditorGUILayout.EndHorizontal();


                if (!CarVersionChecker.IsPremiumVersion())
                {
                    EditorGUI.BeginDisabledGroup(true);
                }

                if (serializedColliderType_.enumValueIndex == 4)
                {
                    GUI.contentColor = Color.green;
                }
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedBalltreeAsset_, new GUIContent("Balltree Asset"));
                GUI.contentColor = curColor;
                EditorGUILayout.EndHorizontal();

                if (!CarVersionChecker.IsPremiumVersion())
                {
                    EditorGUI.EndDisabledGroup();
                }


                if (!CarVersionChecker.IsPremiumVersion() && serializedColliderType_.enumValueIndex == 4)
                {
                    EditorGUILayout.HelpBox("Balltree assets can only be used in CaronteFX Premium Version.", MessageType.Info);
                }

                EditorGUILayout.Space();
                EditorGUILayout.Space();

                EditorGUILayout.PropertyField(serializedRenderCollider_, new GUIContent("Render collider"));

                EditorGUI.BeginDisabledGroup(cfxBody_.IsUsingBalltree());
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedColliderColor_, new GUIContent("Color"));
                EditorGUILayout.EndHorizontal();
                EditorGUI.EndDisabledGroup();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PropertyField(serializedColliderRenderMode_, new GUIContent("Render mode"));
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Space();
            }
        }
        public void DrawRebake()
        {
            EditorGUI.BeginDisabledGroup(true);
            if (crAnimation_.animationFileType == CRAnimation.AnimationFileType.CRAnimationAsset)
            {
                EditorGUILayout.ObjectField("Active animation", crAnimation_.activeAnimation, typeof(CRAnimationAsset), true);
            }
            else if (crAnimation_.animationFileType == CRAnimation.AnimationFileType.TextAsset)
            {
                EditorGUILayout.ObjectField("Active animation", crAnimation_.activeAnimationText, typeof(TextAsset), true);
            }
            EditorGUI.EndDisabledGroup();

            EditorGUILayout.Space();

            float start = EditorGUILayout.IntField("Frame Start : ", trimFrameStart_);
            float end   = EditorGUILayout.IntField("Frame End   : ", trimFrameEnd_);

            EditorGUILayout.MinMaxSlider(new GUIContent("Frames:"), ref start, ref end, 0, trimFrameLast_);
            SetStartEndFrames((int)start, (int)end);

            EditorGUILayout.Space();

            EditorGUI.BeginDisabledGroup(true);
            int actualFrameStart = createLoopableBake_ ? trimFrameStart_ + transitionFrames_ : trimFrameStart_;

            EditorGUILayout.IntField("Actual frame start", actualFrameStart);
            EditorGUI.EndDisabledGroup();

            EditorGUI.BeginDisabledGroup(true);
            int actualFrameCount = createLoopableBake_ ? trimFrameEnd_ - trimFrameStart_ - transitionFrames_ : trimFrameEnd_ - trimFrameStart_;

            EditorGUILayout.IntField("Actual frame count", actualFrameCount);
            EditorGUI.EndDisabledGroup();

            EditorGUI.BeginDisabledGroup(true);
            EditorGUILayout.FloatField("Actual time", actualFrameCount * crAnimation_.FrameTime);
            EditorGUI.EndDisabledGroup();

            if (CarVersionChecker.IsPremiumVersion())
            {
                EditorGUILayout.Space();

                createLoopableBake_ = EditorGUILayout.Toggle("Create loop", createLoopableBake_);
                EditorGUI.BeginDisabledGroup(!createLoopableBake_);
                int frameCount    = trimFrameEnd_ - trimFrameStart_ + 1;
                int maxLoopFrames = frameCount / 2;
                transitionFrames_ = Mathf.Clamp(Mathf.Min(EditorGUILayout.IntField("Loop frames", transitionFrames_), maxLoopFrames), 0, int.MaxValue);
                EditorGUI.EndDisabledGroup();
            }

            EditorGUILayout.Space();
            vertexCompression_ = EditorGUILayout.Toggle("Vertex compression", vertexCompression_);

            EditorGUI.BeginDisabledGroup(!vertexCompression_);
            vertexCompressionIdx_ = EditorGUILayout.Popup("Compression mode", vertexCompressionIdx_, arrVertexCompressionModes_);
            EditorGUI.EndDisabledGroup();

            bool isFiberCompression = vertexCompression_ && vertexCompressionIdx_ == 1;

            EditorGUI.BeginDisabledGroup(isFiberCompression);
            saveTangents_ = EditorGUILayout.Toggle("Save tangents", saveTangents_);
            EditorGUI.EndDisabledGroup();

            alignData_ = EditorGUILayout.Toggle("Align data", alignData_);

            EditorGUI.BeginDisabledGroup(createLoopableBake_);
            bakeEvents_ = EditorGUILayout.Toggle("Bake events", bakeEvents_);
            EditorGUI.EndDisabledGroup();

            GUILayout.FlexibleSpace();
            CarGUIUtils.Splitter();

            if (GUILayout.Button("Rebake animation"))
            {
                if (trimFrameEnd_ <= trimFrameStart_)
                {
                    EditorUtility.DisplayDialog("CaronteFX - Invalid frames", "Frame End must be above Frame Start", "Ok");
                    return;
                }
                bool isTextAsset = crAnimation_.animationFileType == CRAnimation.AnimationFileType.TextAsset;
                RebakeClip(isTextAsset);
            }
        }