示例#1
0
        /// <summary>
        /// 向目标移动
        /// </summary>
        private void moveTo(long ticks)
        {
            if (ticks < moveEndTime)
            {
                return;
            }

            Point ownerGrid = owner.CurrentGrid;
            int   nCurrX    = (int)ownerGrid.X;
            int   nCurrY    = (int)ownerGrid.Y;

            Point targetGrid   = target.CurrentGrid;
            int   nTargetCurrX = (int)targetGrid.X;
            int   nTargetCurrY = (int)targetGrid.Y;

            int nDir = (int)owner.Direction;

            if ((nCurrX != nTargetCurrX) || (nCurrY != nTargetCurrY))
            {
                int nX = nTargetCurrX;
                int nY = nTargetCurrY;

                while (true)
                {
                    if (nX > nCurrX)
                    {
                        nDir = (int)Dircetions.DR_RIGHT;

                        if (nY > nCurrY)
                        {
                            nDir = (int)Dircetions.DR_UPRIGHT;
                        }
                        else if (nY < nCurrY)
                        {
                            nDir = (int)Dircetions.DR_DOWNRIGHT;
                        }

                        break;
                    }

                    if (nX < nCurrX)
                    {
                        nDir = (int)Dircetions.DR_LEFT;

                        if (nY > nCurrY)
                        {
                            nDir = (int)Dircetions.DR_UPLEFT;
                        }
                        else if (nY < nCurrY)
                        {
                            nDir = (int)Dircetions.DR_DOWNLEFT;
                        }

                        break;
                    }

                    if (nY > nCurrY)
                    {
                        nDir = (int)Dircetions.DR_UP;
                        break;
                    }

                    if (nY < nCurrY)
                    {
                        nDir = (int)Dircetions.DR_DOWN;
                        break;
                    }

                    break;
                }

                owner.Direction = nDir;

                int nOldX = nCurrX;
                int nOldY = nCurrY;

                {
                    ChuanQiUtils.RunTo1(owner, (Dircetions)nDir);
                }

                ownerGrid = owner.CurrentGrid;
                nCurrX    = (int)ownerGrid.X;
                nCurrY    = (int)ownerGrid.Y;

                for (int i = 0; i < 7; i++)
                {
                    if (nOldX == nCurrX && nOldY == nCurrY)
                    {
                        if (Global.GetRandomNumber(0, 3) > 0)
                        {
                            nDir++;
                        }
                        else if (nDir > 0)
                        {
                            nDir--;
                        }
                        else
                        {
                            nDir = 7;
                        }

                        if (nDir > 7)
                        {
                            nDir = 0;
                        }

                        ChuanQiUtils.RunTo1(owner, (Dircetions)nDir);

                        ownerGrid = owner.CurrentGrid;
                        nCurrX    = (int)ownerGrid.X;
                        nCurrY    = (int)ownerGrid.Y;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            moveEndTime = ticks + 600;
        }
示例#2
0
 private void moveTo(long ticks)
 {
     if (ticks >= this.moveEndTime)
     {
         Point ownerGrid    = this.owner.CurrentGrid;
         int   nCurrX       = (int)ownerGrid.X;
         int   nCurrY       = (int)ownerGrid.Y;
         Point targetGrid   = this.target.CurrentGrid;
         int   nTargetCurrX = (int)targetGrid.X;
         int   nTargetCurrY = (int)targetGrid.Y;
         int   nDir         = (int)this.owner.Direction;
         if (nCurrX != nTargetCurrX || nCurrY != nTargetCurrY)
         {
             int nX = nTargetCurrX;
             int nY = nTargetCurrY;
             if (nX > nCurrX)
             {
                 nDir = 2;
                 if (nY > nCurrY)
                 {
                     nDir = 1;
                 }
                 else if (nY < nCurrY)
                 {
                     nDir = 3;
                 }
             }
             else if (nX < nCurrX)
             {
                 nDir = 6;
                 if (nY > nCurrY)
                 {
                     nDir = 7;
                 }
                 else if (nY < nCurrY)
                 {
                     nDir = 5;
                 }
             }
             else if (nY > nCurrY)
             {
                 nDir = 0;
             }
             else if (nY < nCurrY)
             {
                 nDir = 4;
             }
             this.owner.Direction = (double)nDir;
             int nOldX = nCurrX;
             int nOldY = nCurrY;
             ChuanQiUtils.RunTo1(this.owner, (Dircetions)nDir);
             ownerGrid = this.owner.CurrentGrid;
             nCurrX    = (int)ownerGrid.X;
             nCurrY    = (int)ownerGrid.Y;
             for (int i = 0; i < 7; i++)
             {
                 if (nOldX != nCurrX || nOldY != nCurrY)
                 {
                     break;
                 }
                 if (Global.GetRandomNumber(0, 3) > 0)
                 {
                     nDir++;
                 }
                 else if (nDir > 0)
                 {
                     nDir--;
                 }
                 else
                 {
                     nDir = 7;
                 }
                 if (nDir > 7)
                 {
                     nDir = 0;
                 }
                 ChuanQiUtils.RunTo1(this.owner, (Dircetions)nDir);
                 ownerGrid = this.owner.CurrentGrid;
                 nCurrX    = (int)ownerGrid.X;
                 nCurrY    = (int)ownerGrid.Y;
             }
         }
         this.moveEndTime = ticks + 600L;
     }
 }