using System.Collections; using System.Collections.Generic; using BITFALL.Rig; using BITKit.Entities; using Cysharp.Threading.Tasks.Triggers; using UnityEditor; using UnityEngine; namespace BITKit { public class EntityHitboxBuilder : MonoBehaviour { [SerializeField] private Collider[] colliders; [SerializeField] private EntityHitbox[] hitboxes; [SerializeReference,SubclassSelector] private IReference[] tagReferences; [BIT] private void Build() { foreach (var x in hitboxes) { DestroyImmediate(x.gameObject); } hitboxes = new EntityHitbox[colliders.Length]; for (var i = 0; i < colliders.Length; i++) { var collider = colliders[i]; var newGameObject = new GameObject($"Hitbox_{collider.gameObject.name}"); newGameObject.layer = gameObject.layer; newGameObject.transform.SetParent(transform); var transform1 = collider.transform; newGameObject.transform.position = transform1.position; newGameObject.transform.rotation = transform1.rotation; var hitbox =hitboxes[i] = newGameObject.AddComponent(); var tag = newGameObject.AddComponent(); var tickOverride = newGameObject.AddComponent(); tickOverride.Source = newGameObject.transform; tickOverride.Target = collider.transform; if (collider.TryGetComponent(out var newRigidbody)) { hitbox.Rigidbody = newRigidbody; } switch (collider) { case BoxCollider boxCollider: var box = newGameObject.AddComponent(); box.size = boxCollider.size; box.center = boxCollider.center; break; case SphereCollider sphereCollider: var sphere = newGameObject.AddComponent(); sphere.radius = sphereCollider.radius; sphere.center = sphereCollider.center; break; case CapsuleCollider capsuleCollider: var capsule = newGameObject.AddComponent(); capsule.radius = capsuleCollider.radius; capsule.height = capsuleCollider.height; capsule.direction = capsuleCollider.direction; capsule.center = capsuleCollider.center; break; } tag.SetTags(tagReferences); EditorUtility.SetDirty(hitbox); EditorUtility.SetDirty(tag); } EditorUtility.SetDirty(this); } } }