Files
2026-06-04 11:42:34 +02:00

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;
}
}