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_; }
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(); }
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; } }
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() + ")"; }
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)" }; } }
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(); }
//----------------------------------------------------------------------------------- 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); } }