示例#1
0
        private void StepAvoidingWalls(MobDirection direction)
        {
            if (CanStep(direction, speed))
            {
                float angle = MobDirectionToAngle(direction);

                StepAngle(angle, speed);
            }
            else
            {
                TurnRandomDirection();
            }
        }
示例#2
0
        private bool CanStep(MobDirection direction, int distance)
        {
            float angle = MobDirectionToAngle(direction);

            StepAngle(angle, distance);

            bool ranIntoWall = false;
            List<GameObject> solids = ObjectHolder.Objects.Where(obj => obj is SolidObject || obj is MovingObject).ToList();
            foreach (var solid in solids)
            {
                if (this.IsRectangleColliding(solid))
                {
                    ranIntoWall = true;
                    break;
                }
            }

            StepAngle(angle, -distance);

            return !ranIntoWall;
        }
示例#3
0
        public static float MobDirectionToAngle(MobDirection direction)
        {
            if (direction == MobDirection.Left)
            {
                return Directions.Left;
            }
            else if (direction == MobDirection.Right)
            {
                return Directions.Right;
            }
            else if (direction == MobDirection.Up)
            {
                return Directions.Up;
            }
            else if (direction == MobDirection.Down)
            {
                return Directions.Down;
            }

            return 0;
        }
示例#4
0
        private bool CanStep(MobDirection direction, int distance)
        {
            float angle = MobDirectionToAngle(direction);

            StepAngle(angle, distance);

            bool ranIntoWall         = false;
            List <GameObject> solids = ObjectHolder.Objects.Where(obj => obj is SolidObject || obj is MovingObject).ToList();

            foreach (var solid in solids)
            {
                if (this.IsRectangleColliding(solid))
                {
                    ranIntoWall = true;
                    break;
                }
            }

            StepAngle(angle, -distance);

            return(!ranIntoWall);
        }
示例#5
0
文件: Mob.cs 项目: hmlendea/doom2d
 public Mob()
 {
     Direction = MobDirection.South;
 }
示例#6
0
 public PlayerLegs(Vector2 position, MobDirection direction)
     : base(position, direction)
 {
 }
示例#7
0
        private void StepAvoidingWalls(MobDirection direction)
        {
            if (CanStep(direction, speed))
            {
                float angle = MobDirectionToAngle(direction);

                StepAngle(angle, speed);
            }
            else
            {
                TurnRandomDirection();
            }
        }
示例#8
0
        protected void ChangeDirectionAndImage(MobDirection direction)
        {
            Direction = direction;

            Sprite.Rotation = MobDirectionToAngle(direction);
        }
示例#9
0
 public Mob(Vector2 position, MobDirection direction)
     : base(position)
 {
     ChangeDirectionAndImage(direction);
     Sprite.Origin = new Vector2(Sprite.Image.Width / 2, Sprite.Image.Height / 2);
 }
示例#10
0
 public Mob(Vector2 position)
     : base(position)
 {
     Direction = MobDirection.Up;
     Sprite.Origin = new Vector2(Sprite.Image.Width / 2, Sprite.Image.Height / 2);
 }
示例#11
0
 public PlayerLegs(Vector2 position, MobDirection direction)
     : base(position, direction)
 {
 }
示例#12
0
        private void TurnRandomDirection()
        {
            MobDirection direction = (MobDirection)Randomizer.Rnd.Next(0, 5);

            ChangeDirectionAndImage(direction);
        }