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(); ParallelTween par1 = new ParallelTween(); TweenSeq bTS = new TweenSeq(); CellsGroup area = GetArea(gCell); float dist = Vector3.Distance(transform.position, gCell.transform.position); List <GameObject> dupBoost = new List <GameObject>(); dupBoost.Add(b.SceneObject); //move activeBooster bTS.Add((callBack) => { SetToFront(true); SimpleTween.Move(gameObject, transform.position, gCell.transform.position, dist / speed).AddCompleteCallBack(() => { MSound.PlayClip(0, bData.privateClip); callBack(); }).SetEase(EaseAnim.EaseInSine); }); // duplicate and move foreach (var c in area.Cells) { if (c != gCell) { par0.Add((callBack) => { GameObject boost = Instantiate(b.SceneObject); dupBoost.Add(boost); SimpleTween.Move(boost.gameObject, gCell.transform.position, c.transform.position, Vector3.Distance(c.transform.position, gCell.transform.position) / speed).AddCompleteCallBack(() => { ValuesTween(boost.gameObject, new float[] { 1, 1.3f, 1 }, 0.3f, (val) => { boost.transform.localScale = gCell.transform.lossyScale * val; }, callBack); }).SetEase(EaseAnim.EaseInSine); }); } } //apply effect for each cell parallel float delay = 0.0f; foreach (var c in area.Cells) { delay += 0.05f; float d = delay; par1.Add((callBack) => { delayAction(gameObject, d, () => { Creator.InstantiateAnimPrefab(bData.animPrefab, c.transform, c.transform.position, SortingOrder.BoosterToFront + 2, true, callBack); } ); }); } // disable boosters foreach (var db in dupBoost) { delay += 0.05f; float d = delay; par1.Add((callBack) => { delayAction(gameObject, d, () => { db.SetActive(false); } ); callBack(); }); } // collect match objects delay = 0.05f; foreach (var c in area.Cells) { delay += 0.05f; float d = delay; par1.Add((callBack) => { c.CollectMatch(d, true, false, true, true, callBack); }); } bTS.Add((callback) => { par0.Start(() => { callback(); }); }); bTS.Add((callback) => { par1.Start(() => { callback(); }); }); bTS.Add((callback) => { // destroy boosters foreach (var db in dupBoost) { Destroy(db); } Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); callback(); }); bTS.Start(); }
/// <summary> /// Collect match object, hit overlays, hit underlays /// </summary> /// <param name="completeCallBack"></param> internal void Collect(float delay, bool showPrefab, bool fly, Action completeCallBack) { transform.parent = null; GameObject animPrefab = OData.collectAnimPrefab; TweenSeq cSequence = new TweenSeq(); if (delay > 0) { cSequence.Add((callBack) => { SimpleTween.Value(gameObject, 0, 1, delay).AddCompleteCallBack(callBack); }); } cSequence.Add((callBack) => { if (this) { SetToFront(true); } MSound.PlayClip(0, OData.privateClip); callBack(); }); // sprite seq animation if (showPrefab) { cSequence.Add((callBack) => { Creator.InstantiateAnimPrefab(animPrefab, transform, transform.position, SortingOrder.MainToFront + 1, false, () => { callBack(); }); }); } //fly if (fly) { cSequence.Add((callBack) => { SimpleTween.Move(gameObject, transform.position, MatchBoard.Instance.FlyTarget, 0.4f).AddCompleteCallBack(() => { // callBack(); }); callBack(); // not wait }); cSequence.Add((callBack) => { SimpleTween.Value(gameObject, 0, 1, 0.15f).AddCompleteCallBack(callBack); }); } //finish cSequence.Add((callBack) => { TargetCollectEvent?.Invoke(OData.ID); completeCallBack?.Invoke(); Destroy(gameObject, (fly) ? 0.6f : 0); callBack(); }); cSequence.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); // ScoreCollectHandler?.Invoke(area); //move activeBooster float dist = Vector3.Distance(transform.position, gCell.transform.position); bTS.Add((callBack) => { SimpleTween.Move(gameObject, transform.position, gCell.transform.position, dist / speed).AddCompleteCallBack(() => { MSound.PlayClip(0, bData.privateClip); Destroy(b.SceneObject, 0.25f); callBack(); }).SetEase(EaseAnim.EaseInSine); }); //apply effect for each cell parallel float delay = 0.0f; foreach (var c in area.Cells) { delay += 0.15f; float d = delay; par0.Add((callBack) => { delayAction(gameObject, d, () => { Creator.InstantiateAnimPrefab(bData.animPrefab, c.transform, c.transform.position, SortingOrder.Booster + 1, true, callBack); } ); }); } delay = 0.15f; foreach (var c in area.Cells) { delay += 0.15f; float d = delay; par0.Add((callBack) => { c.CollectMatch(d, true, false, true, true, callBack); }); } bTS.Add((callback) => { par0.Start(() => { callback(); }); }); bTS.Add((callback) => { Booster.ActiveBooster.DeActivateBooster(); completeCallBack?.Invoke(); callback(); }); bTS.Start(); }
/// <summary> /// Collect match object, hit overlays, hit underlays /// </summary> /// <param name="completeCallBack"></param> internal void Collect(GridCell gCell, float delay, bool showPrefab, bool fly, bool hitProtection, bool sideHitProtection, Action completeCallBack) { this.gCell = gCell; transform.parent = null; GameObject animPrefab = OData.collectAnimPrefab; collectSequence = new TweenSeq(); if (delay > 0) { collectSequence.Add((callBack) => { SimpleTween.Value(gameObject, 0, 1, delay).AddCompleteCallBack(callBack); }); } // play sound collectSequence.Add((callBack) => { MSound.PlayClip(0, OData.privateClip); callBack(); }); // sprite seq animation if (showPrefab) { collectSequence.Add((callBack) => { if (this && !fly) { GetComponent <SpriteRenderer>().enabled = false; } GameObject aG = Creator.InstantiateAnimPrefab(animPrefab, transform, transform.position, SortingOrder.Main, false, () => { if (this && fly) { SetToFront(true); } callBack(); }); aG.transform.parent = null; // unparent for play full animation }); } // hit protection collectSequence.Add((callBack) => { if (hitProtection) { gCell.DirectHitUnderlay(null); gCell.DirectHitOverlay(null); } if (sideHitProtection) { gCell.Neighbors.Cells.ForEach((GridCell c) => { c.SideHit(null); }); } callBack(); }); //fly if (fly) { collectSequence.Add((callBack) => { SimpleTween.Move(gameObject, transform.position, MatchBoard.Instance.FlyTarget, 0.4f).AddCompleteCallBack(() => { // callBack(); }); callBack(); // not wait }); collectSequence.Add((callBack) => { SimpleTween.Value(gameObject, 0, 1, 0.15f).AddCompleteCallBack(callBack); }); } // finish collectSequence.Add((callBack) => { // Debug.Log(ToString()+ " collected"); ScoreCollectEvent?.Invoke(); TargetCollectEvent?.Invoke(OData.ID); completeCallBack?.Invoke(); Destroy(gameObject, (fly) ? 0.4f: 0); }); collectSequence.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(); }
public void CreateBorder() { if (Left && LeftBotCorner) { if (!Neighbors.Left || Neighbors.Left.IsDisabled) { SpriteRenderer srL = Creator.CreateSprite(transform, Left, new Vector3(LeftBotCorner.position.x, transform.position.y, transform.position.z), 1); srL.name = "Left border: " + ToString(); } } if (Right && RightBotCorner) { if (!Neighbors.Right || Neighbors.Right.IsDisabled) { SpriteRenderer srR = Creator.CreateSprite(transform, Right, new Vector3(RightBotCorner.position.x, transform.position.y, transform.position.z), 1); srR.name = "Right border: " + ToString(); } } if (Top && RightTopCorner) { if (!Neighbors.Top || Neighbors.Top.IsDisabled) { SpriteRenderer srT = Creator.CreateSprite(transform, Top, new Vector3(transform.position.x, RightTopCorner.position.y, transform.position.z), 1); srT.name = "Top border: " + ToString(); } } if (Bottom && RightBotCorner) { if (!Neighbors.Bottom || Neighbors.Bottom.IsDisabled) { SpriteRenderer srB = Creator.CreateSprite(transform, Bottom, new Vector3(transform.position.x, RightBotCorner.position.y, transform.position.z), 1); srB.name = "Bottom border: " + ToString(); } } if (OutTopLeft && LeftTopCorner) { if ((!Neighbors.Left || Neighbors.Left.IsDisabled) && (!Neighbors.Top || Neighbors.Top.IsDisabled)) { SpriteRenderer srTL = Creator.CreateSprite(transform, OutTopLeft, LeftTopCorner.position, 1); srTL.name = "OutTopLeft border: " + ToString(); } } if (OutBotLeft && LeftBotCorner) { if ((!Neighbors.Left || Neighbors.Left.IsDisabled) && (!Neighbors.Bottom || Neighbors.Bottom.IsDisabled)) { SpriteRenderer sr = Creator.CreateSprite(transform, OutBotLeft, LeftBotCorner.position, 1); sr.name = "OutBotLeft border: " + ToString(); } } if (OutBotRight && RightBotCorner) { if ((!Neighbors.Right || Neighbors.Right.IsDisabled) && (!Neighbors.Bottom || Neighbors.Bottom.IsDisabled)) { SpriteRenderer sr = Creator.CreateSprite(transform, OutBotRight, RightBotCorner.position, 1); sr.name = "OutBotLeft border: " + ToString(); } } if (OutTopRight && RightTopCorner) { if ((!Neighbors.Right || Neighbors.Right.IsDisabled) && (!Neighbors.Top || Neighbors.Top.IsDisabled)) { SpriteRenderer sr = Creator.CreateSprite(transform, OutTopRight, RightTopCorner.position, 1); sr.name = "OutBotLeft border: " + ToString(); } } NeighBors n = new NeighBors(this, true); if (InTopLeft && LeftTopCorner) { if ((!Neighbors.Left || Neighbors.Left.IsDisabled) && n.TopLeft && !n.TopLeft.IsDisabled) { SpriteRenderer sr = Creator.CreateSprite(transform, InTopLeft, LeftTopCorner.position, 2); sr.name = "InTopLeft border: " + ToString(); } } if (InBotLeft && LeftBotCorner) { if ((!Neighbors.Left || Neighbors.Left.IsDisabled) && n.BottomLeft && !n.BottomLeft.IsDisabled) { SpriteRenderer sr = Creator.CreateSprite(transform, InBotLeft, LeftBotCorner.position, 2); sr.name = "InBotLeft border: " + ToString(); } } if (InTopRight && RightTopCorner) { if ((!Neighbors.Right || Neighbors.Right.IsDisabled) && n.TopRight && !n.TopRight.IsDisabled) { SpriteRenderer sr = Creator.CreateSprite(transform, InTopRight, RightTopCorner.position, 2); sr.name = "InTopRight border: " + ToString(); } } if (InBotRight && RightBotCorner) { if ((!Neighbors.Right || Neighbors.Right.IsDisabled) && n.BottomRight && !n.BottomRight.IsDisabled) { SpriteRenderer sr = Creator.CreateSprite(transform, InBotRight, RightBotCorner.position, 2); sr.name = "InBotRight border: " + ToString(); } } }