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);
}
///
/// Turn all the debug sprite renderers on/off
///
void SetSpriteRenderersEnabled(bool enabled)
{
foreach(GameObject gameObject in m_BlobObjects)
{
JellySprite jellySprite = gameObject.GetComponent();
if(jellySprite)
{
foreach(JellySprite.ReferencePoint referencePoint in jellySprite.ReferencePoints)
{
GameObject refPointObject = referencePoint.GameObject;
if(refPointObject)
{
MeshRenderer meshRenderer = refPointObject.GetComponent();
if(meshRenderer)
{
meshRenderer.enabled = enabled;
}
}
}
}
}
}
///
/// Draws the GUI
///
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();
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();
MeshFilter meshFilter = referencePointObject.AddComponent();
Mesh newMesh = new Mesh();
newMesh.name = "JellySprite Debug Mesh";
List meshVertices = new List();
List meshTriangles = new List();
List meshUVs = new List();
List meshColors = new List();
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);
}
}
}
}