コード例 #1
0
    // Use this for initialization
    private IEnumerator Start()
    {
        _audio           = GetComponent <AudioSource>();
        Pool             = new Tsumu[_tsumus.Length, Amount];
        _adjacencyMatrix = new byte[_tsumus.Length, Amount, Amount];
        _nextActive      = new Queue <int> [_tsumus.Length];

        for (int i = 0; i < _tsumus.Length; i++)
        {
            _tsumus[i].TargetId = i;
            _nextActive[i]      = new Queue <int>();
            for (int j = 0; j < Amount; j++)
            {
                Tsumu t = Instantiate(_tsumus[i]);
                t.gameObject.SetActive(false);
                Pool[i, j]   = t;
                t.Id         = j;
                t.Collection = this;
                _nextActive[i].Enqueue(j);
            }
        }


        while (true)
        {
            int r = (int)(Mathf.Sqrt((float)Level / _maxLevel) * 3 + 2);
            int i = Random.Range(0, Mathf.Clamp(r, 2, _tsumus.Length));
            Create(i, new Vector2(Random.Range(-3f, 3f), Random.Range(12f, 20f)));
//			print((int)(Mathf.Sqrt((float)Level / _maxLevel) * 3 + 2) + "," + (_fallRate * Count / (Level + 1) + r * 0.1f));
            yield return(new WaitForSeconds(_fallRate * Count / (Level + 1) + r * 0.05f));
        }
    }
コード例 #2
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
 public void SearchDiserasable(Tsumu tsumu)
 {
     if (HaveErase(tsumu))
     {
         return;
     }
     SearchToNormal(tsumu);
 }
コード例 #3
0
 private IEnumerator Check(Tsumu tsumu)
 {
     while (tsumu && tsumu.State != State)
     {
         yield return(null);
     }
     Neighbors.Remove(tsumu);
 }
コード例 #4
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
 public void SearchErasable(Tsumu tsumu)
 {
     if (_isSearchingErasable || _erasableSet.Count > 0 && _erasableSet.First().GetType() != tsumu.GetType())
     {
         return;
     }
     _isSearchingErasable = true;
     SearchToErase(tsumu);
     _isSearchingErasable = false;
 }
コード例 #5
0
    public Tsumu Create(int target, Vector2 position)
    {
        if (_nextActive[target].Count == 0)
        {
            return(null);
        }
        Tsumu t = Pool[target, _nextActive[target].Dequeue()];

        t.gameObject.SetActive(true);
        t.transform.position = position;
        t.tag = "Untagged";        //一時的に記述
        Count++;
        return(t);
    }
コード例 #6
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
    private static void SearchToNormal(Tsumu tsumu)
    {
        if (tsumu.State != TsumuState.Searched)
        {
            return;
        }

        tsumu.State          = TsumuState.Normal;
        tsumu.Renderer.color = Color.white;

        var array = tsumu.Neighbors.Where(t => t.State == TsumuState.Searched).ToArray();
        foreach (var t in array)
        {
            SearchToNormal(t);
        }
    }
コード例 #7
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
    /*private void GetNeihnors(Tsumu tsumu, ISet<Tsumu> set)
     * {
     *      foreach (var t in tsumu.Neighbors.Where(t => !set.Contains(t)))
     *      {
     *              set.Add(t);
     *              GetNeihnors(t, set);
     *      }
     * }*/

    private static Tsumu GetErase(Tsumu tsumu, IEnumerable <Tsumu> set, ICollection <Tsumu> searched)
    {
        Tsumu erase = null;

        foreach (var t in set)
        {
            searched.Add(t);
            if (t.State == TsumuState.Erase)
            {
                erase = t;
                break;
            }
            erase = GetErase(t, t.Neighbors.Where(ts => !searched.Contains(ts)), searched);
        }
        return(erase);
    }
