using System; namespace Model { public static class EntityFactory { public static T Create() where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); ObjectEvents.Instance.Awake(disposer); return disposer; } public static T Create(A a) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); ObjectEvents.Instance.Awake(disposer, a); return disposer; } public static T Create(A a, B b) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); ObjectEvents.Instance.Awake(disposer, a, b); return disposer; } public static T Create(A a, B b, C c) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); ObjectEvents.Instance.Awake(disposer, a, b, c); return disposer; } public static T CreateWithId(long id) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); disposer.Id = id; ObjectEvents.Instance.Awake(disposer); return disposer; } public static T CreateWithId(long id, A a) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); disposer.Id = id; ObjectEvents.Instance.Awake(disposer, a); return disposer; } public static T CreateWithId(long id, A a, B b) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); disposer.Id = id; ObjectEvents.Instance.Awake(disposer, a, b); return disposer; } public static T CreateWithId(long id, A a, B b, C c) where T : Disposer { T disposer = ObjectPool.Instance.Fetch(); disposer.Id = id; ObjectEvents.Instance.Awake(disposer, a, b, c); return disposer; } } }