Exemple #1
0
        public NumberMoveObject(INumberObject _moveNumberObj, InputProtocol _moveType, Vector2 _endPos, float _distanceWithParent)
        {
            moveNumberObj      = _moveNumberObj;
            moveType           = _moveType;
            endPos             = _endPos;
            distanceWithParent = _distanceWithParent;

            switch (moveType)
            {
            case InputProtocol.MoveUp:
            { moveDir = Vector2.up; }
            break;

            case InputProtocol.MoveDown:
            { moveDir = Vector2.down; }
            break;

            case InputProtocol.MoveLeft:
            { moveDir = Vector2.left; }
            break;

            case InputProtocol.MoveRight:
            { moveDir = Vector2.right; }
            break;
            }
        }
Exemple #2
0
        void InitGame()
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Vector2       index        = new Vector2(i, j);
                    INumberObject numberObject = (INumberObject)gameRender.CreateObject(RenderProtocol.CreateNumberObject, 0);
                    numberObject.SetNumber(2);
                    numberObject.SetIndex(index);
                    numberObject.SetPosition(index * IndexToPos);
                    numberObjList.Add(numberObject);

                    numberTable[i, j] = new NumberData
                    {
                        Index       = new Vector2(i, j),
                        TargetIndex = new Vector2(i, j),
                        Number      = 2
                    };
                }
            }

            for (int i = 0; i < 4; i++)
            {
                SetNewNumber(2);
            }
        }
Exemple #3
0
        //移动完成返回true,未完成返回false
        public bool MoveNumber(INumberObject[,] numbers, Vector2 origin, Vector2 dest, float speed)
        {
            INumberObject current_o = numbers[(int)origin.x, (int)origin.y];
            INumberObject current_d = numbers[(int)dest.x, (int)dest.y];

            Vector2 pos_current = current_o.GetCurrentPos();

            Vector2 dir_origin = dest - pos_current;

            if (Mathf.Abs(dir_origin.magnitude) > 0.001)
            {
                pos_current += dir_origin * speed * Time.deltaTime;

                current_o.SetPosition(pos_current);

                return(false);
            }
            else
            {
                current_d.SetPosition(origin);
                numbers[(int)origin.x, (int)origin.y] = current_d;

                current_o.SetPosition(dest);
                numbers[(int)dest.x, (int)dest.y] = current_o;

                return(true);
            }
        }
Exemple #4
0
        void MoveAllNum()
        {
            //通过targetIndexList来规划运动轨迹
            CurrentTime += Time.deltaTime;
            if (CurrentTime < MoveTime)
            {
                for (int x = 0; x < 4; x++)
                {
                    for (int y = 0; y < 4; y++)
                    {
                        if (numberTable[x, y].TargetIndex != numberTable[x, y].Index)
                        {
                            Vector2 TargetPos = numberTable[x, y].TargetIndex * IndexToPos;
                            Vector2 StartPos  = numberTable[x, y].Index * IndexToPos;

                            INumberObject numberObject = GetNumberObject(numberTable[x, y].Index);
                            numberObject.SetPosition(Vector2.MoveTowards(numberObject.GetCurrentPos(), TargetPos, Vector2.Distance(TargetPos, StartPos) / (MoveTime / Time.deltaTime)));
                        }
                    }
                }
            }
            else
            {
                //foreach (INumberObject numberObject in numberObjList)
                //{
                //    Vector2 index = numberObject.GetIndex();
                //    Vector2 targetindex = numberTable[(int)index.x, (int)index.y].TargetIndex;
                //    if (index != targetindex)
                //    {
                //        numberTable[(int)targetindex.x, (int)targetindex.y].Number += numberObject.GetNumber();
                //        numberTable[(int)index.x, (int)index.y].Number = 0;
                //    }
                //}

                for (int x = 0; x < 4; x++)
                {
                    for (int y = 0; y < 4; y++)
                    {
                        numberTable[x, y].Index       = new Vector2(x, y);
                        numberTable[x, y].TargetIndex = new Vector2(x, y);
                        numberTable[x, y].bMerged     = false;
                    }
                }
                foreach (INumberObject numberObject in numberObjList)
                {
                    Vector2 index = numberObject.GetIndex();
                    numberObject.SetPosition(index * IndexToPos);
                    numberObject.SetNumber(numberTable[(int)index.x, (int)index.y].Number);
                }
                bGetInput   = true;
                CurrentTime = 0;
                for (int i = 0; i < 2; i++)
                {
                    SetNewNumber(2);
                }
                DebugLog();
            }
        }
Exemple #5
0
        public void Moving(float speed, int i, int j)
        {
            Debug.Log("移动");
            Vector2 last    = numbers[i, j].GetLastIndex();
            Vector2 current = numbers[i, j].GetIndex();

            if (last != current)
            {
                Vector2 direct     = (current - last).normalized;
                Vector2 currentPos = numbers[i, j].GetCurrentPos();

                currentPos += direct * Time.deltaTime * speed * Mathf.Abs(current.x + current.y - last.x - last.y);
                numbers[i, j].SetPosition(currentPos);

                if (Mathf.Abs((currentPos - current).magnitude) < 0.1)
                {
                    int num = numbers[i, j].GetDestNum();
                    GameFramework.singleton.getGameRender().DestroyObject(numbers[i, j]);

                    INumberObject number1 = GameFramework.singleton.getGameRender().CreateObject(RenderProtocol.CreateNumberObject, size) as INumberObject;
                    number1.SetNumber(num);
                    number1.SetDestNum(num);
                    number1.SetIndex(current);
                    number1.SetLastIndex(current);
                    number1.SetPosition(current);
                    GameFramework.singleton.getGameRender().DestroyObject(numbers[(int)current.x, (int)current.y]);
                    numbers[(int)current.x, (int)current.y] = number1;

                    INumberObject number2 = GameFramework.singleton.getGameRender().CreateObject(RenderProtocol.CreateNumberObject, size) as INumberObject;
                    number2.SetNumber(0);
                    number2.SetNumber(0);
                    number2.SetIndex(new Vector2(i, j));
                    number2.SetLastIndex(new Vector2(i, j));
                    number2.SetPosition(new Vector2(i, j));

                    numbers[i, j] = number2;
                }
            }
        }
Exemple #6
0
        void SetNewNumber(int num)
        {
            List <NumberData> TempList = new List <NumberData>();

            foreach (NumberData numberData in numberTable)
            {
                if (numberData.Number == 0)
                {
                    TempList.Add(numberData);
                }
            }
            if (TempList.Count == 0)
            {
                return;
            }
            int RandNum = UnityEngine.Random.Range(0, TempList.Count);

            TempList[RandNum].Number = num;


            INumberObject numberObject = GetNumberObject(TempList[RandNum].Index);

            numberObject.SetNumber(num);
        }