using System;
using System.Collections.Generic;
using UnityEngine;

// Token: 0x02000068 RID: 104
public class InteriorLights : MonoBehaviour
{
	// Token: 0x06000B6D RID: 2925 RVA: 0x000DEC34 File Offset: 0x000DCE34
	private void Start()
	{
		foreach (object obj in base.transform)
		{
			Transform transform = (Transform)obj;
			if (transform.gameObject.name.Contains("ompanion"))
			{
				this.companionPoints.Add(transform);
			}
		}
	}

	// Token: 0x06000B6E RID: 2926 RVA: 0x000DECAC File Offset: 0x000DCEAC
	public void LoadScene()
	{
		this.lightCount = this.lightTransforms.Count;
	}

	// Token: 0x06000B6F RID: 2927 RVA: 0x000DECC0 File Offset: 0x000DCEC0
	public void TurnOnLights()
	{
		foreach (Light light in this.lights)
		{
			light.enabled = true;
		}
	}

	// Token: 0x06000B70 RID: 2928 RVA: 0x000DED14 File Offset: 0x000DCF14
	public void TurnOffLights()
	{
		foreach (Light light in this.lights)
		{
			light.enabled = false;
		}
	}

	// Token: 0x06000B71 RID: 2929 RVA: 0x000DED68 File Offset: 0x000DCF68
	public void SetUpCompanionNodes()
	{
		if (this.companionPoints.Count > 0)
		{
			int num = -1;
			float num2 = 20f;
			Vector3 vector = Vector3.zero;
			int count = this.companionPoints.Count;
			for (int i = 0; i < count; i++)
			{
				Transform transform = this.companionPoints[i];
				int num3 = 0;
				foreach (object obj in transform)
				{
					Transform transform2 = (Transform)obj;
					if (transform != transform2)
					{
						vector += transform2.position;
						num3++;
					}
				}
				if (num3 > 0)
				{
					vector /= (float)num3;
				}
				float num4 = Vector3.Distance(Links.x.main.tr.position, vector);
				if (num4 < num2)
				{
					num2 = num4;
					num = i;
				}
			}
			if (num <= -1)
			{
				Links.x.fellowship.ClearCompanionNodes();
				return;
			}
			Transform transform3 = this.companionPoints[num];
			int num5 = 0;
			foreach (object obj2 in transform3)
			{
				Transform transform4 = (Transform)obj2;
				if (transform3 != transform4)
				{
					num5++;
				}
			}
			if (num5 == 1)
			{
				Links.x.fellowship.SetUpCompanionNodes(transform3.GetChild(0), null, null, null);
			}
			if (num5 == 2)
			{
				Links.x.fellowship.SetUpCompanionNodes(transform3.GetChild(0), transform3.GetChild(1), null, null);
			}
			if (num5 == 3)
			{
				Links.x.fellowship.SetUpCompanionNodes(transform3.GetChild(0), transform3.GetChild(1), transform3.GetChild(2), null);
			}
			if (num5 == 4)
			{
				Links.x.fellowship.SetUpCompanionNodes(transform3.GetChild(0), transform3.GetChild(1), transform3.GetChild(2), transform3.GetChild(3));
				return;
			}
		}
		else
		{
			Links.x.fellowship.ClearCompanionNodes();
		}
	}

	// Token: 0x06000B72 RID: 2930 RVA: 0x000DEF9C File Offset: 0x000DD19C
	public void ActiveLights()
	{
		for (int i = 0; i < 4; i++)
		{
			Vector3 vector = Vector3.zero;
			Color color = Color.black;
			float num = 0f;
			float num2 = 0f;
			if (i < this.lights.Count)
			{
				num = this.lights[i].range;
				color = this.lights[i].color;
				vector = this.lightTransforms[i].position;
				num2 = this.lights[i].intensity / 2f;
			}
			if (i == 0)
			{
				Shader.SetGlobalVector("_InteriorLightPosition0", vector);
				Shader.SetGlobalVector("_InteriorLightColor0", color * num2);
				Shader.SetGlobalFloat("_InteriorLightRange0", num);
			}
			if (i == 1)
			{
				Shader.SetGlobalVector("_InteriorLightPosition1", vector);
				Shader.SetGlobalVector("_InteriorLightColor1", color * num2);
				Shader.SetGlobalFloat("_InteriorLightRange1", num);
			}
			if (i == 2)
			{
				Shader.SetGlobalVector("_InteriorLightPosition2", vector);
				Shader.SetGlobalVector("_InteriorLightColor2", color * num2);
				Shader.SetGlobalFloat("_InteriorLightRange2", num);
			}
			if (i == 3)
			{
				Shader.SetGlobalVector("_InteriorLightPosition3", vector);
				Shader.SetGlobalVector("_InteriorLightColor3", color * num2);
				Shader.SetGlobalFloat("_InteriorLightRange3", num);
			}
		}
	}

