﻿#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Linq;
using System.Collections;

/**
 * Despite the MonoBehaviour inheritance, this is an Editor-only script.
 */
[ExecuteInEditMode]
public class pg_SceneMeshRender : MonoBehaviour
{
	// HideFlags.DontSaveInEditor isn't exposed for whatever reason, so do the bit math on ints 
	// and just cast to HideFlags.
	// HideFlags.HideInHierarchy | HideFlags.DontSaveInEditor | HideFlags.NotEditable
	HideFlags SceneCameraHideFlags = (HideFlags) (1 | 4 | 8);

	public Mesh mesh;
	public Material material;

	void OnDestroy()
	{
		if(mesh) DestroyImmediate(mesh);
		if(material) DestroyImmediate(material);
	}

	void OnRenderObject()
	{
		// instead of relying on 'SceneCamera' string comparison, check if the hideflags match.
		// this could probably even just check for one bit match, since chances are that any 
		// game view camera isn't going to have hideflags set.
		if( (Camera.current.gameObject.hideFlags & SceneCameraHideFlags) != SceneCameraHideFlags || Camera.current.name != "SceneCamera" )
			return;

		if(material == null || mesh == null)
		{
			
			GameObject.DestroyImmediate(this.gameObject);
			// Debug.Log("NULL MESH || MATERIAL");
			return;
		}

		material.SetPass(0);
		Graphics.DrawMeshNow(mesh, Vector3.zero, Quaternion.identity, 0);
	}
}
#endif
