using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace DCFApixels.DragonECS { [Serializable] [DebugColor(255 / 3, 255, 0)] public struct UnityComponent : IEcsComponent, IEnumerable//IntelliSense hack where T : Component { public T obj; public UnityComponent(T obj) => this.obj = obj; IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); //IntelliSense hack IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); //IntelliSense hack } public class UnityComponentInitializer : TemplateComponentInitializer> where T : Component { public override string Name => "UnityComponent/" + typeof(T).Name; public sealed override void Add(EcsWorld w, int e) => w.GetPool>().Add(e) = component; public override void OnValidate(GameObject gameObject) { if (component.obj == null) component.obj = gameObject.GetComponent(); } } [Serializable] public sealed class UnityComponentRigitBodyInitializer : UnityComponentInitializer { } [Serializable] public sealed class UnityComponentAnimatorInitializer : UnityComponentInitializer { } [Serializable] public sealed class UnityComponentCharacterControllerInitializer : UnityComponentInitializer { } #region Colliders [Serializable] public sealed class UnityComponentColliderInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Collider/" + nameof(Collider); } [Serializable] public sealed class UnityComponentBoxColliderInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Collider/" + nameof(BoxCollider); } [Serializable] public sealed class UnityComponentSphereColliderInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Collider/" + nameof(SphereCollider); } [Serializable] public sealed class UnityComponentCapsuleColliderInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Collider/" + nameof(CapsuleCollider); } [Serializable] public sealed class UnityComponentMeshColliderInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Collider/" + nameof(MeshCollider); } #endregion #region Joints [Serializable] public sealed class UnityComponentJointInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Joint/" + nameof(Joint); } [Serializable] public sealed class UnityComponentFixedJointInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Joint/" + nameof(FixedJoint); } [Serializable] public sealed class UnityComponentCharacterJointInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Joint/" + nameof(CharacterJoint); } [Serializable] public sealed class UnityComponentConfigurableJointInitializer : UnityComponentInitializer { public override string Name => "UnityComponent/Joint/" + nameof(ConfigurableJoint); } #endregion }