コード例 #1
0
    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);
    }
コード例 #2
0
    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が指定されました。");
        }
    }