private void Fall(int i1, int j1, int i2, int j2) { if (elements[i2, j2] == null) { StartCoroutine(TranslateTo(i1, j1, i2, j2)); elements[i1, j1].spriteRenderer.sortingOrder = CS.GetSortingOrder(i2, j2); elements[i2, j2] = elements[i1, j1]; elements[i1, j1] = null; } }
private void SwapElements(int i1, int j1, int i2, int j2) { if (twoElements) { int sortingOrder = elements[i1, j1].spriteRenderer.sortingOrder; elements[i1, j1].spriteRenderer.sortingOrder = elements[i2, j2].spriteRenderer.sortingOrder; elements[i2, j2].spriteRenderer.sortingOrder = sortingOrder; Element element = elements[i1, j1]; elements[i1, j1] = elements[i2, j2]; elements[i2, j2] = element; } else { elements[i1, j1].spriteRenderer.sortingOrder = CS.GetSortingOrder(i2, j2); elements[i2, j2] = elements[i1, j1]; elements[i1, j1] = null; } Refresh(); }
public void LoadLevel(int levelNum) { loadedLevelNum = levelNum - 1; Level level = levels[loadedLevelNum]; CS.SetCoordinateSystem(level.Width, level.Height, level.MarginHorizontal); GUIManager.instance.LoadLevel(); GameManager gameManager = GameManager.instance; gameManager.SwipeScreen.UpdateSize(); gameManager.Background.sprite = level.Background; foreach (var elem in elementsPool) { elem.SetActive(false); } GameObject element; int elementsPoolNum = 0; Element[,] elements = new Element[level.Height, level.Width]; for (int i = 0; i < level.Height; i++) { for (int j = 0; j < level.Width; j++) { int id = level.Width * i + j; if (level.ElementsID[id] == -1) { continue; } element = GetElement(elementsPoolNum++); element.SetActive(true); element.transform.localScale = Vector2.one * CS.ElementScale; element.transform.localPosition = CS.GetPosition(i, j); SpriteRenderer sprRend = element.GetComponent <SpriteRenderer>(); sprRend.sortingOrder = CS.GetSortingOrder(i, j); Animator animator = element.GetComponent <Animator>(); animator.runtimeAnimatorController = gameManager.Elements[level.ElementsID[id]].Controller; animator.SetFloat("Random", Random.Range(0f, 1f)); elements[i, j] = new Element(level.ElementsID[id], element.transform, sprRend); } } game.GetElements(elements); }
public void ReloadLevel() { elements = elementsCopy.Clone() as Element[, ]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (elements[i, j] == null) { continue; } elements[i, j].Destroy = false; elements[i, j].transform.position = CS.GetPosition(i, j); elements[i, j].spriteRenderer.sortingOrder = CS.GetSortingOrder(i, j); if (elements[i, j].transform.gameObject.activeInHierarchy == false) { elements[i, j].transform.gameObject.SetActive(true); } } } blockControl = false; steps = 0; }
IEnumerator TranslateTo(int i1, int j1, int i2, int j2) { if (elements[i2, j2] == null) { Transform trans1 = elements[i1, j1].transform; Vector3 startPos1 = CS.GetPosition(i1, j1); Vector3 startPos2 = CS.GetPosition(i2, j2); Vector3 delta = startPos2 - startPos1; Vector3 offset = delta.normalized * speed * Time.deltaTime; float deltaX, deltaY; deltaX = Mathf.Abs(trans1.localPosition.x - startPos2.x); deltaY = Mathf.Abs(trans1.localPosition.y - startPos2.y); trans1.localPosition += offset; delta = new Vector3(delta.x == 0 ? 0 : delta.x / Mathf.Abs(delta.x), delta.y == 0 ? 0 : delta.y / Mathf.Abs(delta.y), 0f); while (deltaX > Mathf.Abs(trans1.localPosition.x - startPos2.x) || deltaY > Mathf.Abs(trans1.localPosition.y - startPos2.y)) { yield return(null); deltaX = Mathf.Abs(trans1.localPosition.x - startPos2.x); deltaY = Mathf.Abs(trans1.localPosition.y - startPos2.y); trans1.localPosition += offset; } trans1.localPosition = startPos2; } else { Transform trans1 = elements[i1, j1].transform; Transform trans2 = elements[i2, j2].transform; Vector3 startPos1 = CS.GetPosition(i1, j1); Vector3 startPos2 = CS.GetPosition(i2, j2); Vector3 delta = startPos2 - startPos1; Vector3 offset = delta * speed * Time.deltaTime; float deltaX, deltaY; deltaX = Mathf.Abs(trans1.localPosition.x - startPos2.x); deltaY = Mathf.Abs(trans1.localPosition.y - startPos2.y); trans1.localPosition += offset; trans2.localPosition -= offset; delta = new Vector3(delta.x == 0 ? 0 : delta.x / Mathf.Abs(delta.x), delta.y == 0 ? 0 : delta.y / Mathf.Abs(delta.y), 0f); while (deltaX > Mathf.Abs(trans1.localPosition.x - startPos2.x) || deltaY > Mathf.Abs(trans1.localPosition.y - startPos2.y)) { yield return(null); deltaX = Mathf.Abs(trans1.localPosition.x - startPos2.x); deltaY = Mathf.Abs(trans1.localPosition.y - startPos2.y); trans1.localPosition += offset; trans2.localPosition -= offset; } trans1.localPosition = startPos2; trans2.localPosition = startPos1; } if (isPlayerMove) { isPlayerMove = false; SwapElements(i1, j1, i2, j2); } }