Exemplo n.º 1
0
        public static void MonsterMoveStepGoldCopySceneCopyMap(Monster monster)
        {
            long ticks = TimeUtil.NOW();

            if (ticks - monster.MoveTime >= 500L)
            {
                int nStep     = monster.Step;
                int nNumStep  = monster.PatrolPath.Count <int[]>() - 1;
                int nNextStep = nStep + 1;
                if (nNextStep >= nNumStep)
                {
                    GameManager.MonsterMgr.AddDelayDeadMonster(monster);
                }
                else
                {
                    int     nMapCode  = 5100;
                    MapGrid mapGrid   = GameManager.MapGridMgr.DictGrids[nMapCode];
                    int     nNextX    = monster.PatrolPath[nNextStep][0];
                    int     nNextY    = monster.PatrolPath[nNextStep][1];
                    int     gridX     = nNextX / mapGrid.MapGridWidth;
                    int     gridY     = nNextY / mapGrid.MapGridHeight;
                    Point   ToGrid    = new Point((double)gridX, (double)gridY);
                    Point   grid      = monster.CurrentGrid;
                    int     nCurrX    = (int)grid.X;
                    int     nCurrY    = (int)grid.Y;
                    double  Direction = Global.GetDirectionByAspect(gridX, gridY, nCurrX, nCurrY);
                    ChuanQiUtils.WalkTo(monster, (Dircetions)Direction);
                    monster.MoveTime = ticks;
                    if (Global.GetTwoPointDistance(ToGrid, grid) < 2.0)
                    {
                        monster.Step = nStep + 1;
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 处理行走
        /// </summary>
        public static void MonsterMoveStepLuoLanFaZhenCopySenceCopyMap(Monster monster)
        {
            long ticks = TimeUtil.NOW();

            // 1秒走一步 如果体验不好 就调整之 todo...
            if (ticks - monster.MoveTime < (1 * 500))
            {
                return;
            }

            int nStep     = monster.Step;
            int nNumStep  = monster.PatrolPath.Count() - 1;
            int nNextStep = nStep + 1;

            // 已经到最后一个点了 删除怪
            if (nNextStep >= nNumStep)
            {
                IncreaceEscapeCount(monster.CopyMapID);
                GameManager.MonsterMgr.DeadMonsterImmediately(monster);
                return;
            }

            // 取得目标坐标的格子信息
            int     nMapCode = (int)monster.CurrentMapCode;
            MapGrid mapGrid  = GameManager.MapGridMgr.DictGrids[nMapCode];

            int nNextX = monster.PatrolPath[nNextStep][0];
            int nNextY = monster.PatrolPath[nNextStep][1];

            int   gridX  = nNextX / mapGrid.MapGridWidth;
            int   gridY  = nNextY / mapGrid.MapGridHeight;
            Point ToGrid = new Point(gridX, gridY);

            Point grid   = monster.CurrentGrid;
            int   nCurrX = (int)grid.X;
            int   nCurrY = (int)grid.Y;

            // 取得和目标坐标的方向值
            double Direction = Global.GetDirectionByAspect(gridX, gridY, nCurrX, nCurrY);

            // 行走
            if (ChuanQiUtils.WalkTo(monster, (Dircetions)Direction) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 7) % 8)) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 9) % 8)) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 6) % 8)) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 10) % 8)) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 5) % 8)) ||
                ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 11) % 8)))
            {
                monster.MoveTime = ticks;
            }

            // 允许误差
            if (Global.GetTwoPointDistance(ToGrid, grid) < 2)
            {
                monster.Step = nStep + 1;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 处理行走
        /// </summary>
        public static void MonsterMoveStepGoldCopySceneCopyMap(Monster monster)
        {
            long ticks = TimeUtil.NOW();

            // 1秒走一步 如果体验不好 就调整之 todo...
            if (ticks - monster.MoveTime < (1 * 500))
            {
                return;
            }

            int nStep     = monster.Step;                   // 当前点
            int nNumStep  = monster.PatrolPath.Count() - 1; // 最后一个点
            int nNextStep = nStep + 1;                      // 下一个路径点

            // 已经到最后一个点了 删除怪
            if (nNextStep >= nNumStep)
            {
                GameManager.MonsterMgr.AddDelayDeadMonster(monster); // 将怪物加入延迟死亡
                return;
            }

            // 取得目标坐标的格子信息
            int     nMapCode = (int)GoldCopySceneEnum.GOLDCOPYSCENEMAPCODEID;
            MapGrid mapGrid  = GameManager.MapGridMgr.DictGrids[nMapCode];

            int nNextX = monster.PatrolPath[nNextStep][0]; // 目标路径x
            int nNextY = monster.PatrolPath[nNextStep][1]; // 目标路径y

            // 目标格子
            int   gridX  = nNextX / mapGrid.MapGridWidth;
            int   gridY  = nNextY / mapGrid.MapGridHeight;
            Point ToGrid = new Point(gridX, gridY);

            // 怪物当前格子
            Point grid   = monster.CurrentGrid;
            int   nCurrX = (int)grid.X;
            int   nCurrY = (int)grid.Y;

            // 取得和目标坐标的方向值
            double Direction = Global.GetDirectionByAspect(gridX, gridY, nCurrX, nCurrY);

            // 行走
            ChuanQiUtils.WalkTo(monster, (Dircetions)Direction);

            monster.MoveTime = ticks;

            // 允许误差
            if (Global.GetTwoPointDistance(ToGrid, grid) < 2)
            {
                monster.Step = nStep + 1;
            }
        }
        public static void MonsterMoveStepEMoLaiXiCopySenceCopyMap(Monster monster)
        {
            long ticks = TimeUtil.NOW();

            if (ticks - monster.MoveTime >= 500L)
            {
                int nStep     = monster.Step;
                int nNumStep  = monster.PatrolPath.Count <int[]>() - 1;
                int nNextStep = nStep + 1;
                if (nNextStep >= nNumStep)
                {
                    EMoLaiXiCopySceneManager.IncreaceEscapeCount(monster.CopyMapID);
                    GameManager.MonsterMgr.DeadMonsterImmediately(monster);
                }
                else
                {
                    int     nMapCode  = monster.CurrentMapCode;
                    MapGrid mapGrid   = GameManager.MapGridMgr.DictGrids[nMapCode];
                    int     nNextX    = monster.PatrolPath[nNextStep][0];
                    int     nNextY    = monster.PatrolPath[nNextStep][1];
                    int     gridX     = nNextX / mapGrid.MapGridWidth;
                    int     gridY     = nNextY / mapGrid.MapGridHeight;
                    Point   ToGrid    = new Point((double)gridX, (double)gridY);
                    Point   grid      = monster.CurrentGrid;
                    int     nCurrX    = (int)grid.X;
                    int     nCurrY    = (int)grid.Y;
                    double  Direction = Global.GetDirectionByAspect(gridX, gridY, nCurrX, nCurrY);
                    if (ChuanQiUtils.WalkTo(monster, (Dircetions)Direction) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 7.0) % 8.0)) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 9.0) % 8.0)) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 6.0) % 8.0)) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 10.0) % 8.0)) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 5.0) % 8.0)) || ChuanQiUtils.WalkTo(monster, (Dircetions)((Direction + 11.0) % 8.0)))
                    {
                        monster.MoveTime = ticks;
                    }
                    if (Global.GetTwoPointDistance(ToGrid, grid) < 2.0)
                    {
                        monster.Step = nStep + 1;
                    }
                }
            }
        }