using System; using System.Collections.Generic; using UnityEngine; namespace ProBuilder2.Common { // Token: 0x0200002C RID: 44 [ExecuteInEditMode] [AddComponentMenu("")] public class pb_LineRenderer : pb_MonoBehaviourSingleton { // 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(1, 8, new Func(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(1, 4, new Func(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 pool; // Token: 0x04000114 RID: 276 [HideInInspector] public List gizmos = new List(); // Token: 0x04000115 RID: 277 [HideInInspector] public Material mat; } }