示例#1
0
        /// <summary>
        /// Builds main character with its base spritesheet and animations.
        /// </summary>
        public Slime()
            : base(spriteSheetPath, new Point(32, 42))
        {
            Category = "Enemy";

            TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300);

            SpriteSheet.AddAnimation("stopped", "left", line: 3, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 2, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 1, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 0, frameDuration: stoppedFrameDuration);

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("walking", "left", line: 3, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 0, frameDuration: walkFrameDuration);

            Padding = new Rectangle(6, 11, 6, 6);

            Speed = 32 * 3;

            Health = new Container(1);
            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new FollowBehavior("Player", 5)
            {
                MaxDistance = 32 * 4
            },
                new WalkAroundBehavior()
                );
        }
示例#2
0
 public SavePoint()
     : base(@"sprites/Objects/SavePoint.png", new Point(32, 32))
 {
     OverlapEntities = true;
     Health          = null;
     SpriteSheet.AddAnimation("stopped", "down", line: 0, frameDuration: TimeSpan.FromMilliseconds(500));
 }
示例#3
0
        /// <summary>
        /// Builds main character with its base spritesheet and animations.
        /// </summary>
        public Crab()
            : base(spriteSheetPath, new Point(32, 32))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration);


            SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration);

            Padding = new Rectangle(6, 11, 6, 6);

            Speed = 100;

            Health = new Container(2);
            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(),
                new FollowBehavior("Player", 5)
            {
                MaxDistance = 32 * 3
            }
                );
        }
示例#4
0
 public Entrance(int dungeon) : base(@"sprites/Objects/Empty.png", new Point(32, 32))
 {
     IsInvisible     = true;
     Dungeon         = dungeon;
     OverlapEntities = true;
     Health          = null;
     SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: TimeSpan.FromDays(1));
 }
示例#5
0
 public Bow()
     : base(@"sprites\Objects\bow.png", new Point(30, 30))
 {
     OverlapEntities = true;
     Origin          = new Vector2(Size.X / 2, Size.Y / 2);
     SpriteSheet.AddAnimation("unloaded", "default", line: 0, frameDuration: TimeSpan.Zero);
     SpriteSheet.AddAnimation("loaded", "default", line: 1, frameDuration: TimeSpan.Zero);
 }
示例#6
0
        public Poltergeist()
            : base("sprites/characters/oldman.png", 4, 1)
        {
            TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300);

            SpriteSheet.AddAnimation("stopped", "down", frameIndexes: new int[] { 0 }, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", frameIndexes: new int[] { 1 }, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", frameIndexes: new int[] { 2 }, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "top", frameIndexes: new int[] { 3 }, frameDuration: stoppedFrameDuration);

            Padding = new Rectangle(0, 11, 0, 0);

            Health = new Container(10);
            Look(new Vector2(0, 1), true);
        }
示例#7
0
        /// <summary>
        /// Builds main character with its base spritesheet and animations.
        /// </summary>
        public Player()
            : base(spriteSheetPath, 9, 13)
        {
            Category = "Player";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "up", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 3, count: 1, frameDuration: walkFrameDuration);


            SpriteSheet.AddAnimation("walking", "up", line: 0, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 2, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 3, skipFrames: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("dying", "default", line: 12, count: 6, frameDuration: walkFrameDuration, repeat: false);

            Padding = new Rectangle(22, 32, 22, 2);

            Speed = 32 * 5;

            Health = new Container(8);
            Look(new Vector2(0, 1), true);

            GetBehavior <BlinkBehavior>().BlinkDuration = TimeSpan.FromSeconds(1);

            _controller1Behavior          = new InputBehavior(InputType.Controller, 0);
            _controller2Behavior          = new InputBehavior(InputType.Controller, 1);
            _controller2Behavior.OnEnter += controllerBehavior_OnEnter;

            _keyboardBehavior          = new InputBehavior(InputType.Keyboard);
            _keyboardBehavior.OnEnter += controllerBehavior_OnEnter;

            AddBehavior(
                _controller1Behavior,
                _keyboardBehavior
                );
            Arrows = new Container(50);
            Magic  = new Container(10);

            DisplayName = "Player 1";
        }
        public BoomerangSkeleton()
            : base(spriteSheetPath, 3, 4)
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration);

            Padding = new Rectangle(4, 38, 4, 2);

            Speed = 32 * 3;

            Health = new Container(10);
            Magic  = new Container(10);

            CurrentDirection = new Vector2(0, 1);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new SwordAttackBehavior("Player")
            {
                MaxDistance = 32 * 2
            },
                new AvoidBehavior(e => e.Category == "Player", 32 * 4),
                new BoomerangAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32),// { MinDistance = 5 * 32 },
                new FollowBehavior("Player", 5)
            {
                MaxDistance = float.MaxValue
            }
                );
            AddWeapon(new Boomerang());
            AddWeapon(new Sword());

            GetBehavior <DropItemsBehavior>().AutomaticAllowWeapons = true;
        }
