コード例 #1
0
 void FeedGems(List <GemModel> feedingGemModels, GOSequence sequence, float currentTime)
 {
     foreach (var gemModel in feedingGemModels)
     {
         MakeGemView(gemModel).Hide();
     }
 }
コード例 #2
0
    void MergeGems(MergedGemInfo mergedGemInfo, GOSequence sequence, float currentTime)
    {
        var mergerGemModel = mergedGemInfo.merger;
        var mergeeGemModel = mergedGemInfo.mergee;

        var mergerPosition = mergerGemModel.Position;
        var mergeePosition = mergeeGemModel.Position;

        var mergeeGemView      = gemViews[mergeeGemModel.id];
        var mergeeNextPosition = new Vector3(mergerPosition.col * gemSize.x, mergerPosition.row * gemSize.y, 0);
        var gapOfTurn          = mergeeGemView.PreservedFromMatch - (Model.currentTurn + 1);

        sequence.Insert(currentTime, mergeeGemView.transform.GOLocalMove(
                            mergeeNextPosition,
                            gapOfTurn * (TIME_PER_FRAME * FRAME_BY_TURN)
                            ).SetEase(GOEase.EaseOut));
        sequence.InsertCallback(currentTime, () => MatchSound.Instance.Play("Merge"));

        var markerID = mergerGemModel.id;

        AddAction((mergeeGemView.PreservedFromMatch + 1), (GOSequence innerSequence, float innerCurrentTime) => {
            SetBlock(mergerPosition, markerID);
            var brokenGemInfo = Controller.Break(mergerPosition, markerID);
            BreakGems(brokenGemInfo.gemModel, true, innerSequence, innerCurrentTime);

            SetBlock(mergeePosition, markerID);
        });
    }
コード例 #3
0
    public static GOSequence Sequence()
    {
        var sequence = new GOSequence(root);

        root.AddUpdater(sequence);
        return(sequence);
    }
コード例 #4
0
ファイル: Cube.cs プロジェクト: hskim3000/Match3
    void Start()
    {
        sequence = GOTween.Sequence().SetEase(GOEase.SmoothStep);
        sequence.Insert(1, transform.GOLocalMove(
                            new Vector3(0, 5, 0),
                            1f
                            ));

        StartCoroutine(StartAddingPosition());
    }
コード例 #5
0
 void SwapGems(List <GemModel> swappingGemModels, GOSequence sequence, float currentTime)
 {
     foreach (var gemModel in swappingGemModels)
     {
         var gemView      = gemViews[gemModel.id];
         var position     = gemModel.Position;
         var nextPosition = new Vector3(position.col * gemSize.x, position.row * gemSize.y, 0);
         var gapOfTurn    = gemView.PreservedFromMatch - Model.currentTurn + 1;
         sequence.Insert(currentTime, gemView.transform.GOLocalMove(
                             nextPosition,
                             gapOfTurn * (TIME_PER_FRAME * FRAME_BY_TURN)
                             ));
     }
 }
コード例 #6
0
    public override void OnDestroy()
    {
        base.OnDestroy();

        UnsubscribeInput();

        gemViews          = null;
        actionQueueByTurn = null;
        if (sequence != null)
        {
            sequence.Kill();
            sequence = null;
        }
        completedRuleInfo = null;
    }
コード例 #7
0
    void BreakGems(GemModel gemModel, bool needToChaining, GOSequence sequence, float currentTime)
    {
        if (gemModel == null)
        {
            return;
        }

        var gemView = RemoveGemView(gemModel, needToChaining);

        if (gemView == null)
        {
            return;
        }

        sequence.InsertCallback(currentTime, () => {
            gemView.ReturnToPool();
            OnGemRemoved.Invoke((int)gemModel.Type, gemView.transform.position, effects.transform);
        });
    }
