using System; namespace KYFramework { public static class ComponentFactory { public static Component CreateWithParent(Type type, Component parent, bool fromPool = true) { Component component; if (fromPool) { component = Game.ObjectPool.Fetch(type) as Component; } else { component = (Component)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Parent = parent; if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component); return component; } public static T CreateWithParent(Component parent, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Parent = parent; if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component); return component; } public static T CreateWithParent(Component parent, A a, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Parent = parent; if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a); return component; } public static T CreateWithParent(Component parent, A a, B b, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Parent = parent; if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a, b); return component; } public static T CreateWithParent(Component parent, A a, B b, C c, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Parent = parent; if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a, b, c); return component; } public static T Create(bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component); return component; } public static T Create(A a, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a); return component; } public static T Create(A a, B b, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a, b); return component; } public static T Create(A a, B b, C c, bool fromPool = true) where T : Component { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); if (component is ComponentWithId componentWithId) { componentWithId.Id = component.InstanceId; } Game.EventSystem.Awake(component, a, b, c); return component; } public static T CreateWithId(long id, bool fromPool = true) where T : ComponentWithId { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Id = id; Game.EventSystem.Awake(component); return component; } public static T CreateWithId(long id, A a, bool fromPool = true) where T : ComponentWithId { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Id = id; Game.EventSystem.Awake(component, a); return component; } public static T CreateWithId(long id, A a, B b, bool fromPool = true) where T : ComponentWithId { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Id = id; Game.EventSystem.Awake(component, a, b); return component; } public static T CreateWithId(long id, A a, B b, C c, bool fromPool = true) where T : ComponentWithId { Type type = typeof(T); T component; if (fromPool) { component = (T)Game.ObjectPool.Fetch(type); } else { component = (T)Activator.CreateInstance(type); } Game.EventSystem.Add(component); component.Id = id; Game.EventSystem.Awake(component, a, b, c); return component; } } }