using mh; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public enum ColliderType { Collider, Hurtbox, Hitbox, } public partial class PhysicsManager : Singleton { #region Quadtrees private PhysicsQuadtree m_CollisionQuadtree; private PhysicsQuadtree m_HurtboxQuadtree; #endregion public Vector4 collisionQuadtreeRange { set { m_CollisionQuadtree.quadtreeRange = value; } } public Vector4 hurtboxQuadtreeRange { set { m_HurtboxQuadtree.quadtreeRange = value; } } public List sharedRetriveResults => m_SharedRetriveResults; private List m_SharedRetriveResults = new List(); public PhysicsManager() { m_CollisionQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); m_HurtboxQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); } public void AddCollider(IQuadTreeObject collider) { m_CollisionQuadtree.AddObject(collider); } public void RemoveCollider(IQuadTreeObject collider) { m_CollisionQuadtree.RemoveObject(collider); } public void AddHurtboxes(IQuadTreeObject hurtbox) { m_HurtboxQuadtree.AddObject(hurtbox); } public void RemoveHurtbox(IQuadTreeObject hurtbox) { m_HurtboxQuadtree.RemoveObject(hurtbox); } public void Update() { m_CollisionQuadtree.UpdateQuadtree(); m_HurtboxQuadtree.UpdateQuadtree(); } public bool RetriveColliders(ref List returnObjs, IQuadTreeObject obj) { return m_CollisionQuadtree.Retrive(ref returnObjs, obj); } public bool RetriveColliders(ref List returnObjs, Vector4 bound) { return m_CollisionQuadtree.Retrive(ref returnObjs, bound); } public bool RetriveHurtboxes(ref List returnObjs, Vector4 bound) { return m_HurtboxQuadtree.Retrive(ref returnObjs, bound); } public bool RetriveColliders(Vector4 bound) { m_SharedRetriveResults.Clear(); return m_CollisionQuadtree.Retrive(ref m_SharedRetriveResults, bound); } public bool RetriveHurtboxes(Vector4 bound) { m_SharedRetriveResults.Clear(); return m_HurtboxQuadtree.Retrive(ref m_SharedRetriveResults, bound); } public System.Func GetRetriverByType(ColliderType type) { if (type == ColliderType.Collider) return RetriveColliders; else if (type == ColliderType.Hurtbox) return RetriveHurtboxes; else return null; } public void Debug() { m_CollisionQuadtree.Debug(); } }