public void StartFalling() { crushedChips = GetChipsForChipMeta(crushChipsMeta.crushedChips); fallingChips = GetChipsForChipMeta(crushChipsMeta.fallingChips); faller.transform.parent = transform; faller.transform.localPosition = Vector3.zero; foreach (Chip chip in fallingChips) { float toReplace = crushedChips [0].transform.localPosition.y; int indexOffset = chip.chipMeta.stackPos - crushedChips [0].chipMeta.stackPos; float relativeY = indexOffset * chip.chipMeta.Height; float newY = relativeY + toReplace; faller.CreateMoverFor(faller.transform, chip.transform, chip.transform.localPosition, new Vector3(chip.transform.localPosition.x, newY, chip.transform.localPosition.z)); } while (crushedChips.Count > 0) { Chip chipToCrush = crushedChips [0]; chipToCrush.transform.parent = null; //Create and start a particle system crushedChips.RemoveAt(0); Vector3 chipLocation = chipToCrush.transform.position; MJParticleExplosion explosion = GetParticleExplosion(); Color chipColor = chipToCrush.GetMainColor(); explosion.Explode(chipLocation, chipColor, chipColor); chipToCrush.gameObject.SetActive(false); Destroy(chipToCrush.gameObject); } crushChipsMeta = new CrushChipsMeta(); crushedChips.Clear(); fallingChips.Clear(); faller.StartFalling(); }
public CrushChipsMeta CleanupStackForCrushedChips(int position) { CrushChipsMeta crushChipsMeta = CheckForCrushingChips(position); foreach (ChipMeta chipMeta in crushChipsMeta.crushedChips) { RemoveAt(chipMeta.stackPos); } return(crushChipsMeta); }
// Use this for initialization void Start() { flipper.AddListener(this, FCEvent.END); faller.AddListener(this, FCEvent.END); faller.targetTransform = transform; crushChipsMeta = Meta.CleanupStackForCrushedChips(0); if (crushChipsMeta.HasCrushedChips) { Debug.Log("The stack has [" + crushChipsMeta.crushedChips.Count + "] chips that should be crushed. "); StartFalling(); } }
public CrushChipsMeta FlipStackAt(int position) //Doesn't actually flip the UI stack, only flips the the chips meta { ReverseOrderAt(position, chips); for (int i = position; i < chips.Count; i++) { ChipMeta chip = chips [i]; chip.Flip(); chip.stackPos = i; } CrushChipsMeta crushingChips = CheckForCrushingChips(position); foreach (ChipMeta meta in crushingChips.crushedChips) { RemoveAt(meta.stackPos); } return(crushingChips); }
public void FlipAt(int position) { if (flipper.IsFlipping || faller.IsFalling) //Extra insurance that the meta stack won't be flipped when the flipper isn't finished { return; } List <GameObject> chipsToFlip = new List <GameObject> (); for (int i = position; i < transform.childCount; i++) { chipsToFlip.Add(transform.GetChild(i).gameObject); } crushChipsMeta = meta.FlipStackAt(position); flipper.Flip(chipsToFlip, transform); Debug.LogFormat("<color=yellow>Flipping at {0}.</color> Updated stack: {1})", position, meta.ToStringShort()); }