nightward/Assets/ThirdParty/JellySprites/Demo/Scripts/JellySpriteDemoManager.cs

147 lines
3.9 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class JellySpriteDemoManager : MonoBehaviour
{
bool m_DrawPhysicsBodies = false;
GameObject[] m_BlobObjects;
bool m_DebugRenderersCreated;
public Material m_DebugRenderMaterial;
// Use this for initialization
void Start ()
{
m_BlobObjects = GameObject.FindGameObjectsWithTag("Blob");
Physics.gravity = new Vector3(0, -50, 0);
}
/// <summary>
/// Turn all the debug sprite renderers on/off
/// </summary>
void SetSpriteRenderersEnabled(bool enabled)
{
foreach(GameObject gameObject in m_BlobObjects)
{
JellySprite jellySprite = gameObject.GetComponent<JellySprite>();
if(jellySprite)
{
foreach(JellySprite.ReferencePoint referencePoint in jellySprite.ReferencePoints)
{
GameObject refPointObject = referencePoint.GameObject;
if(refPointObject)
{
MeshRenderer meshRenderer = refPointObject.GetComponent<MeshRenderer>();
if(meshRenderer)
{
meshRenderer.enabled = enabled;
}
}
}
}
}
}
/// <summary>
/// Draws the GUI
/// </summary>
void OnGUI ()
{
if(m_DrawPhysicsBodies)
{
if(GUI.Button(new Rect(20,20,200,20), "Render Physics Bodies: On"))
{
m_DrawPhysicsBodies = !m_DrawPhysicsBodies;
SetSpriteRenderersEnabled(false);
}
}
else
{
if(GUI.Button(new Rect(20,20,200,20), "Render Physics Bodies: Off"))
{
m_DrawPhysicsBodies = !m_DrawPhysicsBodies;
if(!m_DebugRenderersCreated)
{
foreach(GameObject gameObject in m_BlobObjects)
{
JellySprite jellySprite = gameObject.GetComponent<JellySprite>();
if(jellySprite)
{
// Go through and create a simple circle mesh for each body
foreach(JellySprite.ReferencePoint referencePoint in jellySprite.ReferencePoints)
{
if(referencePoint.InitialOffset == Vector3.zero)
{
continue;
}
GameObject referencePointObject = referencePoint.GameObject;
if(referencePointObject)
{
MeshRenderer meshRenderer = referencePointObject.AddComponent<MeshRenderer>();
MeshFilter meshFilter = referencePointObject.AddComponent<MeshFilter>();
Mesh newMesh = new Mesh();
newMesh.name = "JellySprite Debug Mesh";
List<Vector3> meshVertices = new List<Vector3>();
List<int> meshTriangles = new List<int>();
List<Vector2> meshUVs = new List<Vector2>();
List<Color> meshColors = new List<Color>();
meshVertices.Add(Vector3.zero);
meshUVs.Add(Vector2.zero);
meshColors.Add (Color.white);
for(int loop = 0; loop <= 32; loop++)
{
float angle = ((Mathf.PI * 2.0f)/32.0f) * loop;
float x = Mathf.Cos(angle) * referencePoint.Radius;
float y = Mathf.Sin(angle) * referencePoint.Radius;
meshVertices.Add(new Vector3(x, y, 0.0f));
meshUVs.Add(Vector2.one);
meshColors.Add (Color.white);
}
for(int loop = 1; loop <= 32; loop++)
{
meshTriangles.Add(0);
meshTriangles.Add(loop);
meshTriangles.Add(loop -1);
}
meshTriangles.Add(0);
meshTriangles.Add(1);
meshTriangles.Add(32);
newMesh.Clear();
newMesh.vertices = meshVertices.ToArray();
newMesh.uv = meshUVs.ToArray();
newMesh.colors = meshColors.ToArray();
newMesh.triangles = meshTriangles.ToArray();
newMesh.RecalculateBounds();
newMesh.RecalculateNormals();
meshFilter.mesh = newMesh;
meshRenderer.sharedMaterial = m_DebugRenderMaterial;
meshRenderer.sortingOrder = 500;
}
}
}
}
m_DebugRenderersCreated = true;
}
SetSpriteRenderersEnabled(true);
}
}
}
}