コード例 #8
0
    public void ControlTsumuby(Touch touch)
    {
        _tsumu = GetTsumuOn(touch.position);
        if (!_tsumu)
        {
            return;
        }

        switch (touch.phase)
        {
        case TouchPhase.Began:
            if (_touchId != -1 || !InScreen(touch.position))
            {
                return;                                   //-1の時以外は既に追跡を開始している
            }
            _touchId = touch.fingerId;                    //今回追いかけるタッチがどれか決める
            _tsumu.Eraser.SearchErasable(_tsumu);
            _tsumu.Eraser.AddEraseList(_tsumu);
            break;

        case TouchPhase.Moved:
            if (touch.fingerId != _touchId)
            {
                return;
            }
            _tsumu.Eraser.AddEraseList(_tsumu);
            break;

        case TouchPhase.Ended:
        case TouchPhase.Canceled:
            if (touch.fingerId != _touchId || !isActiveAndEnabled)
            {
                return;
            }
            StartCoroutine(_tsumu.Eraser.Attack(_supportEmitter, _opponentEmitter));
            _touchId = -1;
            _tsumu   = null;
            break;

        case TouchPhase.Stationary:
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
コード例 #9
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
    public void SearchToErase(Tsumu tsumu)
    {
        _erasableSet.Add(tsumu);
        if (tsumu.State != TsumuState.Normal)
        {
            return;
        }

        tsumu.Renderer.color = Color.gray;
        tsumu.State          = TsumuState.Searched;

        var array = tsumu.Neighbors.Where(t => t.State != TsumuState.Searched).ToArray();
        foreach (var t in array)
        {
            SearchToErase(t);
        }
    }
コード例 #10
0
 public void AddErase(Tsumu tsumu)
 {
     if (tsumu.State != TsumuState.Erasable)
     {
         return;
     }
     if (_touchedTsumu)
     {
         if (_adjacencyMatrix[tsumu.TargetId, tsumu.Id, _touchedTsumu.Id] != 1)
         {
             return;
         }
         _touchedTsumu.ChangeState(TsumuState.Erase);
     }
     tsumu.ChangeState(TsumuState.Erase);
     _touchedTsumu = tsumu;
     _eraseStack.Push(tsumu);
 }
コード例 #11
0
    private void ControlTsumu(Touch touch)
    {
        _tsumu = GetTsumuOn(touch.position);

        switch (touch.phase)
        {
        case TouchPhase.Began:
            if (!InScreen(touch.position))
            {
                return;                                   //-1の時以外は既に追跡を開始している
            }
            _touchId = touch.fingerId;                    //今回追いかけるタッチがどれか決める
            if (_tsumu)
            {
                _collection.Search(_tsumu.TargetId, _tsumu.Id);
            }
            break;

        case TouchPhase.Moved:
            //if(touch.fingerId != _touchId) return;
            if (_tsumu)
            {
                _collection.AddErase(_tsumu);
            }
            break;

        case TouchPhase.Ended:
        case TouchPhase.Canceled:
            //if (touch.fingerId != _touchId || !isActiveAndEnabled) return;
//				print("cancel");
            StartCoroutine(_collection.Release());
            _touchId = -1;
            _tsumu   = null;
            break;

        case TouchPhase.Stationary:
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
コード例 #12
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
    public void AddEraseList(Tsumu tsumu)
    {
        if (tsumu.State != TsumuState.Searched)
        {
            return;
        }
        if (_eraseSet.Count > 0)
        {
            var peek = _eraseSet.Peek();
            if (!peek.Neighbors.Contains(tsumu))
            {
                return;                                              //前のツムに隣接していないものは消せない
            }
            if (tsumu != peek)
            {
                peek.Renderer.color = new Color(0, 0, 0, 1);                            //先ほどまで触っていたツムの色を暗くする
            }
        }

        tsumu.State          = TsumuState.Erase;
        tsumu.Renderer.color = new Color(0, 0, 0, 0.5f);
        _eraseSet.Push(tsumu);
    }
コード例 #13
0
    public IEnumerator Release()
    {
        _release(TsumuState.Normal);
        _touchedTsumu = null;

        //Stack<Tsumu> stack = new Stack<Tsumu>(_eraseStack);
        Tsumu[] array = _eraseStack.ToArray();
        int     len   = array.Length;

        _eraseStack.Clear();
        if (array.Length < _minCount)
        {
            yield break;
        }
        for (int i = 0; i < len; i++)
        {
            Tsumu t = array[i];
            Delete(t.TargetId, t.Id);
            CalculateValue(len);
            _audio.pitch = Combo * 0.05f + 1;
            _audio.Play();
            yield return(new WaitForSeconds(0.075f));
        }
        //if (stack.Count < _minCount) yield break;

        /*while (stack.Count != 0)
         * {
         *      Tsumu t = stack.Pop();
         *      Delete(t.TargetId,t.Id);
         *      CalculateValue(++ren);
         *      _audio.pitch = Combo * 0.05f + 1;
         *      _audio.Play();
         *      yield return new WaitForSeconds(0.075f);
         * }*/
        //
        StartCoroutine(ComboObserve());
    }
コード例 #14
0
 // Use this for initialization
 private void OnEnable()
 {
     _parent = transform.parent.GetComponent <Tsumu>();
 }
コード例 #15
0
ファイル: TsumuEraser.cs プロジェクト: SakumaTakuya/DoraTsumu
 private static bool HaveErase(Tsumu tsumu)
 {
     return(GetErase(tsumu, tsumu.Neighbors, new HashSet <Tsumu> {
         tsumu
     }));
 }