82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using BITFALL.Rig;
|
|
using BITKit.Entities;
|
|
using Cysharp.Threading.Tasks.Triggers;
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
using UnityEngine;
|
|
|
|
namespace BITKit
|
|
{
|
|
public class EntityHitboxBuilder : MonoBehaviour
|
|
{
|
|
[SerializeField] private Collider[] colliders;
|
|
[SerializeField] private EntityHitbox[] hitboxes;
|
|
|
|
[SerializeReference,SubclassSelector] private IReference[] tagReferences;
|
|
#if UNITY_EDITOR
|
|
[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<EntityHitbox>();
|
|
var tag = newGameObject.AddComponent<Tag>();
|
|
|
|
var tickOverride = newGameObject.AddComponent<TickOverrideTransform>();
|
|
|
|
tickOverride.Source = newGameObject.transform;
|
|
tickOverride.Target = collider.transform;
|
|
|
|
if (collider.TryGetComponent<Rigidbody>(out var newRigidbody))
|
|
{
|
|
hitbox.Rigidbody = newRigidbody;
|
|
}
|
|
|
|
switch (collider)
|
|
{
|
|
case BoxCollider boxCollider:
|
|
var box = newGameObject.AddComponent<BoxCollider>();
|
|
box.size = boxCollider.size;
|
|
box.center = boxCollider.center;
|
|
break;
|
|
case SphereCollider sphereCollider:
|
|
var sphere = newGameObject.AddComponent<SphereCollider>();
|
|
sphere.radius = sphereCollider.radius;
|
|
sphere.center = sphereCollider.center;
|
|
break;
|
|
case CapsuleCollider capsuleCollider:
|
|
var capsule = newGameObject.AddComponent<CapsuleCollider>();
|
|
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);
|
|
}
|
|
#endif
|
|
}
|
|
}
|