using Events; using System; using System.Linq; using Unity.Entities; using UnityEngine; using Object = UnityEngine.Object; namespace DefaultNamespace { public static class EntityCommandBufferExtensions { public delegate void ModifyData(ref T data) where T : struct, IComponentData; public static void PostEvent(this EntityCommandBuffer buffer) where T : struct, IComponentData { var entity = buffer.CreateEntity(); buffer.AddComponent(entity, new EventData()); buffer.AddComponent(entity, new T()); } public static void PostEvent(this EntityCommandBuffer buffer, T eventComponent) where T : struct, IComponentData { var entity = buffer.CreateEntity(); buffer.AddComponent(entity, new EventData()); buffer.AddComponent(entity, eventComponent); } public static void PostEvent(this EntityManager entityManager) where T : struct, IComponentData { entityManager.CreateEntity(ComponentType.ReadWrite(), ComponentType.ReadWrite()); } public static void PostEvent(this EntityManager entityManager, T eventComponent) where T : struct, IComponentData { var entity = entityManager.CreateEntity(ComponentType.ReadWrite(), ComponentType.ReadWrite()); entityManager.SetComponentData(entity, eventComponent); } public static void PostEntityEvent (this EntityCommandBuffer buffer, EntityManager entityManager, Entity entity) where T : struct, IComponentData { if (!entityManager.HasComponent(entity)) { buffer.AddComponent(entity, new T()); } } public static void PostEntityEvent (this EntityCommandBuffer buffer, EntityManager entityManager, Entity entity, T eventComponent) where T : struct, IComponentData { if (entityManager.HasComponent(entity)) { buffer.SetComponent(entity, eventComponent); } else { buffer.AddComponent(entity, eventComponent); } } public static void PostEntityEvent(this EntityManager entityManager, Entity entity) where T : struct, IComponentData { if (!entityManager.HasComponent(entity)) { entityManager.AddComponentData(entity, new T()); } } public static void PostEntityEvent(this EntityManager manager, Entity entity, T eventComponent) where T : struct, IComponentData { if (manager.HasComponent(entity)) { manager.SetComponentData(entity, eventComponent); } else { manager.AddComponentData(entity, eventComponent); } } public static void PostEntityEvent(this EntityManager entityManager, Entity entity, ModifyData eAction) where T : struct, IComponentData { if (entityManager.HasComponent(entity)) { var data = entityManager.GetComponentData(entity); eAction.Invoke(ref data); entityManager.SetComponentData(entity, data); } else { var data = new T(); eAction.Invoke(ref data); entityManager.AddComponentData(entity, data); } } public static bool HasComponents(this EntityManager manager, Entity entity) { return manager.HasComponent(entity) && manager.HasComponent(entity); } public static bool HasComponents(this EntityManager manager, Entity entity) { return manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity); } public static bool HasComponents(this EntityManager manager, Entity entity) { return manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity); } public static bool HasComponents(this EntityManager manager, Entity entity) { return manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity); } public static bool HasComponents(this EntityManager manager, Entity entity) { return manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity) && manager.HasComponent(entity); } public static bool HasComponents(this EntityManager manager, Entity entity, params Type[] types) { return types.All(t => manager.HasComponent(entity, ComponentType.FromTypeIndex(TypeManager.GetTypeIndex(t)))); } public static bool HasComponents(this EntityManager manager, Entity entity, params ComponentType[] types) { return types.All(t => manager.HasComponent(entity, t)); } public static void CopyFrom(this EntityCommandBuffer buffer, Entity entity, GameObjectEntity o) where T : struct, IComponentData { buffer.AddComponent(entity, o.GetComponent>().Value); } public static void DestroyEntityWithObjects(this EntityManager entityManager, Entity entity) { if (entityManager.HasComponent(entity)) { Object.Destroy(entityManager.GetComponentObject(entity).gameObject); } if (entityManager.Exists(entity)) { entityManager.DestroyEntity(entity); } } public static void KeepData (this EntityCommandBuffer buffer, EntityManager entityManager, bool keep, Entity entity, T data) where T : struct, IComponentData { var hasComponent = entityManager.HasComponent(entity); if (!keep && hasComponent) { buffer.RemoveComponent(entity); } else if (keep && !hasComponent) { buffer.AddComponent(entity, data); } else if (keep) { buffer.SetComponent(entity, data); } } public static bool TryGetComponentData(this EntityManager entityManager, Entity entity, out T componetData) where T : struct, IComponentData { if (entityManager.HasComponent(entity)) { componetData = entityManager.GetComponentData(entity); return true; } componetData = default; return false; } public static bool TryGetSharedComponentData (this EntityManager entityManager, Entity entity, out T componetData) where T : struct, ISharedComponentData { if (entityManager.HasComponent(entity)) { componetData = entityManager.GetSharedComponentData(entity); return true; } componetData = default; return false; } public static bool TryGetComponentObject(this EntityManager entityManager, Entity entity, out T componetData) { if (entityManager.HasComponent(entity)) { componetData = entityManager.GetComponentObject(entity); return true; } componetData = default; return false; } } }