示例#9
0
        public WaterDragon()
            : base(spriteSheetPath, new Point(149, 129))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration);

            Padding = new Rectangle(23, 50, 23, 20);

            _baseSpeed = 32 * 4;
            Speed      = 32 * 4;

            Health = new Container(10);
            Magic  = new Container(1);

            Health.ValueChanged += Health_ValueChanged;
            Magic.ValueChanged  += Magic_ValueChanged;

            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new FireWandAttackBehavior("Player", 32 * 5, 32 * 10),
                new WalkAroundBehavior {
                MaxStoppedTime = TimeSpan.Zero, SpeedMultiplier = 1
            }
                );
            AddWeapon(new FireWand {
                MaxFireBallFlyTime = TimeSpan.FromSeconds(2)
            });

            Hold(new HealthContainer("WaterDragon"));
        }
示例#10
0
        public Goon()
            : base(spriteSheetPath, new Point(64, 64))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "up", line: 8, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 9, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 10, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 11, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "up", line: 8, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 9, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 10, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 11, count: 6, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("dying", "default", line: 20, count: 6, frameDuration: walkFrameDuration, repeat: false);

            Padding = new Rectangle(28, 36, 28, 2);

            Speed = 32 * 3;

            Health = new Container(4);

            Look(new Vector2(0, 1), true);

            AddBehavior(
                new AttackTheAttackerBehavior(),
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new FollowBehavior("Player", 5)
            {
                MaxDistance = 32 * 3
            },
                new BowAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32),
                new WalkAroundBehavior()
                );
            AddWeapon(new Bow());

            Arrows = new Container(20);
        }
示例#11
0
        /// <summary>
        /// Builds main character with its base spritesheet and animations.
        /// </summary>
        public Bat()
            : base(spriteSheetPath, new Point(18, 16))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(50);

            SpriteSheet.AddAnimation("default", "default", line: 0, frameDuration: walkFrameDuration);

            Padding = new Rectangle(1, 2, 1, 6);

            Speed = 32 * 4;

            Health           = new Container(1);
            CurrentDirection = new Vector2(0, 1);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new TouchAndDodgeBehavior("Player", 32 * 2)
                );
        }
示例#12
0
        public Skeleton()
            : base(spriteSheetPath, new Point(32, 64))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration);

            Padding = new Rectangle(4, 38, 4, 2);

            Speed = 32 * 3;

            Health = new Container(5);

            CurrentDirection = new Vector2(0, 1);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new SwordAttackBehavior("Player")
            {
                MaxDistance = 300
            },
                new FollowBehavior("Player", 5)
            {
                MaxDistance = float.MaxValue
            }                                                                   //,
                //new WalkAroundBehavior { MaxStoppedTime = TimeSpan.FromSeconds(2) }
                );
            AddWeapon(new Sword());
        }
示例#13
0
        public Knight()
            : base(spriteSheetPath, 9, 13)
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "up", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 3, count: 1, frameDuration: walkFrameDuration);


            SpriteSheet.AddAnimation("walking", "up", line: 0, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 2, skipFrames: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 3, skipFrames: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("dying", "default", line: 12, count: 6, frameDuration: walkFrameDuration, repeat: false);

            Padding = new Rectangle(4, 20, 4, 2);

            Speed = 32 * 2.5f;

            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new SwordAttackBehavior("Player")
            {
                MaxDistance = 300
            },
                new WalkAroundBehavior()
                );
            AddWeapon(new Sword());

            Hold(new HealthContainer("Knight"));
        }
        public MasterGoon()
            : base(spriteSheetPath, new Point(96, 96))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "up", line: 8, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 9, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 10, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 11, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "up", line: 8, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 9, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 10, count: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 11, count: 6, frameDuration: walkFrameDuration);

            Padding = new Rectangle(28, 36, 28, 2);

            Speed = 32 * 3.5f;

            Health = new Container(8);

            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new AvoidBehavior(e => e.Category == "Player", 32 * 4),
                new BowAttackBehavior("Player", shootDistance: 32 * 30, maxDistance: 32 * 32),
                new WalkAroundBehavior()
                );
            AddWeapon(new Bow());

            GetBehavior <DropItemsBehavior>().AutomaticAllowWeapons = true;

            Arrows = new Container(20);
        }
