Files
BepInEx/Projects/BanquetForFools/Source/Assembly-CSharp/ItemCollector.cs
2025-05-21 20:40:04 +02:00

242 lines
6.0 KiB
C#

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