10using System.Collections.Generic;
21 [LeapGraphicTag(
"Baked")]
25 public const string DEFAULT_SHADER =
"LeapMotion/GraphicRenderer/Unlit/Baked";
27 #region INSPECTOR FIELDS
29 #pragma warning disable 0649
30 [Tooltip(
"What type of graphic motion should be supported by this renderer? Currently there are only two modes, None, and Translation.")]
35 [Tooltip(
"Should the baked renderer create an actual game object and attach a mesh renderer to it in order to display the graphics?")]
38 private bool _createMeshRenderers;
39 #pragma warning restore 0649
43 #region PRIVATE VARIABLES
45 [SerializeField, HideInInspector]
46 private List<MeshRendererContainer> _renderers =
new List<MeshRendererContainer>();
50 private List<Vector4> _rect_graphicPositions =
new List<Vector4>();
54 private List<Vector4> _curved_graphicParameters =
new List<Vector4>();
57 private Matrix4x4 _translation_graphicVertToMeshVert;
58 private Matrix4x4 _noMotion_graphicVertToLocalVert;
74 return SupportInfo.
Error(
"Baked Renderer does not support " + space.GetType().Name);
79 base.OnEnableRenderer();
81 foreach (var
renderer in _renderers) {
88 base.OnUpdateRenderer();
93 _rect_graphicPositions.Clear();
96 if (graphic.isActiveAndEnabled) {
97 localSpace =
renderer.transform.InverseTransformPoint(graphic.transform.position);
99 localSpace = Vector3.one *
float.NaN;
102 _rect_graphicPositions.Add(localSpace);
107 _material.SetVectorArraySafe(RECT_POSITIONS, _rect_graphicPositions);
113 _curved_graphicParameters.Clear();
116 Vector4 vectorRepresentation;
117 if (graphic.isActiveAndEnabled) {
118 vectorRepresentation = t.GetVectorRepresentation(graphic.transform);
120 vectorRepresentation = Vector4.one *
float.NaN;
123 _curved_graphicParameters.Add(vectorRepresentation);
128 _material.SetFloat(SpaceProperties.RADIAL_SPACE_RADIUS, radialSpace.radius);
129 _material.SetVectorArraySafe(CURVED_PARAMETERS, _curved_graphicParameters);
134 if (!_createMeshRenderers) {
145 public override void OnEnableRendererEditor() {
146 base.OnEnableRendererEditor();
151 public override void OnDisableRendererEditor() {
152 base.OnDisableRendererEditor();
154 foreach (var
renderer in _renderers) {
160 public override void OnUpdateRendererEditor() {
161 base.OnUpdateRendererEditor();
163 if (_renderers ==
null) {
164 _renderers =
new List<MeshRendererContainer>();
167 if (_createMeshRenderers) {
168 for (
int i = _renderers.Count; i-- != 0;) {
169 if (_renderers[i].obj ==
null) {
170 _renderers.RemoveAt(i);
175 _renderers.RemoveLast().Destroy();
179 _renderers.Add(
new MeshRendererContainer(
renderer.transform));
186 while (_renderers.Count > 0) {
187 _renderers.RemoveLast().Destroy();
198 base.prepareMaterial();
200 switch (_motionType) {
208 _material.EnableKeyword(SpaceProperties.CYLINDRICAL_FEATURE);
210 _material.EnableKeyword(SpaceProperties.SPHERICAL_FEATURE);
223 switch (_motionType) {
226 _noMotion_graphicVertToLocalVert =
renderer.transform.worldToLocalMatrix *
230 _translation_graphicVertToMeshVert = Matrix4x4.TRS(-
renderer.transform.InverseTransformPoint(
_generation.
graphic.transform.position),
233 renderer.transform.worldToLocalMatrix *
238 throw new NotImplementedException();
241 base.buildTopology();
245 base.postProcessMesh();
249 _generation.
mesh.bounds =
new Bounds(Vector3.zero, Vector3.one * 100000);
257 return base.doesRequireVertInfo();
261 switch (_motionType) {
263 var localVert = _noMotion_graphicVertToLocalVert.MultiplyPoint3x4(vertex);
266 return _translation_graphicVertToMeshVert.MultiplyPoint3x4(vertex);
269 throw new NotImplementedException();
274 out Vector3 meshVert,
275 out Vector3 meshNormal) {
276 switch (_motionType) {
278 var localVert = _noMotion_graphicVertToLocalVert.MultiplyPoint3x4(vertex);
279 var localNormal = _noMotion_graphicVertToLocalVert.MultiplyVector(normal);
281 meshVert = matrix.MultiplyPoint3x4(Vector3.zero);
282 meshNormal = matrix.MultiplyVector(localNormal);
285 meshVert = _translation_graphicVertToMeshVert.MultiplyPoint3x4(vertex);
286 meshNormal = _translation_graphicVertToMeshVert.MultiplyVector(normal);
290 throw new NotImplementedException();
300 obj =
new GameObject(
"Graphic Renderer");
301 obj.transform.SetParent(root);
303 Undo.RegisterCreatedObjectUndo(
obj,
"Created graphic renderer");
312 if (!Application.isPlaying) {
313 Undo.DestroyObjectImmediate(
obj);
321 public void MakeValid(Transform root,
int index, Mesh mesh, Material
material, MaterialPropertyBlock block) {
322 obj.transform.SetParent(root);
323 obj.transform.SetSiblingIndex(index);
326 obj.transform.localPosition = Vector3.zero;
327 obj.transform.localRotation = Quaternion.identity;
328 obj.transform.localScale = Vector3.one;
331 filter = InternalUtility.AddComponent<MeshFilter>(
obj);
336 renderer = InternalUtility.AddComponent<MeshRenderer>(
obj);
344 renderer.SetPropertyBlock(
new MaterialPropertyBlock());
void MakeValid(Transform root, int index, Mesh mesh, Material material, MaterialPropertyBlock block)
MeshRendererContainer(Transform root)
void ClearPropertyBlock()
override void buildTopology()
override void OnUpdateRenderer()
Called from LateUpdate during runtime. Use this to update the renderer using any changes made to duri...
override Vector3 graphicVertToMeshVert(Vector3 vertex)
override bool doesRequireVertInfo()
const string DEFAULT_SHADER
override void OnEnableRenderer()
Called when the renderer is enabled at runtime.
override void graphicVertNormalToMeshVertNormal(Vector3 vertex, Vector3 normal, out Vector3 meshVert, out Vector3 meshNormal)
override void prepareMaterial()
override void postProcessMesh()
override SupportInfo GetSpaceSupportInfo(LeapSpace space)
List< LeapGraphic > graphics
Returns the list of graphics attached to this group. This getter returns a regular mutable list for s...
ITransformer transformer
A utility getter that returns a transformer for this graphic. Even if the space anchor for this graph...
const string PROPERTY_PREFIX
LeapSpace space
Returns the leap space that is currently attached to this graphic renderer.
const string FEATURE_MOVEMENT_TRANSLATION
Mesh mesh
Returns the mesh that represents this graphic. It can have any topology, any number of uv channels,...
MaterialPropertyBlock _spriteTextureBlock
virtual void finishAndAddMesh(bool deleteEmptyMeshes=true)
void drawMesh(Mesh mesh, Matrix4x4 transform)
GenerationState _generation
virtual void beginMesh(Mesh mesh=null)
LeapGraphicGroup group
Gets the group this rendering method is attached to.
LeapGraphicRenderer renderer
Gets the renderer this rendering method is attached to.
LeapMeshGraphicBase graphic
The support info class provides a very basic way to notify that something is fully supported,...
static SupportInfo Error(string message)
Helper getter to return a struct that signifies no support with an error message.
static SupportInfo FullSupport()
Helper getter to return a struct that signifies full support.
A utility struct for ease of use when you want to wrap a piece of code in a Profiler....