134 lines
3.6 KiB
C#
134 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace ProBuilder2.Common
|
|
{
|
|
// Token: 0x0200002C RID: 44
|
|
[ExecuteInEditMode]
|
|
[AddComponentMenu("")]
|
|
public class pb_LineRenderer : pb_MonoBehaviourSingleton<pb_LineRenderer>
|
|
{
|
|
// Token: 0x060000EE RID: 238 RVA: 0x00011558 File Offset: 0x0000F958
|
|
private static Mesh MeshConstructor()
|
|
{
|
|
return new Mesh
|
|
{
|
|
hideFlags = pb_Constant.EDITOR_OBJECT_HIDE_FLAGS,
|
|
name = "pb_LineRenderer::Mesh"
|
|
};
|
|
}
|
|
|
|
// Token: 0x060000EF RID: 239 RVA: 0x00011582 File Offset: 0x0000F982
|
|
public override void OnEnable()
|
|
{
|
|
base.OnEnable();
|
|
this.pool = new pb_ObjectPool<Mesh>(1, 8, new Func<Mesh>(pb_LineRenderer.MeshConstructor), null);
|
|
}
|
|
|
|
// Token: 0x060000F0 RID: 240 RVA: 0x000115B5 File Offset: 0x0000F9B5
|
|
private void OnDisable()
|
|
{
|
|
this.pool.Empty();
|
|
}
|
|
|
|
// Token: 0x060000F1 RID: 241 RVA: 0x000115C4 File Offset: 0x0000F9C4
|
|
public override void Awake()
|
|
{
|
|
base.Awake();
|
|
base.gameObject.hideFlags = HideFlags.HideAndDontSave;
|
|
this.mat = new Material(Shader.Find("ProBuilder/UnlitVertexColor"));
|
|
this.mat.name = "pb_LineRenderer_Material";
|
|
this.mat.SetColor("_Color", Color.white);
|
|
this.mat.hideFlags = pb_Constant.EDITOR_OBJECT_HIDE_FLAGS;
|
|
}
|
|
|
|
// Token: 0x060000F2 RID: 242 RVA: 0x00011630 File Offset: 0x0000FA30
|
|
private void OnDestroy()
|
|
{
|
|
foreach (Mesh mesh in this.gizmos)
|
|
{
|
|
if (mesh != null)
|
|
{
|
|
global::UnityEngine.Object.DestroyImmediate(mesh);
|
|
}
|
|
}
|
|
global::UnityEngine.Object.DestroyImmediate(this.mat);
|
|
}
|
|
|
|
// Token: 0x060000F3 RID: 243 RVA: 0x000116A4 File Offset: 0x0000FAA4
|
|
public void AddLineSegments(Vector3[] segments, Color[] colors)
|
|
{
|
|
if (this.pool == null)
|
|
{
|
|
this.pool = new pb_ObjectPool<Mesh>(1, 4, new Func<Mesh>(pb_LineRenderer.MeshConstructor), null);
|
|
}
|
|
Mesh mesh = this.pool.Get();
|
|
mesh.Clear();
|
|
mesh.name = "pb_LineRenderer::Mesh_" + mesh.GetInstanceID();
|
|
mesh.MarkDynamic();
|
|
int num = segments.Length;
|
|
int num2 = colors.Length;
|
|
mesh.vertices = segments;
|
|
int[] array = new int[num];
|
|
Color[] array2 = new Color[num];
|
|
int num3 = 0;
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
array[i] = i;
|
|
array2[i] = colors[num3 % num2];
|
|
if (i % 2 == 1)
|
|
{
|
|
num3++;
|
|
}
|
|
}
|
|
mesh.subMeshCount = 1;
|
|
mesh.SetIndices(array, MeshTopology.Lines, 0);
|
|
mesh.uv = new Vector2[mesh.vertexCount];
|
|
mesh.colors = array2;
|
|
mesh.hideFlags = pb_Constant.EDITOR_OBJECT_HIDE_FLAGS;
|
|
this.gizmos.Add(mesh);
|
|
}
|
|
|
|
// Token: 0x060000F4 RID: 244 RVA: 0x000117C4 File Offset: 0x0000FBC4
|
|
public void Clear()
|
|
{
|
|
for (int i = 0; i < this.gizmos.Count; i++)
|
|
{
|
|
this.pool.Put(this.gizmos[i]);
|
|
}
|
|
this.gizmos.Clear();
|
|
}
|
|
|
|
// Token: 0x060000F5 RID: 245 RVA: 0x00011810 File Offset: 0x0000FC10
|
|
private void OnRenderObject()
|
|
{
|
|
if (this.mat == null || (Camera.current.gameObject.hideFlags & this.SceneCameraHideFlags) != this.SceneCameraHideFlags || Camera.current.name != "SceneCamera")
|
|
{
|
|
return;
|
|
}
|
|
this.mat.SetPass(0);
|
|
int num = 0;
|
|
while (num < this.gizmos.Count && this.gizmos[num] != null)
|
|
{
|
|
Graphics.DrawMeshNow(this.gizmos[num], Vector3.zero, Quaternion.identity, 0);
|
|
num++;
|
|
}
|
|
}
|
|
|
|
// Token: 0x04000112 RID: 274
|
|
private HideFlags SceneCameraHideFlags = HideFlags.HideInHierarchy | HideFlags.DontSaveInEditor | HideFlags.NotEditable;
|
|
|
|
// Token: 0x04000113 RID: 275
|
|
private pb_ObjectPool<Mesh> pool;
|
|
|
|
// Token: 0x04000114 RID: 276
|
|
[HideInInspector]
|
|
public List<Mesh> gizmos = new List<Mesh>();
|
|
|
|
// Token: 0x04000115 RID: 277
|
|
[HideInInspector]
|
|
public Material mat;
|
|
}
|
|
}
|