New Version 1.6

New 125 balls & powerups.
Improved graphics.
This commit is contained in:
SkunkStudios 2025-05-07 06:18:40 +07:00
parent b35433ae45
commit 71779ef7ac
9413 changed files with 193360 additions and 264803 deletions

View file

@ -0,0 +1,103 @@
using UnityEngine;
using System;
using UnityEditor;
[CustomEditor(typeof(GerstnerDisplace))]
public class GerstnerDisplaceEditor : Editor
{
private SerializedObject serObj;
public void OnEnable ()
{
serObj = new SerializedObject (target);
}
public override void OnInspectorGUI ()
{
serObj.Update();
GameObject go = ((GerstnerDisplace)serObj.targetObject).gameObject;
WaterBase wb = (WaterBase)go.GetComponent(typeof(WaterBase));
Material sharedWaterMaterial = wb.sharedMaterial;
GUILayout.Label ("Animates vertices using up 4 generated waves", EditorStyles.miniBoldLabel);
if(sharedWaterMaterial)
{
Vector4 amplitude = WaterEditorUtility.GetMaterialVector("_GAmplitude", sharedWaterMaterial);
Vector4 frequency = WaterEditorUtility.GetMaterialVector("_GFrequency", sharedWaterMaterial);
Vector4 steepness = WaterEditorUtility.GetMaterialVector("_GSteepness", sharedWaterMaterial);
Vector4 speed = WaterEditorUtility.GetMaterialVector("_GSpeed", sharedWaterMaterial);
Vector4 directionAB = WaterEditorUtility.GetMaterialVector("_GDirectionAB", sharedWaterMaterial);
Vector4 directionCD = WaterEditorUtility.GetMaterialVector("_GDirectionCD", sharedWaterMaterial);
amplitude = EditorGUILayout.Vector4Field("Amplitude (Height offset)", amplitude);
frequency = EditorGUILayout.Vector4Field("Frequency (Tiling)", frequency);
steepness = EditorGUILayout.Vector4Field("Steepness", steepness);
speed = EditorGUILayout.Vector4Field("Speed", speed);
directionAB = EditorGUILayout.Vector4Field("Direction scale (Wave 1 (X,Y) and 2 (Z,W))", directionAB);
directionCD = EditorGUILayout.Vector4Field("Direction scale (Wave 3 (X,Y) and 4 (Z,W))", directionCD);
if (GUI.changed) {
WaterEditorUtility.SetMaterialVector("_GAmplitude", amplitude, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_GFrequency", frequency, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_GSteepness", steepness, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_GSpeed", speed, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_GDirectionAB", directionAB, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_GDirectionCD", directionCD, sharedWaterMaterial);
}
/*
Vector4 animationTiling = WaterEditorUtility.GetMaterialVector("_AnimationTiling", sharedWaterMaterial);
Vector4 animationDirection = WaterEditorUtility.GetMaterialVector("_AnimationDirection", sharedWaterMaterial);
float firstTilingU = animationTiling.x*100.0F;
float firstTilingV = animationTiling.y*100.0F;
float firstDirectionU = animationDirection.x;
float firstDirectionV = animationDirection.y;
float secondTilingU = animationTiling.z*100.0F;
float secondTilingV = animationTiling.w*100.0F;
float secondDirectionU = animationDirection.z;
float secondDirectionV = animationDirection.w;
EditorGUILayout.BeginHorizontal ();
firstTilingU = EditorGUILayout.FloatField("First Tiling U", firstTilingU);
firstTilingV = EditorGUILayout.FloatField("First Tiling V", firstTilingV);
EditorGUILayout.EndHorizontal ();
EditorGUILayout.BeginHorizontal ();
secondTilingU = EditorGUILayout.FloatField("Second Tiling U", secondTilingU);
secondTilingV = EditorGUILayout.FloatField("Second Tiling V", secondTilingV);
EditorGUILayout.EndHorizontal ();
EditorGUILayout.BeginHorizontal ();
firstDirectionU = EditorGUILayout.FloatField("1st Animation U", firstDirectionU);
firstDirectionV = EditorGUILayout.FloatField("1st Animation V", firstDirectionV);
EditorGUILayout.EndHorizontal ();
EditorGUILayout.BeginHorizontal ();
secondDirectionU = EditorGUILayout.FloatField("2nd Animation U", secondDirectionU);
secondDirectionV = EditorGUILayout.FloatField("2nd Animation V", secondDirectionV);
EditorGUILayout.EndHorizontal ();
animationDirection = new Vector4(firstDirectionU,firstDirectionV, secondDirectionU,secondDirectionV);
animationTiling = new Vector4(firstTilingU/100.0F,firstTilingV/100.0F, secondTilingU/100.0F,secondTilingV/100.0F);
WaterEditorUtility.SetMaterialVector("_AnimationTiling", animationTiling, sharedWaterMaterial);
WaterEditorUtility.SetMaterialVector("_AnimationDirection", animationDirection, sharedWaterMaterial);
EditorGUILayout.Separator ();
GUILayout.Label ("Displacement Strength", EditorStyles.boldLabel);
float heightDisplacement = WaterEditorUtility.GetMaterialFloat("_HeightDisplacement", sharedWaterMaterial);
heightDisplacement = EditorGUILayout.Slider("Height", heightDisplacement, 0.0F, 5.0F);
WaterEditorUtility.SetMaterialFloat("_HeightDisplacement", heightDisplacement, sharedWaterMaterial);
*/
}
serObj.ApplyModifiedProperties();
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 50be9983f0c75cf4fa62c990a9d4b242
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,60 @@
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(PlanarReflection))]
public class PlanarReflectionEditor : Editor
{
private SerializedObject serObj;
//private SerializedProperty wavesFrequency;
// reflection
private SerializedProperty reflectionMask;
private SerializedProperty reflectSkybox;
private SerializedProperty clearColor;
bool showKidsWithReflectionHint = false;
public void OnEnable () {
serObj = new SerializedObject (target);
reflectionMask = serObj.FindProperty("reflectionMask");
reflectSkybox = serObj.FindProperty("reflectSkybox");
clearColor = serObj.FindProperty("clearColor");
}
public override void OnInspectorGUI ()
{
GUILayout.Label ("Render planar reflections and use GrabPass for refractions", EditorStyles.miniBoldLabel);
if(!SystemInfo.supportsRenderTextures)
EditorGUILayout.HelpBox("Realtime reflections not supported", MessageType.Warning);
serObj.Update();
EditorGUILayout.PropertyField(reflectionMask, new GUIContent("Reflection layers"));
EditorGUILayout.PropertyField(reflectSkybox, new GUIContent("Use skybox"));
EditorGUILayout.PropertyField(clearColor, new GUIContent("Clear color"));
showKidsWithReflectionHint = EditorGUILayout.BeginToggleGroup("Show all tiles", showKidsWithReflectionHint);
if (showKidsWithReflectionHint) {
int i = 0;
foreach(Transform t in ((PlanarReflection)target).transform) {
if (t.GetComponent<WaterTile>()) {
if(i%2==0)
EditorGUILayout.BeginHorizontal();
EditorGUILayout.ObjectField(t, typeof(Transform), true);
if(i%2==1)
EditorGUILayout.EndHorizontal();
i = (i+1)%2;
}
}
if(i>0)
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndToggleGroup();
serObj.ApplyModifiedProperties();
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4cc71abf24371b247af3a4b9a5efb7d5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,47 @@
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(SpecularLighting))]
public class SpecularLightingEditor : Editor
{
private SerializedObject serObj;
private SerializedProperty specularLight;
public void OnEnable () {
serObj = new SerializedObject (target);
specularLight = serObj.FindProperty("specularLight");
}
public override void OnInspectorGUI ()
{
serObj.Update();
GameObject go = ((SpecularLighting)serObj.targetObject).gameObject;
WaterBase wb = (WaterBase)go.GetComponent(typeof(WaterBase));
if(!wb.sharedMaterial)
return;
if(wb.sharedMaterial.HasProperty("_WorldLightDir")) {
GUILayout.Label ("Transform casting specular highlights", EditorStyles.miniBoldLabel);
EditorGUILayout.PropertyField(specularLight, new GUIContent("Specular light"));
if(wb.sharedMaterial.HasProperty("_SpecularColor"))
WaterEditorUtility.SetMaterialColor(
"_SpecularColor",
EditorGUILayout.ColorField("Specular",
WaterEditorUtility.GetMaterialColor("_SpecularColor", wb.sharedMaterial)),
wb.sharedMaterial);
if(wb.sharedMaterial.HasProperty("_Shininess"))
WaterEditorUtility.SetMaterialFloat("_Shininess", EditorGUILayout.Slider(
"Specular power",
WaterEditorUtility.GetMaterialFloat("_Shininess", wb.sharedMaterial),
0.0F, 500.0F), wb.sharedMaterial);
}
else
GUILayout.Label ("The shader doesn't have the needed _WorldLightDir property.", EditorStyles.miniBoldLabel);
serObj.ApplyModifiedProperties();
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3f4bc38f8ed704e42912e22f0b895429
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,188 @@
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(WaterBase))]
public class WaterBaseEditor : Editor
{
public GameObject oceanBase;
private WaterBase waterBase;
private Material oceanMaterial = null;
private SerializedObject serObj;
private SerializedProperty sharedMaterial;
public SerializedProperty waterQuality;
public SerializedProperty edgeBlend;
public void OnEnable ()
{
serObj = new SerializedObject (target);
sharedMaterial = serObj.FindProperty("sharedMaterial");
waterQuality = serObj.FindProperty("waterQuality");
edgeBlend = serObj.FindProperty("edgeBlend");
}
public override void OnInspectorGUI ()
{
serObj.Update();
waterBase = (WaterBase)serObj.targetObject;
oceanBase = ((WaterBase)serObj.targetObject).gameObject;
if(!oceanBase)
return;
GUILayout.Label ("This script helps adjusting water material properties", EditorStyles.miniBoldLabel);
EditorGUILayout.PropertyField(sharedMaterial, new GUIContent("Material"));
oceanMaterial = (Material)sharedMaterial.objectReferenceValue;
if (!oceanMaterial) {
sharedMaterial.objectReferenceValue = (Object)WaterEditorUtility.LocateValidWaterMaterial(oceanBase.transform);
serObj.ApplyModifiedProperties();
oceanMaterial = (Material)sharedMaterial.objectReferenceValue;
if (!oceanMaterial)
return;
}
EditorGUILayout.Separator ();
GUILayout.Label ("Overall Quality", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(waterQuality, new GUIContent("Quality"));
EditorGUILayout.PropertyField(edgeBlend, new GUIContent("Edge blend?"));
if(waterQuality.intValue > (int)WaterQuality.Low && !SystemInfo.supportsRenderTextures)
EditorGUILayout.HelpBox("Water features not supported", MessageType.Warning);
if(edgeBlend.boolValue && !SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.Depth))
EditorGUILayout.HelpBox("Edge blend not supported", MessageType.Warning);
EditorGUILayout.Separator ();
bool hasShore = oceanMaterial.HasProperty("_ShoreTex");
GUILayout.Label ("Main Colors", EditorStyles.boldLabel);
GUILayout.Label ("Alpha values define blending with realtime textures", EditorStyles.miniBoldLabel);
WaterEditorUtility.SetMaterialColor("_BaseColor", EditorGUILayout.ColorField("Refraction", WaterEditorUtility.GetMaterialColor("_BaseColor", oceanMaterial)), oceanMaterial);
WaterEditorUtility.SetMaterialColor("_ReflectionColor", EditorGUILayout.ColorField("Reflection", WaterEditorUtility.GetMaterialColor("_ReflectionColor", oceanMaterial)), oceanMaterial);
EditorGUILayout.Separator ();
GUILayout.Label ("Main Textures", EditorStyles.boldLabel);
GUILayout.Label ("Used for small waves (bumps), foam and white caps", EditorStyles.miniBoldLabel);
WaterEditorUtility.SetMaterialTexture("_BumpMap",(Texture)EditorGUILayout.ObjectField("Normals", WaterEditorUtility.GetMaterialTexture("_BumpMap", waterBase.sharedMaterial), typeof(Texture), false), waterBase.sharedMaterial);
if (hasShore)
WaterEditorUtility.SetMaterialTexture("_ShoreTex", (Texture)EditorGUILayout.ObjectField("Shore & Foam", WaterEditorUtility.GetMaterialTexture("_ShoreTex", waterBase.sharedMaterial), typeof(Texture), false), waterBase.sharedMaterial);
Vector4 animationTiling;
Vector4 animationDirection;
Vector2 firstTiling;
Vector2 secondTiling;
Vector2 firstDirection;
Vector2 secondDirection;
animationTiling = WaterEditorUtility.GetMaterialVector("_BumpTiling", oceanMaterial);
animationDirection = WaterEditorUtility.GetMaterialVector("_BumpDirection", oceanMaterial);
firstTiling = new Vector2(animationTiling.x*100.0F,animationTiling.y*100.0F);
secondTiling = new Vector2(animationTiling.z*100.0F,animationTiling.w*100.0F);
firstTiling = EditorGUILayout.Vector2Field("Tiling 1", firstTiling);
secondTiling = EditorGUILayout.Vector2Field("Tiling 2", secondTiling);
//firstTiling.x = EditorGUILayout.FloatField("1st Tiling U", firstTiling.x);
//firstTiling.y = EditorGUILayout.FloatField("1st Tiling V", firstTiling.y);
//secondTiling.x = EditorGUILayout.FloatField("2nd Tiling U", secondTiling.x);
//secondTiling.y = EditorGUILayout.FloatField("2nd Tiling V", secondTiling.y);
firstDirection = new Vector2(animationDirection.x,animationDirection.y);
secondDirection = new Vector2(animationDirection.z,animationDirection.w);
//firstDirection.x = EditorGUILayout.FloatField("1st Animation U", firstDirection.x);
//firstDirection.y = EditorGUILayout.FloatField("1st Animation V", firstDirection.y);
//secondDirection.x = EditorGUILayout.FloatField("2nd Animation U", secondDirection.x);
//secondDirection.y = EditorGUILayout.FloatField("2nd Animation V", secondDirection.y);
firstDirection = EditorGUILayout.Vector2Field("Direction 1", firstDirection);
secondDirection = EditorGUILayout.Vector2Field("Direction 2", secondDirection);
animationTiling = new Vector4(firstTiling.x/100.0F,firstTiling.y/100.0F, secondTiling.x/100.0F,secondTiling.y/100.0F);
animationDirection = new Vector4(firstDirection.x,firstDirection.y, secondDirection.x,secondDirection.y);
WaterEditorUtility.SetMaterialVector("_BumpTiling", animationTiling, oceanMaterial);
WaterEditorUtility.SetMaterialVector("_BumpDirection", animationDirection, oceanMaterial);
Vector4 displacementParameter = WaterEditorUtility.GetMaterialVector("_DistortParams", oceanMaterial);
Vector4 fade = WaterEditorUtility.GetMaterialVector("_InvFadeParemeter", oceanMaterial);
EditorGUILayout.Separator ();
GUILayout.Label ("Normals", EditorStyles.boldLabel);
GUILayout.Label ("Displacement for fresnel, specular and reflection/refraction", EditorStyles.miniBoldLabel);
float gerstnerNormalIntensity = WaterEditorUtility.GetMaterialFloat("_GerstnerIntensity", oceanMaterial);
gerstnerNormalIntensity = EditorGUILayout.Slider("Per Vertex", gerstnerNormalIntensity, -2.5F, 2.5F);
WaterEditorUtility.SetMaterialFloat("_GerstnerIntensity", gerstnerNormalIntensity, oceanMaterial);
displacementParameter.x = EditorGUILayout.Slider("Per Pixel", displacementParameter.x, -4.0F, 4.0F);
displacementParameter.y = EditorGUILayout.Slider("Distortion", displacementParameter.y, -0.5F, 0.5F);
// fade.z = EditorGUILayout.Slider("Distance fade", fade.z, 0.0f, 0.5f);
EditorGUILayout.Separator ();
GUILayout.Label ("Fresnel", EditorStyles.boldLabel);
GUILayout.Label ("Defines reflection to refraction relation", EditorStyles.miniBoldLabel);
if(!oceanMaterial.HasProperty("_Fresnel")) {
if(oceanMaterial.HasProperty("_FresnelScale")) {
float fresnelScale = EditorGUILayout.Slider("Intensity", WaterEditorUtility.GetMaterialFloat("_FresnelScale", oceanMaterial), 0.1F, 4.0F);
WaterEditorUtility.SetMaterialFloat("_FresnelScale", fresnelScale, oceanMaterial);
}
displacementParameter.z = EditorGUILayout.Slider("Power", displacementParameter.z, 0.1F, 10.0F);
displacementParameter.w = EditorGUILayout.Slider("Bias", displacementParameter.w, -3.0F, 3.0F);
}
else
{
Texture fresnelTex = (Texture)EditorGUILayout.ObjectField(
"Ramp",
(Texture)WaterEditorUtility.GetMaterialTexture("_Fresnel",
oceanMaterial),
typeof(Texture),
false);
WaterEditorUtility.SetMaterialTexture("_Fresnel", fresnelTex, oceanMaterial);
}
EditorGUILayout.Separator ();
WaterEditorUtility.SetMaterialVector("_DistortParams", displacementParameter, oceanMaterial);
if (edgeBlend.boolValue)
{
GUILayout.Label ("Fading", EditorStyles.boldLabel);
fade.x = EditorGUILayout.Slider("Edge fade", fade.x, 0.001f, 3.0f);
if(hasShore)
fade.y = EditorGUILayout.Slider("Shore fade", fade.y, 0.001f, 3.0f);
fade.w = EditorGUILayout.Slider("Extinction fade", fade.w, 0.0f, 2.5f);
WaterEditorUtility.SetMaterialVector("_InvFadeParemeter", fade, oceanMaterial);
}
EditorGUILayout.Separator ();
if(oceanMaterial.HasProperty("_Foam")) {
GUILayout.Label ("Foam", EditorStyles.boldLabel);
Vector4 foam = WaterEditorUtility.GetMaterialVector("_Foam", oceanMaterial);
foam.x = EditorGUILayout.Slider("Intensity", foam.x, 0.0F, 1.0F);
foam.y = EditorGUILayout.Slider("Cutoff", foam.y, 0.0F, 1.0F);
WaterEditorUtility.SetMaterialVector("_Foam", foam, oceanMaterial);
}
serObj.ApplyModifiedProperties();
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: de1ac391993a86b4b8eb3d9e90340154
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,75 @@
using UnityEngine;
using UnityEditor;
class WaterEditorUtility
{
// helper functions to retrieve & set material values
public static float GetMaterialFloat(System.String name, Material mat) {
return mat.GetFloat(name);
}
public static void SetMaterialFloat(System.String name, float f, Material mat) {
mat.SetFloat(name, f);
}
public static Color GetMaterialColor(System.String name, Material mat) {
return mat.GetColor(name);
}
public static void SetMaterialColor(System.String name, Color color, Material mat) {
mat.SetColor(name, color);
}
public static Vector4 GetMaterialVector(System.String name, Material mat) {
return mat.GetVector(name);
}
public static void SetMaterialVector(System.String name, Vector4 vector, Material mat) {
mat.SetVector(name, vector);
}
public static Texture GetMaterialTexture(System.String theName, Material mat) {
return mat.GetTexture(theName);
}
public static void SetMaterialTexture(System.String theName, Texture parameter, Material mat) {
mat.SetTexture(theName, parameter);
}
public static Material LocateValidWaterMaterial(Transform parent)
{
if(parent.GetComponent<Renderer>() && parent.GetComponent<Renderer>().sharedMaterial)
return parent.GetComponent<Renderer>().sharedMaterial;
foreach( Transform t in parent)
{
if(t.GetComponent<Renderer>() && t.GetComponent<Renderer>().sharedMaterial)
return t.GetComponent<Renderer>().sharedMaterial;
}
return null;
}
public static void CurveGui (System.String name, SerializedObject serObj, Color color)
{
AnimationCurve curve = new AnimationCurve(new Keyframe(0, 0.0f, 1.0f, 1.0f), new Keyframe(1, 1.0f, 1.0f, 1.0f));
curve = EditorGUILayout.CurveField(new GUIContent (name), curve, color, new Rect (0.0f,0.0f,1.0f,1.0f));
//if (GUI.changed) {
// AnimationCurveChanged(((WaterBase)serObj.targetObject).sharedMaterial, curve);
//((WaterBase)serObj.targetObject).gameObject.SendMessage ("AnimationCurveChanged", SendMessageOptions.DontRequireReceiver);
//}
}
/*
public static void AnimationCurveChanged(Material sharedMaterial, AnimationCurve fresnelCurve)
{
Debug.Log("AnimationCurveChanged");
Texture2D fresnel = (Texture2D)sharedMaterial.GetTexture("_Fresnel");
if(!fresnel)
fresnel = new Texture2D(256,1);
for (int i = 0; i < 256; i++)
{
float val = Mathf.Clamp01(fresnelCurve.Evaluate((float)i)/255.0f);
Debug.Log(""+(((float)i)/255.0f) +": "+val);
fresnel.SetPixel(i, 0, new Color(val,val,val,val));
}
fresnel.Apply();
sharedMaterial.SetTexture("_Fresnel", fresnel);
} */
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 06f74e3cfe2c3ea46a62d707c9b7a8cc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: