void FeedGems(List <GemModel> feedingGemModels, GOSequence sequence, float currentTime) { foreach (var gemModel in feedingGemModels) { MakeGemView(gemModel).Hide(); } }
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); }); }
public static GOSequence Sequence() { var sequence = new GOSequence(root); root.AddUpdater(sequence); return(sequence); }
void Start() { sequence = GOTween.Sequence().SetEase(GOEase.SmoothStep); sequence.Insert(1, transform.GOLocalMove( new Vector3(0, 5, 0), 1f )); StartCoroutine(StartAddingPosition()); }
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) )); } }
public override void OnDestroy() { base.OnDestroy(); UnsubscribeInput(); gemViews = null; actionQueueByTurn = null; if (sequence != null) { sequence.Kill(); sequence = null; } completedRuleInfo = null; }
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); }); }
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(); }); } } }
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()); } } ; }
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; }