void Start() { #if DW if (RealisticWaterPhysics.currentUseDW == true) { DynamicWaterSystemWater = GameObject.FindGameObjectWithTag("DynamicWater"); if (DynamicWaterSystemWater != null) { if (DynamicWaterSystemWater.GetComponent <DynamicWater>() == true && DynamicWaterSystemWater.GetComponent <DynamicWater>().enabled == true) { //Its limited to 10,000 by them, not me :P DynamicWaterSystemWater.GetComponent <DynamicWater>().Density = PhysicsMaterialsList.getLiquidsMaterialValue(selectedOceanLiquidsMaterial); } } } #endif float CalculatedWaterDensity = PhysicsMaterialsList.getLiquidsMaterialValue(selectedOceanLiquidsMaterial); RealisticWaterPhysics.Setup(CalculatedWaterDensity, waterLevel, useExternalWaterLevel, useCeto, useDW, useAquas, usePW, selectedGasesMaterial, maxAirLevel, 4, 4); if (RealisticWaterPhysics.currentDebugEnabled) // Just skip this if debug info is disabled. { Debug.Log("Calculated Water Density:" + CalculatedWaterDensity); } }
void calculateResults() { //Make sure a gameobject is selected! if (SelectedObject != null) { bool Failed = false; //First calculate the density of the object. if (SelectedObject.GetComponent <MeshFilter>() && SelectedObject.GetComponent <MeshFilter>().sharedMesh != null) { // Use meshfilter based bounds CalculatedVolume = MeshVolume.getVolume(SelectedObject as GameObject); } else if (SelectedObject.GetComponent <Collider>()) { // Use collider based bounds CalculatedVolume = MeshVolume.getVolumeByColliderBounds(SelectedObject.GetComponent <Collider>()); } else { Debug.Log("[Realistic Water Physics] Object is missing a mesh filter or collider."); Failed = true; } if (!Failed) // a small fix! { //Now the percentage thats solit and the remaining is air. float percentageSolidMass = CalculatedVolume * ((selectedMaterialValue / 100) * percentageSolid); float percentageAir = CalculatedVolume * ((RealisticWaterPhysics.currentAirDensity / 100) * (100 - percentageSolid)); //The totaal mass of the object is the amount of solit material + the remaining amount of air. CalculatedMass = percentageSolidMass + percentageAir; //the density of the intire object is its calculated mass / its volume. CalculatedDensity = CalculatedMass / CalculatedVolume; CalculatedWaterDensity = PhysicsMaterialsList.getLiquidsMaterialValue(selectedOceanLiquidsMaterial); CalculatedAirDensity = airDensity; if (CalculatedDensity > CalculatedWaterDensity) // if denser then water density it will sink. { CalculatedWillFloatInWater = false; } else { CalculatedWillFloatInWater = true; } if (CalculatedDensity > CalculatedAirDensity) // if denser then air density it will sink { CalculatedWillFloatInAir = false; } else { CalculatedWillFloatInAir = true; } DidTest = true; } } }
void NoneGUIElementsUpdate() { selectionGameObjects = new List <GameObject>(Selection.gameObjects); //Its not so nice but will shot the window search blocking Light window search. if (OldtoolbarInt != toolbarInt) { //User pressed as button! OldtoolbarInt = toolbarInt; //To keep the OnGUI() cleaner! if (toolbarInt == 0) { showSetupOptions = true; showGameobjectSetupOptions = false; existingObjectsManager = false; searchFilterResetDone = false; resetSearchFilter(); } else if (toolbarInt == 1) { showGameobjectSetupOptions = true; showSetupOptions = false; existingObjectsManager = false; searchFilterResetDone = false; resetSearchFilter(); } else if (toolbarInt == 2) { showGameobjectSetupOptions = true; showSetupOptions = false; existingObjectsManager = true; searchFilterResetDone = false; resetSearchFilter(); RealisticComponentSearch.SetSearchFilter("RealisticBuoyancy", 2); } } if (SelectedMaterialType == MaterialTypes.Solid) { selectedMaterialValue = PhysicsMaterialsList.getSolidMaterialValue(selectedSolidsMaterial); } else if (SelectedMaterialType == MaterialTypes.Liquids) { selectedMaterialValue = PhysicsMaterialsList.getLiquidsMaterialValue(selectedLiquidsMaterial); } else { selectedMaterialValue = PhysicsMaterialsList.getGasesMaterialValue(selectedGasesMaterial); } checkForChanges(); //Check to see if user changed anything, exept the gameobject thats a check of its own type. RememberOlds(); // Remember the options for now! createOrUpdateManager(); //Create or update the manager. CalculatedWaterDensity = PhysicsMaterialsList.getLiquidsMaterialValue(selectedOceanLiquidsMaterial); //CalculatedAirDensity = CalculateStuff(airTempeture, airDensity); CalculatedAirDensity = airDensity; // Work in progress! }
public static void Setup(float _waterDensity, float _waterLevel, bool _ExternalWater, bool _useCeto, bool _useDW, bool _useAquas, bool _usePW, GasesMaterialList _SelectedGasesMaterial, float _airLevel, float _waterTemp, float _airTemp) { waterDensity = _waterDensity; waterLevel = _waterLevel; ExternalWater = _ExternalWater; airLevel = _airLevel; airDensity = PhysicsMaterialsList.getGasesMaterialValue(_SelectedGasesMaterial); airTemp = _airTemp; waterTemp = _waterTemp; //Support useCeto = _useCeto; useDW = _useDW; useAquas = _useAquas; usePW = _usePW; }
private float getSelectedMaterialValue() { if (SelectedMaterialType == MaterialTypes.Solid) { return(PhysicsMaterialsList.getSolidMaterialValue(selectedSolidsMaterial)); } else if (SelectedMaterialType == MaterialTypes.Liquids) { return(PhysicsMaterialsList.getLiquidsMaterialValue(selectedLiquidsMaterial)); } else { return(PhysicsMaterialsList.getGasesMaterialValue(selectedGasesMaterial)); } return(0.0f); }
void OnGUI() { //To fix the crapy static stuff and missing Start void :/ if (firstStart == false) { firstStart = true; importSettingsFromExistingManager(); if (SelectedObject != null) { importSettingsFromSelectedGameObject(); } } //To keep everything updated! NoneGUIElementsUpdate(); if (OverWriteDisableWindow == false) // If this value = true there is something wrong! { if (ShowAdvancedInfo == true) { if (GUILayout.Button("Hide advanced options/info")) { ShowAdvancedInfo = false;; hideManagerGameObject(); } } else { if (GUILayout.Button("Show advanced options/info")) { ShowAdvancedInfo = true; showManagerGameObject(); } } if (textureLogo == null) { textureLogo = (Texture2D)EditorGUIUtility.Load("Assets/RealisticPhysics/RealisticWaterPhysics/Resources/icon0.png"); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label(textureLogo); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); toolbarInt = GUILayout.Toolbar(toolbarInt, toolbarStrings); EditorGUILayout.BeginHorizontal(); scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(450), GUILayout.Height(300)); } EditorGUILayout.HelpBox("Waring log: " + lastErrorLog, MessageType.Info, true); //Desplay the last error log, warning! if (OverWriteDisableWindow == false) // If this value = true there is something wrong! { EditorGUILayout.Space(); if (showSetupOptions == true) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Water settings:"); selectedOceanLiquidsMaterial = (LiquidsMaterialList)EditorGUILayout.EnumPopup("Water Classification:", selectedOceanLiquidsMaterial); if (ShowAdvancedInfo) { EditorGUILayout.LabelField("Density of the water:" + CalculatedWaterDensity); } EditorGUILayout.Space(); if (waterObject != null) { waterLevel = waterObject.transform.position.y; } if (currentUseCeto == false && currentUseDW == false && currentUseAquas == false && currentUsePlayWayWater == false) { if (waterObject == null) { waterLevel = EditorGUILayout.FloatField("Water Level:", waterLevel); } if (ShowAdvancedInfo) { if (waterObject == null) { EditorGUILayout.LabelField("Or"); } if (waterObject = EditorGUILayout.ObjectField("Water GameObject: ", waterObject, typeof(GameObject), true) as GameObject) { waterLevel = waterObject.transform.position.y; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(""); EditorGUILayout.LabelField("Water level: " + waterLevel.ToString()); EditorGUILayout.EndHorizontal(); } EditorGUILayout.LabelField("Or"); useExternalWaterLevel = EditorGUILayout.Toggle("Use external water level", useExternalWaterLevel); // Allows you to make something yourself ;) } } EditorGUILayout.Space(); EditorGUILayout.LabelField("Air settings:"); useAirDensity = EditorGUILayout.Toggle("Use air density", useAirDensity); if (useAirDensity == true) { maxAirLevel = EditorGUILayout.FloatField("Max air Level:", maxAirLevel); if (ShowAdvancedInfo) { selectedAirGasesMaterial = (GasesMaterialList)EditorGUILayout.EnumPopup("Air type: ", selectedAirGasesMaterial); airDensity = PhysicsMaterialsList.getGasesMaterialValue(selectedAirGasesMaterial); EditorGUILayout.LabelField("Density of the air:" + CalculatedAirDensity); // work in progress! } } EditorGUILayout.Space(); EditorGUILayout.LabelField("Support settings:"); //Again for support #if CETO currentUseCeto = EditorGUILayout.Toggle("Enable Ceto support", currentUseCeto); #endif #if DW currentUseDW = EditorGUILayout.Toggle("Enable Dynamic Water support", currentUseDW); #endif #if AQUAS currentUseAquas = EditorGUILayout.Toggle("Enable Aquas support", currentUseAquas); #endif //Aquas needs a water level to work with, so leave that at them, just let the users select the aqaus water object if (currentUseAquas == true) { if (AquaswaterObject = EditorGUILayout.ObjectField("AQUAS water object: ", AquaswaterObject, typeof(GameObject), true) as GameObject) { waterLevel = AquaswaterObject.transform.position.y; } if (AquaswaterObject != null) { waterLevel = AquaswaterObject.transform.position.y; } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(""); EditorGUILayout.LabelField("Water level: " + waterLevel.ToString()); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); } #if PW currentUsePlayWayWater = EditorGUILayout.Toggle("Enable PlayWay Water support", currentUsePlayWayWater); #endif EditorGUILayout.Space(); EditorGUILayout.LabelField("Read the Manual for more info."); //get some room! EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); } if (showGameobjectSetupOptions == true) { if (selectionGameObjects.Count > 0) { EditorGUILayout.LabelField("All Gameobjects below will get the same settings!"); SelectedObject = selectionGameObjects[0]; for (int i = 0; i < selectionGameObjects.Count; i++) { selectionGameObjects[i] = EditorGUILayout.ObjectField("GameObject " + i.ToString() + ": ", selectionGameObjects[i], typeof(GameObject), true) as GameObject; } } else { EditorGUILayout.LabelField("Select a gameOject in the Hierarchy"); SelectedObject = null; } if (SelectedObject != null) { //Check if there is a mesh filter else report it to the user and clear the selection! if (SelectedObject.GetComponent <MeshFilter>() == true && SelectedObject.GetComponent <MeshFilter>() != null) { lastErrorLog = ""; if (didImport == false) { importSettingsFromSelectedGameObject(); OldSelectedObject = SelectedObject; didImport = true; } else if (OldSelectedObject != SelectedObject) { didImport = false; } } else { //So there is no Mesh filter on this object! //We can still use it we just got to use somthing else for volume... collider? if (SelectedObject.GetComponent <Collider>() == true) { lastErrorLog = "Can't find MeshFilter, using collider!"; if (didImport == false) { importSettingsFromSelectedGameObject(); OldSelectedObject = SelectedObject; didImport = true; } else if (OldSelectedObject != SelectedObject) { didImport = false; } } else { //Also no collider.... lastErrorLog = "There is no MeshFilter or Collider on this object!"; } } EditorGUILayout.Space(); if (ShowAdvancedInfo == true) { EditorGUILayout.LabelField("Gameobject settings:"); slicesPerAxis = EditorGUILayout.IntField("Slices Per Axis", slicesPerAxis); if (slicesPerAxis < 1) { slicesPerAxis = 1; } else if (slicesPerAxis > 8) { slicesPerAxis = 8; } isConcave = EditorGUILayout.Toggle("GameObject is concave", isConcave); // has its issues! voxelsLimit = EditorGUILayout.IntField("Voxels limit", voxelsLimit); if (slicesPerAxis < 1) { slicesPerAxis = 1; } else if (slicesPerAxis > 64) { slicesPerAxis = 64; } } else { selectedFloatingQuality = (FloatingQuality)EditorGUILayout.EnumPopup("Floating Quality:", selectedFloatingQuality); if (selectedFloatingQuality == FloatingQuality.ExtremeLow) { slicesPerAxis = 1; voxelsLimit = 2; } if (selectedFloatingQuality == FloatingQuality.Low) { slicesPerAxis = 2; voxelsLimit = 4; } if (selectedFloatingQuality == FloatingQuality.Medium) { slicesPerAxis = 4; voxelsLimit = 8; } if (selectedFloatingQuality == FloatingQuality.High) { slicesPerAxis = 6; voxelsLimit = 12; } if (selectedFloatingQuality == FloatingQuality.ExtremeHigh) { slicesPerAxis = 8; voxelsLimit = 16; } } if (ShowAdvancedInfo == true) { SelectedMaterialType = (MaterialTypes)EditorGUILayout.EnumPopup("Material type:", SelectedMaterialType); } else { //Back to basic solids only! SelectedMaterialType = MaterialTypes.Solid; } if (SelectedMaterialType == MaterialTypes.Solid) { selectedSolidsMaterial = (SolidsMaterialList)EditorGUILayout.EnumPopup("Solid Material:", selectedSolidsMaterial); } else if (SelectedMaterialType == MaterialTypes.Liquids) { selectedLiquidsMaterial = (LiquidsMaterialList)EditorGUILayout.EnumPopup("Liquid Material:", selectedLiquidsMaterial); } else { selectedGasesMaterial = (GasesMaterialList)EditorGUILayout.EnumPopup("Gas Material:", selectedGasesMaterial); } percentageSolid = EditorGUILayout.IntField("Percentage Solid:", percentageSolid); if (percentageSolid < 0) { percentageSolid = 0; } else if (percentageSolid > 100) { percentageSolid = 100; } EditorGUILayout.Space(); if (GUILayout.Button("Calculate test results")) { calculateResults(); //Update the results. } if (DidTest == true) { if (ShowAdvancedInfo) { testResultsString = "Test result of the object:" + System.Environment.NewLine + System.Environment.NewLine + "Calculated mass: " + CalculatedMass + System.Environment.NewLine + "Calculated volume: " + CalculatedVolume + System.Environment.NewLine + "Calculated density: " + CalculatedDensity + System.Environment.NewLine + "Float in water: " + ((CalculatedWillFloatInWater == true) ? "Yes" : "No").ToString() + System.Environment.NewLine + "Float in Air: " + ((CalculatedWillFloatInAir == true) ? "Yes" : "No").ToString(); } else { //Will it float or not?! testResultsString = "Test result of the object:" + System.Environment.NewLine + System.Environment.NewLine + "Float in water: " + ((CalculatedWillFloatInWater == true) ? "Yes" : "No").ToString() + System.Environment.NewLine + "Float in Air: " + ((CalculatedWillFloatInAir == true) ? "Yes" : "No").ToString(); } } else { testResultsString = "No test results yet!"; } EditorGUILayout.HelpBox(testResultsString, MessageType.Info, true); //Button if (SelectedObject != null) { if (SelectedObject.GetComponent <RealisticBuoyancy>()) { if (GUILayout.Button("Update gameobject script")) { if (selectionGameObjects != null && selectionGameObjects.Count > 0) { foreach (var Selectedgameobject in selectionGameObjects) { createObjectScript(Selectedgameobject); } } else { createObjectScript(SelectedObject); // Update the script on the selected object. } } } else { if (GUILayout.Button("Create gameobject script")) { if (selectionGameObjects != null && selectionGameObjects.Count > 0) { foreach (var Selectedgameobject in selectionGameObjects) { createObjectScript(Selectedgameobject); } } else { createObjectScript(SelectedObject); // Update the script on the selected object. } } } } else //double check to make sure there is indeed a gamobject selected! { if (GUILayout.Button("First select a gameobject.")) { //Still show the button but its does nothing :P } } } EditorGUILayout.Space(); if (SelectedObject != null) { if (ScriptSavedAfterTest == true) { stateInfo = "Changes have been saved!"; } else { stateInfo = "Changes have NOT been saved!"; } EditorGUILayout.HelpBox(stateInfo, MessageType.Info, true); } } EditorGUILayout.EndScrollView(); EditorGUILayout.EndHorizontal(); } }