public TBehavior GetInstance <TBehavior>(EnemyShotKind kind) where TBehavior : EnemyShotBehavior { List <EnemyShotBehavior> list; bool result = shotBehaviorPool.TryGetValue(kind, out list); if (!result) { list = new List <EnemyShotBehavior>(); shotBehaviorPool.Add(kind, list); } foreach (var item in list) { if (!item.IsActive) { item.IsActive = true; return(item as TBehavior); } } var obj = GetNewInstance(kind); obj.IsActive = true; list.Add(obj); return(obj as TBehavior); }
private EnemyShotBehavior GetNewInstance(EnemyShotKind kind) { switch (kind) { case EnemyShotKind.Null: return(new NullEnemyShotBehavior()); case EnemyShotKind.Flower: return(new FlowerEnemyShotBehavior()); case EnemyShotKind.Circle: return(new CircleEnemyShotBehavior()); case EnemyShotKind.Lockon: return(new LockOnEnemyShotBehavior()); case EnemyShotKind.Shooting: return(new ShootingEnemyShotBehavior()); case EnemyShotKind.Ring: return(new RingEnemyShotBehavior()); default: throw new Exception("EnemyShotBehaviorの生成処理で不明なKindが指定されました。"); } }