コード例 #8
0
    void MatchGems(List <MatchedLineInfo> matchedLineInfos, GOSequence sequence, float currentTime)
    {
        foreach (var matchedLineInfo in matchedLineInfos)
        {
            var newAdded          = matchedLineInfo.newAdded;
            var combindedLocation = default(Vector2);
            if (newAdded != null)
            {
                combindedLocation = new Vector2(newAdded.Position.col * gemSize.x, newAdded.Position.row * gemSize.y);
            }

            foreach (var gemModel in matchedLineInfo.gemModels)
            {
                var gemView = RemoveGemView(gemModel, true);
                if (gemView == null)
                {
                    continue;
                }

                sequence.InsertCallback(currentTime, () => {
                    gemView.ReturnToPool(true, combindedLocation);
                    OnGemRemoved.Invoke((int)gemModel.Type, gemView.transform.position, effects.transform);
                });
            }

            if (matchedLineInfo.newAdded != null)
            {
                var gemView = MakeGemView(matchedLineInfo.newAdded);
                gemView.SetActive(false);

                sequence.InsertCallback(currentTime, () => {
                    gemView.Reveal();
                    gemView.Squash();
                });
            }
        }
    }
コード例 #9
0
    void FallGems(List <GemInfo> fallingGemInfos, GOSequence sequence, float currentTime)
    {
        foreach (var gemInfo in fallingGemInfos)
        {
            var gemView  = gemViews[gemInfo.id];
            var position = gemInfo.position;
            sequence.InsertCallback(currentTime, () => {
                gemView.Reveal();
            });

            var nextPosition = new Vector3(position.col * gemSize.x, position.row * gemSize.y, 0);
            var gapOfTurn    = gemView.PreservedFromMatch - Model.currentTurn + 1;
            var duration     = gapOfTurn * (TIME_PER_FRAME * FRAME_BY_TURN);
            sequence.Insert(currentTime, gemView.transform.GOLocalMove(
                                nextPosition,
                                duration
                                ));
            if (gemInfo.endOfFall)
            {
                sequence.InsertCallback(currentTime + duration, () => gemView.Squash());
            }
        }
        ;
    }
コード例 #10
0
    IEnumerator StartUpdateChanges(Action <Int64> OnNoAnyMatches)
    {
        isPlaying = true;

        sequence = GOTween.Sequence().SetAutoKill(false);

        var currentFrame  = 0;
        var startTurn     = Model.currentTurn;
        var noUpdateCount = 0;

        while (true)
        {
            if (currentFrame % FRAME_BY_TURN == 0)
            {
                var passedTurn  = Model.currentTurn - startTurn;
                var currentTime = FRAME_BY_TURN * TIME_PER_FRAME * passedTurn;
                // Debug.Log("currentTime : " + Model.currentTurn + ", " + currentTime);
                var countOfAction = actionQueueByTurn.Count;

                Queue <Action <GOSequence, float> > actionQueue;
                if (actionQueueByTurn.TryGetValue(Model.currentTurn, out actionQueue))
                {
                    while (actionQueue.Count > 0)
                    {
                        var action = actionQueue.Dequeue();
                        action.Invoke(sequence, currentTime);
                    }
                    actionQueueByTurn.Remove(Model.currentTurn);
                }

                updateResult.feedResult  = Controller.Feed();
                updateResult.fallResult  = Controller.Fall();
                updateResult.matchResult = Controller.Match();

                if (passedTurn == 6)
                {
                    if (updateResult.matchResult.Count == 0 && OnNoAnyMatches != null)
                    {
                        OnNoAnyMatches(passedTurn);
                    }
                }

                if (updateResult.HasAnyResult)
                {
                    noUpdateCount = 0;

                    MatchGems(updateResult.matchResult, sequence, currentTime);
                    FeedGems(updateResult.feedResult, sequence, currentFrame);
                    FallGems(updateResult.fallResult, sequence, currentTime);
                }
                else if (countOfAction > 0)
                {
                    noUpdateCount = 0;
                }
                else
                {
                    noUpdateCount += 1;
                }

                Controller.TurnNext();

                // Debug.Log(noUpdateCount + ", " + sequence.IsComplete + ", " + countOfAction);
                if (passedTurn > 20)
                {
                    yield return(null);
                }
                if (noUpdateCount > 20 && sequence.IsComplete)
                {
                    break;
                }
            }

            currentFrame += 1;
        }

        sequence.Kill();
        isPlaying = false;
    }