示例#1
0
        bool FindNewPath(MobEntity mob)
        {
            int iLength = 12;
            int iPosX   = mob.rnd.Next(iLength) + mob.CurrentPosX - (iLength / 2);
            int iPosY   = mob.rnd.Next(iLength) + mob.CurrentPosY - (iLength / 2);

            if (iPosX < 0 || iPosY < 0)
            {
                return(false);
            }

            if (iPosX == mob.CurrentPosX && iPosY == mob.CurrentPosY)
            {
                return(false);
            }

            if (!map.IsMovable(this, iPosX, iPosY))
            {
                return(false);
            }

            if (iPosX / 16 != Row || iPosY / 16 != Column)
            {
                return(false);
            }

            mob.EndPosX = (ushort)iPosX;
            mob.EndPosY = (ushort)iPosY;

            return(true);
        }
示例#2
0
        bool UpdatePosition(MobEntity mob)
        {
            ushort oldX = mob.CurrentPosX;
            ushort oldY = mob.CurrentPosY;

            var Tick = Environment.TickCount;

            if (mob.CurrentPosX > mob.EndPosX)
            {
                mob.CurrentPosX--;
            }
            else if (mob.CurrentPosX < mob.EndPosX)
            {
                mob.CurrentPosX++;
            }

            if (mob.CurrentPosY > mob.EndPosY)
            {
                mob.CurrentPosY--;
            }
            else if (mob.CurrentPosY < mob.EndPosY)
            {
                mob.CurrentPosY++;
            }

            mob.NextTime = Environment.TickCount + 1001;

            if (!IsMovable(mob.CurrentPosX, mob.CurrentPosY))
            {
                mob.IsMoving    = false;
                mob.NextTime    = Environment.TickCount;// + new Random().Next(10) * 100 + 1000;
                mob.CurrentPosX = oldX;
                mob.CurrentPosY = oldY;
                mob.EndPosX     = oldX;
                mob.EndPosY     = oldY;
                return(false);
            }

            if (mob.CurrentPosX == mob.EndPosX && mob.CurrentPosY == mob.EndPosY)
            {
                mob.IsMoving = false;
                mob.NextTime = Environment.TickCount + new Random().Next(10) * 100 + 1000;
                return(false);
            }

            if (mob.Spawn <= Environment.TickCount && mob.CurrentHP == 0)
            {
                mob.CurrentHP = mob.MaxHP;

                return(false);
            }

            return(true);
        }
示例#3
0
        public void AddMob(MobEntity mob)
        {
            int row    = mob.CurrentPosX / 16;
            int column = mob.CurrentPosY / 16;
            var cell   = cells[row, column];

            cell.AddMob(mob);
            //var i = GetShortestCellList();
            //active[i].Add(cell);
            //cell.List = i;
            //cell.Activate();
        }
示例#4
0
 public void AddMob(MobEntity mob)
 {
     mobs.TryAdd(mob.Id, mob);
 }
示例#5
0
 void SetPhaseFind(MobEntity mob)
 {
     mob.NextTime = Environment.TickCount + 1000;
 }