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

// Token: 0x020000B8 RID: 184
public class ItemCollector : MonoBehaviour
{
	// Token: 0x0600119E RID: 4510 RVA: 0x001595AC File Offset: 0x001577AC
	private void Start()
	{
		this.UpdateSize();
		Links.x.inventory.groundBag.itemCollectorSize = this.size;
	}

	// Token: 0x0600119F RID: 4511 RVA: 0x001595CE File Offset: 0x001577CE
	public void UpdateSize()
	{
		if (Links.x.mk)
		{
			this.size = 20f;
		}
		else
		{
			this.size = 20f;
		}
		Links.x.inventory.groundBag.itemCollectorSize = this.size;
	}

	// Token: 0x060011A0 RID: 4512 RVA: 0x0015960E File Offset: 0x0015780E
	public bool HasItem(Item i)
	{
		return this.hitItems.Contains(i);
	}

	// Token: 0x060011A1 RID: 4513 RVA: 0x00159624 File Offset: 0x00157824
	public bool CheckInteractiveLineOfSight(Item item)
	{
		if (Links.x.hasMain)
		{
			Vector3 position = Links.x.main.tr.position;
			return !Physics.Linecast(Links.x.main.raycastPosition, item.gameObject.transform.position, 2163200);
		}
		return false;
	}

	// Token: 0x060011A2 RID: 4514 RVA: 0x00159684 File Offset: 0x00157884
	private void Enter(GameObject other)
	{
		GameObject gameObject = other.gameObject;
		if (gameObject)
		{
			Item component = gameObject.GetComponent<Item>();
			if (component)
			{
				if (!component.destroying && component.active && component.gameObject.activeSelf)
				{
					if (this.screenSize)
					{
						Links.x.inventory.groundBag.HitScreenItem(component, true);
						component.InRange();
					}
					else
					{
						Links.x.inventory.groundBag.HitItem(component, true);
					}
					if (this.screenSize)
					{
						Links.x.inventory.groundBag.SetCollectorUpdateFromTrigger();
						return;
					}
				}
			}
			else
			{
				BreakableActions component2 = gameObject.gameObject.transform.parent.gameObject.GetComponent<BreakableActions>();
				if (component2 && component2.resourceLocation > -1)
				{
					component2.InRange();
				}
			}
		}
	}

	// Token: 0x060011A3 RID: 4515 RVA: 0x00159764 File Offset: 0x00157964
	private void Exit(GameObject other)
	{
		GameObject gameObject = other.gameObject;
		if (gameObject)
		{
			Item component = gameObject.GetComponent<Item>();
			if (component)
			{
				if (this.screenSize)
				{
					Links.x.inventory.groundBag.RemovePopItem(component);
					Links.x.inventory.groundBag.HitScreenItem(component, false);
					component.OutOfRange();
				}
				else
				{
					Links.x.inventory.groundBag.HitItem(component, false);
				}
				if (this.screenSize)
				{
					Links.x.inventory.groundBag.SetCollectorUpdateFromTrigger();
					return;
				}
			}
			else
			{
				BreakableActions component2 = gameObject.gameObject.transform.parent.gameObject.GetComponent<BreakableActions>();
				if (component2 && component2.resourceLocation > -1)
				{
					component2.OutOfRange();
				}
			}
		}
	}

	// Token: 0x060011A4 RID: 4516 RVA: 0x00159834 File Offset: 0x00157A34
	public void EmptyItems()
	{
		int count = this.hitItems.Count;
		for (int i = 0; i < count; i++)
		{
			if (this.newItems.IndexOf(this.hitItems[i]) == -1)
			{
				if (this.hitItems[i])
				{
					this.Exit(this.hitItems[i].gameObject);
				}
				this.hitItems[i] = null;
			}
		}
		this.hitItems.Clear();
	}

	// Token: 0x060011A5 RID: 4517 RVA: 0x001598B5 File Offset: 0x00157AB5
	public void LoadScene()
	{
		this.party = Links.x.portraitOrder;
		this.groundItems = Links.x.diorama.groundItems;
	}

	// Token: 0x060011A6 RID: 4518 RVA: 0x001598DC File Offset: 0x00157ADC
	public void UpdateLists()
	{
		this.Update();
	}

	// Token: 0x060011A7 RID: 4519 RVA: 0x001598E4 File Offset: 0x00157AE4
	private void Update()
	{
		if (Links.x)
		{
			int bombID = Links.x.library.bombID;
			if (Links.x.gaia.sceneLoaded && !Records.x.removeControls && Links.x.main)
			{
				if (this.party == null)
				{
					this.party = Links.x.portraitOrder;
				}
				if (this.groundItems == null)
				{
					this.groundItems = Links.x.diorama.groundItems;
				}
				int count = this.groundItems.Count;
				int count2 = this.party.Count;
				this.newItems.Clear();
				for (int i = 0; i < count; i++)
				{
					Item item2 = this.groundItems[i];
					if (item2 && item2.active && !item2.destroying && !item2.instantiating && item2.clickable)
					{
						if (item2.gameObject.activeInHierarchy && item2.gameObject.activeSelf && this.PartyClose(Links.x.main, item2.tr.position, this.size) && this.CheckInteractiveLineOfSight(item2) && item2.invRow._UIModel != "None" && item2.invRow._UIModel != "NoneOnly")
						{
							this.newItems.Add(item2);
						}
						if (item2.ID == bombID && item2.durability.x > 0f && Links.x.gameplay.seconds > item2.durability.x + 126f)
						{
							item2.BombBomb(item2.tr.position);
							return;
						}
					}
				}
				bool flag = false;
				int num = this.hitItems.Count;
				for (int j = 0; j < num; j++)
				{
					if (this.newItems.IndexOf(this.hitItems[j]) == -1)
					{
						if (this.hitItems[j])
						{
							this.Exit(this.hitItems[j].gameObject);
						}
						this.hitItems[j] = null;
						flag = true;
					}
				}
				if (flag)
				{
					this.hitItems.RemoveAll((Item item) => item == null);
				}
				num = this.newItems.Count;
				for (int k = 0; k < num; k++)
				{
					if (this.hitItems.IndexOf(this.newItems[k]) == -1 && this.newItems[k])
					{
						this.Enter(this.newItems[k].gameObject);
						this.hitItems.Add(this.newItems[k]);
					}
				}
			}
		}
	}

	// Token: 0x060011A8 RID: 4520 RVA: 0x00159BFC File Offset: 0x00157DFC
	public bool PartyClose(Character character, Vector3 point, float dist)
	{
		point.y = character.tr.position.y;
		return (character.tr.position - point).sqrMagnitude < dist * dist;
	}

	// Token: 0x04001D1B RID: 7451
	public bool screenSize;

	// Token: 0x04001D1C RID: 7452
	private List<Character> party;

	// Token: 0x04001D1D RID: 7453
	private List<Item> groundItems;

	// Token: 0x04001D1E RID: 7454
	public List<Item> hitItems = new List<Item>();

	// Token: 0x04001D1F RID: 7455
	public List<Item> newItems = new List<Item>();

	// Token: 0x04001D20 RID: 7456
	public float size;
}
