public static void ExplodeArea(IEnumerable <GridCell> area, float delay, bool sequenced, bool showPrefab, bool fly, bool hitProtection, Action completeCallBack) { ParallelTween pt = new ParallelTween(); TweenSeq expl = new TweenSeq(); GameObject temp = new GameObject(); if (delay > 0) { expl.Add((callBack) => { SimpleTween.Value(temp, 0, 1, delay).AddCompleteCallBack(callBack); }); } float incDelay = 0; foreach (GridCell mc in area) //parallel explode all cells { if (sequenced) { incDelay += 0.05f; } float t = incDelay; pt.Add((callBack) => { GridCell.ExplodeCell(mc, t, showPrefab, fly, hitProtection, callBack); }); } expl.Add((callBack) => { pt.Start(callBack); }); expl.Add((callBack) => { Destroy(temp); completeCallBack?.Invoke(); callBack(); }); expl.Start(); }
public override void ExplodeArea(GridCell gCell, float delay, bool sequenced, bool showPrefab, bool fly, bool hitProtection, Action completeCallBack) { Destroy(gameObject); ParallelTween pt = new ParallelTween(); TweenSeq expl = new TweenSeq(); expl.Add((callBack) => { delayAction(gCell.gameObject, delay, callBack); }); foreach (GridCell mc in GetArea(gCell).Cells) //parallel explode all cells { float t = 0; if (sequenced) { float distance = Vector2.Distance(mc.transform.position, gCell.transform.position); t = distance / 15f; } pt.Add((callBack) => { // Debug.Log("explode " + mc + " ;time: " + Time.time); GridCell.ExplodeCell(mc, t, showPrefab, fly, hitProtection, callBack); }); } expl.Add((callBack) => { pt.Start(callBack); }); expl.Add((callBack) => { completeCallBack?.Invoke(); callBack(); }); expl.Start(); }
public override void ExplodeArea(GridCell gCell, float delay, bool sequenced, bool showPrefab, bool fly, bool hitProtection, Action completeCallBack) { Destroy(gameObject); ParallelTween pt = new ParallelTween(); TweenSeq expl = new TweenSeq(); if (delay > 0) { expl.Add((callBack) => { SimpleTween.Value(gameObject, 0, 1, delay).AddCompleteCallBack(callBack); }); } foreach (GridCell mc in GetArea(gCell).Cells) //parallel explode all cells { float t = 0; if (sequenced) { float distance = Vector2.Distance(mc.transform.position, gCell.transform.position); t = distance / 15f; } pt.Add((callBack) => { GridCell.ExplodeCell(mc, t, showPrefab, fly, hitProtection, callBack); }); } expl.Add((callBack) => { pt.Start(callBack); }); expl.Add((callBack) => { completeCallBack?.Invoke(); callBack(); }); expl.Start(); }
public override void ApplyToGrid(GridCell gCell, BoosterObjectData bData, Action completeCallBack) { if (!gCell.Overlay) { if (!gCell.Match && !gCell.StaticBlocker && !gCell.DynamicBlocker) { Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); return; } } Booster b = Booster.ActiveBooster; b.AddCount(-1); ParallelTween par0 = new ParallelTween(); TweenSeq bTS = new TweenSeq(); //move activeBooster Vector3 pos = transform.position; float dist = Vector3.Distance(transform.position, gCell.transform.position); Vector3 rotPivot = Vector3.zero; float rotRad = 6f; bTS.Add((callBack) => { SetToFront(true); SimpleTween.Move(b.SceneObject, b.SceneObject.transform.position, gCell.transform.position, dist / speed).AddCompleteCallBack(() => { rotPivot = transform.position - new Vector3(0, rotRad, 0); callBack(); }).SetEase(EaseAnim.EaseInSine); }); // back move bTS.Add((callBack) => { SimpleTween.Value(gameObject, Mathf.Deg2Rad * 90f, Mathf.Deg2Rad * 180f, 0.25f).SetEase(EaseAnim.EaseInCubic). // SetOnUpdate((float val) => { transform.position = new Vector3(rotRad * Mathf.Cos(val), rotRad * Mathf.Sin(val), 0) + rotPivot; }). AddCompleteCallBack(() => { callBack(); }); }); //forward move bTS.Add((callBack) => { SimpleTween.Value(gameObject, Mathf.Deg2Rad * 180f, Mathf.Deg2Rad * 100f, 0.2f).SetEase(EaseAnim.EaseOutBounce). SetOnUpdate((float val) => { transform.position = new Vector3(rotRad * Mathf.Cos(val), rotRad * Mathf.Sin(val), 0) + rotPivot; }). AddCompleteCallBack(() => { MSound.PlayClip(0, bData.privateClip); Destroy(gameObject, 0.25f); Creator.InstantiateAnimPrefab(bData.animPrefab, gCell.transform, gCell.transform.position, SortingOrder.BoosterToFront + 2, true, callBack); }); }); // if (gCell.IsMatchable) { bTS.Add((callBack) => { GridCell.ExplodeCell(gCell, 0, true, false, true, callBack); // gCell.CollectMatch(0, true, false, true, true, callBack); }); } bTS.Add((callback) => { Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); callback(); }); bTS.Start(); }
public override void ApplyToGrid(GridCell gCell, BoosterObjectData bData, Action completeCallBack) { if (!gCell.IsMatchable) { Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); return; } Booster b = Booster.ActiveBooster; b.AddCount(-1); ParallelTween par0 = new ParallelTween(); TweenSeq bTS = new TweenSeq(); CellsGroup area = GetArea(gCell); //move activeBooster float dist = Vector3.Distance(transform.position, gCell.transform.position); bTS.Add((callBack) => { SetToFront(true); SimpleTween.Move(gameObject, transform.position, gCell.transform.position, dist / speed).AddCompleteCallBack(() => { ValuesTween(gameObject, new float[] { 1, 1.3f, 1 }, 0.3f, (val) => { transform.localScale = gCell.transform.lossyScale * val; }, callBack); MSound.PlayClip(0, bData.privateClip); }).SetEase(EaseAnim.EaseInSine); }); bTS.Add((callBack) => // explode wave { MBoard.ExplodeWave(0, transform.position, 5, null); callBack(); }); bTS.Add((callBack) => { GameObject g = Instantiate(explodePrefab); g.transform.position = transform.position; g.transform.localScale = transform.localScale * 1.0f; callBack(); }); bTS.Add((callBack) => { Destroy(b.SceneObject, 0.1f); callBack(); }); //apply effect for each cell parallel float delay = 0.0f; foreach (var c in area.Cells) { if (!c.IsDisabled && !c.Blocked) { float d = delay; float distance = Vector2.Distance(c.transform.position, gCell.transform.position); d = distance / 15f + delay; par0.Add((callBack) => { delayAction(gameObject, d, () => { Creator.InstantiateAnimPrefab(bData.animPrefab, c.transform, c.transform.position, SortingOrder.BoosterToFront + 2, true, null); callBack(); } ); }); } } delay = 0.15f; foreach (GridCell mc in area.Cells) //parallel explode all cells { float t = 0; float distance = Vector2.Distance(mc.transform.position, gCell.transform.position); t = distance / 15f; par0.Add((callBack) => { GridCell.ExplodeCell(mc, t, false, false, true, callBack); }); } bTS.Add((callback) => { par0.Start(() => { callback(); }); }); bTS.Add((callback) => { Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); callback(); }); bTS.Start(); }