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; } } } }
/// <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; } }
/// <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; } } } }