	// Token: 0x06000B73 RID: 2931 RVA: 0x000DF108 File Offset: 0x000DD308
	public void InactiveLights()
	{
		Vector3 zero = Vector3.zero;
		Color black = Color.black;
		float num = 0f;
		Shader.SetGlobalVector("_InteriorLightPosition0", zero);
		Shader.SetGlobalVector("_InteriorLightColor0", black);
		Shader.SetGlobalFloat("_InteriorLightRange0", num);
		Shader.SetGlobalVector("_InteriorLightPosition1", zero);
		Shader.SetGlobalVector("_InteriorLightColor1", black);
		Shader.SetGlobalFloat("_InteriorLightRange1", num);
		Shader.SetGlobalVector("_InteriorLightPosition2", zero);
		Shader.SetGlobalVector("_InteriorLightColor2", black);
		Shader.SetGlobalFloat("_InteriorLightRange2", num);
		Shader.SetGlobalVector("_InteriorLightPosition3", zero);
		Shader.SetGlobalVector("_InteriorLightColor3", black);
		Shader.SetGlobalFloat("_InteriorLightRange3", num);
	}

	// Token: 0x06000B74 RID: 2932 RVA: 0x000DF1D4 File Offset: 0x000DD3D4
	public void GetNearest(Vector3 center, out Vector3 position, out int index, out int index1, out int index2, out int index3, out Light nearestLight)
	{
		position = Vector3.zero;
		index = -1;
		index1 = -1;
		index2 = -1;
		index3 = -1;
		nearestLight = null;
		if (this.lightCount == 0)
		{
			return;
		}
		if (this.lightCount == 1)
		{
			position = this.lightTransforms[0].position;
			nearestLight = this.lights[0];
			index = 0;
			return;
		}
		if (this.lightCount > 4)
		{
			this.lightCount = 4;
		}
		float num = float.PositiveInfinity;
		for (int i = 0; i < this.lightCount; i++)
		{
			float sqrMagnitude = (this.lightTransforms[i].position - center).sqrMagnitude;
			if (sqrMagnitude < num)
			{
				num = sqrMagnitude;
				position = this.lightTransforms[i].position;
				index = i;
				nearestLight = this.lights[i];
			}
		}
		num = float.PositiveInfinity;
		for (int j = 0; j < this.lightCount; j++)
		{
			if (index != j)
			{
				float sqrMagnitude2 = (this.lightTransforms[j].position - center).sqrMagnitude;
				if (sqrMagnitude2 < num)
				{
					num = sqrMagnitude2;
					index1 = j;
				}
			}
		}
		num = float.PositiveInfinity;
		for (int k = 0; k < this.lightCount; k++)
		{
			if (index != k && index1 != k)
			{
				float sqrMagnitude3 = (this.lightTransforms[k].position - center).sqrMagnitude;
				if (sqrMagnitude3 < num)
				{
					num = sqrMagnitude3;
					index2 = k;
				}
			}
		}
		num = float.PositiveInfinity;
		for (int l = 0; l < this.lightCount; l++)
		{
			if (index != l && index1 != l && index2 != l)
			{
				float sqrMagnitude4 = (this.lightTransforms[l].position - center).sqrMagnitude;
				if (sqrMagnitude4 < num)
				{
					num = sqrMagnitude4;
					index3 = l;
				}
			}
		}
	}

	// Token: 0x040010F6 RID: 4342
	public List<Transform> lightTransforms = new List<Transform>();

	// Token: 0x040010F7 RID: 4343
	public List<Light> lights = new List<Light>();

	// Token: 0x040010F8 RID: 4344
	public int lightCount = -1;

	// Token: 0x040010F9 RID: 4345
	public List<Transform> companionPoints = new List<Transform>();
}
