Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
 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();
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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;
 }
Beispiel #5
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);
            }
        }