using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace DCFApixels.DragonECS { [Serializable] [MetaColor(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 } #region Unity Component Templates public class UnityComponentTemplate : ComponentTemplateBase> where T : Component { public override string Name => "UnityComponent/" + typeof(T).Name; public sealed override void Apply(int worldID, int entityID) { EcsWorld.GetPool>>(worldID).TryAddOrGet(entityID) = component; } public override void OnValidate(UnityEngine.Object obj) { if (component.obj == null) { if (obj is GameObject go) { component.obj = go.GetComponent(); } } } } [Serializable] public sealed class UnityComponentRigitBodyInitializer : UnityComponentTemplate { } [Serializable] public sealed class UnityComponentAnimatorInitializer : UnityComponentTemplate { } [Serializable] public sealed class UnityComponentCharacterControllerInitializer : UnityComponentTemplate { } #endregion #region Collider Templates [Serializable] public sealed class UnityComponentColliderTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Collider/" + nameof(Collider); } [Serializable] public sealed class UnityComponentBoxColliderTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Collider/" + nameof(BoxCollider); } [Serializable] public sealed class UnityComponentSphereColliderTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Collider/" + nameof(SphereCollider); } [Serializable] public sealed class UnityComponentCapsuleColliderTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Collider/" + nameof(CapsuleCollider); } [Serializable] public sealed class UnityComponentMeshColliderTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Collider/" + nameof(MeshCollider); } #endregion #region Joint Templates [Serializable] public sealed class UnityComponentJointTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Joint/" + nameof(Joint); } [Serializable] public sealed class UnityComponentFixedJointTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Joint/" + nameof(FixedJoint); } [Serializable] public sealed class UnityComponentCharacterJointTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Joint/" + nameof(CharacterJoint); } [Serializable] public sealed class UnityComponentConfigurableJointTemplate : UnityComponentTemplate { public override string Name => "UnityComponent/Joint/" + nameof(ConfigurableJoint); } #endregion }