示例#15
0
        public Zombie()
            : base(spriteSheetPath, new Point(32, 64))
        {
            Category = "Enemy";

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "left", line: 1, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 2, count: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 3, count: 1, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("walking", "down", line: 0, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "left", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 3, frameDuration: walkFrameDuration);

            Padding = new Rectangle(4, 38, 4, 2);

            Speed = 32 * 3;

            Health = new Container(3);

            Look(new Vector2(0, 1), true);

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                new FollowBehavior("Player", 5)
            {
                MaxDistance = 32 * 10
            },
                new WalkAroundBehavior {
                MaxStoppedTime = TimeSpan.Zero
            }
                );
        }
示例#16
0
 public Item() : base(@"sprites/Objects/Empty.png", new Point(32, 32))
 {
     OverlapEntities = false;
     Health          = null;
     SpriteSheet.AddAnimation("stopped", "down", line: 0, count: 1, frameDuration: TimeSpan.FromDays(1));
 }
示例#17
0
        /// <summary>
        /// Builds main character with its base spritesheet and animations.
        /// </summary>
        public SlimeWorm()
            : base(spriteSheetPath, new Point(40, 34))
        {
            Category = "Enemy";

            TimeSpan stoppedFrameDuration = TimeSpan.FromMilliseconds(300);

            SpriteSheet.AddAnimation("stopped", "left", line: 3, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "down", line: 2, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "right", line: 1, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped", "up", line: 0, frameDuration: stoppedFrameDuration);

            TimeSpan walkFrameDuration = TimeSpan.FromMilliseconds(100);

            SpriteSheet.AddAnimation("walking", "left", line: 3, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "down", line: 2, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "right", line: 1, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking", "up", line: 0, frameDuration: walkFrameDuration);

            SpriteSheet.AddAnimation("stopped-front", "left", line: 7, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped-front", "down", line: 6, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped-front", "right", line: 5, frameDuration: stoppedFrameDuration);
            SpriteSheet.AddAnimation("stopped-front", "up", line: 4, frameDuration: stoppedFrameDuration);

            SpriteSheet.AddAnimation("walking-front", "left", line: 7, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking-front", "down", line: 6, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking-front", "right", line: 5, frameDuration: walkFrameDuration);
            SpriteSheet.AddAnimation("walking-front", "up", line: 4, frameDuration: walkFrameDuration);

            //Padding = new Rectangle(6, 11, 6, 6);

            Speed = 32 * 6;

            _frontHealth  = new Container(8);
            _normalHealth = new Container(2);

            Health = _normalHealth;
            Look(new Vector2(0, 1), true);

            var chainBehavior = new ChainBehavior <SlimeWorm> {
                MaxDistance = 32 * 7
            };

            AddBehavior(
                new HitOnTouchBehavior(e => e.Category == "Player"),
                chainBehavior,
                new AvoidBehavior(e =>
            {
                if (e == this || chainBehavior.Following != e)
                {
                    return(false);
                }
                var beh = e.GetBehavior <ChainBehavior <SlimeWorm> >();
                return(beh != null && beh.Following == null);
            }),
                new SpiralAttackBehavior("Player", 32 * 8)
            {
                MaxDistance = 32 * 12
            },
                new WalkAroundBehavior {
                MaxStoppedTime = TimeSpan.Zero, MaxWalkingTime = TimeSpan.MaxValue, SpeedMultiplier = 1
            }
                );

            GetBehavior <DropItemsBehavior>().DropOnDeath((gameTime, level) =>
            {
                if (!level.GetEntities <SlimeWorm>().Any(e => e != this))
                {
                    return(new HealthContainer("SlimeWorm"));
                }
                return(null);
            });
        }