コード例 #1
0
        public void MobCanAttackWithWeapon()
        {
            var weapon = Substitute.For <IWeapon> ();

            _mob.Equip(weapon);

            _attackable = Substitute.For <IAttackable> ();

            _mob.Attack(_attackable);

            weapon.Received().Attack(_attackable, _mob.AttackSkill);
        }
コード例 #2
0
ファイル: MobAITest.cs プロジェクト: tai-engineer/Imgeneus
        public void MobCanKillPlayer()
        {
            var map = testMap;
            var mob = new Mob(CrypticImmortal.Id, true, new MoveArea(0, 0, 0, 0, 0, 0), map, mobLoggerMock.Object, databasePreloader.Object);

            var character = CreateCharacter();

            character.IncreaseHP(1);
            Assert.True(character.CurrentHP > 0);

            map.LoadPlayer(character);
            map.AddMob(mob);

            Assert.True(mob.TryGetPlayer());
            mob.Attack(character, 0, Database.Constants.Element.None, 100, 100);

            Assert.True(character.IsDead);
            Assert.Equal(MobState.BackToBirthPosition, mob.State);
        }
コード例 #3
0
        public void MobCanKillPlayer()
        {
            var map = testMap;
            var mob = new Mob(mobLoggerMock.Object, databasePreloader.Object, CrypticImmortal.Id, true, new MoveArea(0, 0, 0, 0, 0, 0), map);

            var character = new Character(loggerMock.Object, gameWorldMock.Object, config.Object, taskQueuMock.Object, databasePreloader.Object, chatMock.Object, linkingMock.Object, dyeingMock.Object)
            {
                Class = Database.Entities.CharacterProfession.Fighter
            };

            character.Client = worldClientMock.Object;
            character.IncreaseHP(1);
            Assert.True(character.CurrentHP > 0);

            map.LoadPlayer(character);
            map.AddMob(mob);

            Assert.True(mob.TryGetPlayer());
            mob.Attack(character, 0, Database.Constants.Element.None, 100, 100);

            Assert.True(character.IsDead);
            Assert.Equal(MobState.BackToBirthPosition, mob.State);
        }
コード例 #4
0
        public override void Update(GameTime gameTime)
        {
            _scene.Update(gameTime, PlayerIndex.One);

            if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Space))
            {
                switch (_scene.SelectedIndex)
                {
                case 0:
                    _mob.Attack(GamePlayScreen.Player.Character.Entity);
                    break;

                case 2:
                    Vector2 center    = GamePlayScreen.Player.Sprite.Center;
                    Vector2 mobCenter = _mob.Sprite.Center;
                    if (center.Y < mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y -= 8;
                    }
                    else if (center.Y > mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y += 8;
                    }
                    else if (center.X < mobCenter.X)
                    {
                        GamePlayScreen.Player.Sprite.Position.X -= 8;
                    }
                    else
                    {
                        GamePlayScreen.Player.Sprite.Position.X += 8;
                    }
                    break;
                }
            }
            base.Update(gameTime);
        }
コード例 #5
0
        public void FightRandomMob(Mob mob)
        {
            _isFighting = true;
            IAbility      abilityToExecute;
            List <string> abilityList    = new List <string>(_gameState.GetCurrentCharacter().GetAbilities().Keys);
            Random        random         = new Random();
            int           rounds         = 0;
            bool          playerHadATurn = false;
            bool          mobHadATurn    = false;

            var playerTurn = random.Next(1, 2);

            mob.SetHp(mob.GetMaxHP());

            string FightMenuChoice;

            while (_isFighting)
            {
                if (CheckCombatRound(playerHadATurn, mobHadATurn))
                {
                    rounds        += 1;
                    playerHadATurn = false;
                    mobHadATurn    = false;
                }

                if (playerTurn == 1)
                {
                    Console.Clear();
                    Console.WriteLine("\n** COMBAT MENU **");

                    StatsAndAbilityTextOutput(abilityList, mob);

                    FightMenuChoice = Console.ReadKey().KeyChar.ToString();

                    AttackTextOutput();

                    bool correctInput = int.TryParse(FightMenuChoice, out int choice);

                    if (!correctInput)
                    {
                        Console.WriteLine("You didn't press an ability, so we basic attacked for you");
                    }

                    abilityToExecute = _gameState.GetCurrentCharacter().GetAbility(abilityList[choice]);
                    if (_gameState.GetCurrentCharacter() is MeleeRageCharacter)
                    {
                        mob = _gameState.GetCurrentCharacter().ExecuteAbility(abilityToExecute, mob);
                    }

                    bool isInCombat = CheckIfStillInCombat(mob);

                    if (isInCombat)
                    {
                        Console.WriteLine($"You hit the {mob.GetCreepKind()} for {_gameState.GetCurrentCharacter().GetLatestDamageDone()} damage");
                    }
                    playerTurn     = 2;
                    playerHadATurn = true;
                }
                else if (playerTurn == 2)
                {
                    Console.WriteLine($"\n{mob.GetCreepKind()} is attacking!");
                    Thread.Sleep(1000);

                    AttackTextOutput();

                    mob.Attack(_gameState.GetCurrentCharacter());

                    bool isInCombat = CheckIfStillInCombat(mob);

                    if (isInCombat)
                    {
                        Console.WriteLine($"The {mob.GetCreepKind()} hit you for {mob.GetLatestDamageDone()} damage");
                        Console.WriteLine("\nContinue..");
                        Console.ReadKey();
                    }
                    playerTurn  = 1;
                    mobHadATurn = true;
                }
            }
        }
コード例 #6
0
        public override void Update(GameTime gameTime)
        {
            _queueTimer += gameTime.ElapsedGameTime.TotalSeconds;

            if (_queueTimer > 2)
            {
                if (GameState._descriptions.Count > 0)
                {
                    GameState._descriptions.Dequeue();
                }

                _queueTimer = 0;
            }

            if (!_displayActionTexture)
            {
                _scene.Update(gameTime, PlayerIndex.One);
            }

            if (GamePlayScreen.Player.Character.Entity.Health.CurrentValue <= 0)
            {
                StateManager.ChangeState(GameRef.GameOverScreen);
            }

            if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Space) && !_displayActionTexture)
            {
                switch (_scene.SelectedIndex)
                {
                case 0:
                    _queueTimer = 0;
                    if (GamePlayScreen.Player.Character.Entity.Dexterity >= _mob.Entity.Dexterity)
                    {
                        _descriptions.Enqueue($"You attack the {_mob.Entity.EntityClass}.");
                        _mob.Attack(GamePlayScreen.Player.Character.Entity);

                        if (_mob.Entity.Health.CurrentValue <= 0)
                        {
                            StateManager.PopState();
                            StateManager.PushState(GameRef.LootScreen);
                            GamePlayScreen.Player.Character.Entity.AddExperience(_mob.XPValue);
                            GameRef.LootScreen.Gold = _mob.GoldDrop;

                            foreach (var i in _mob.Drops)
                            {
                                GameRef.LootScreen.Items.Add(i);
                            }

                            return;
                        }

                        _descriptions.Enqueue($"The {_mob.Entity.EntityClass} attacks you.");
                        _mob.DoAttack(GamePlayScreen.Player.Character.Entity);
                    }
                    else
                    {
                        _descriptions.Enqueue($"The {_mob.Entity.EntityClass} attacks you.");
                        _mob.DoAttack(GamePlayScreen.Player.Character.Entity);
                        _descriptions.Enqueue($"You attack the {_mob.Entity.EntityClass}.");
                        _mob.Attack(GamePlayScreen.Player.Character.Entity);

                        if (_mob.Entity.Health.CurrentValue <= 0)
                        {
                            StateManager.PopState();
                            StateManager.PushState(GameRef.LootScreen);

                            GamePlayScreen.Player.Character.Entity.AddExperience(_mob.XPValue);
                            foreach (var i in _mob.Drops)
                            {
                                GameRef.LootScreen.Items.Add(i);
                            }

                            return;
                        }
                    }
                    break;

                case 1:
                    _displayActionTexture = true;

                    _actions.Clear();
                    Entity entity = GamePlayScreen.Player.Character.Entity;

                    if (entity.Mana.MaximumValue > 0)
                    {
                        foreach (SpellData s in DataManager.SpellData.SpellData.Values)
                        {
                            foreach (string c in s.AllowedClasses)
                            {
                                if (c == entity.EntityClass && entity.Level >= s.LevelRequirement)
                                {
                                    _actions.Add(s.Name);
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (TalentData s in DataManager.TalentData.TalentData.Values)
                        {
                            foreach (string c in s.AllowedClasses)
                            {
                                if (c == entity.EntityClass && entity.Level >= s.LevelRequirement)
                                {
                                    _actions.Add(s.Name);
                                }
                            }
                        }
                    }
                    return;

                case 2:
                    Vector2 center    = GamePlayScreen.Player.Sprite.Center;
                    Vector2 mobCenter = _mob.Sprite.Center;
                    _action = 0;

                    if (center.Y < mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y -= 8;
                    }
                    else if (center.Y > mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y += 8;
                    }
                    else if (center.X < mobCenter.X)
                    {
                        GamePlayScreen.Player.Sprite.Position.X -= 8;
                    }
                    else
                    {
                        GamePlayScreen.Player.Sprite.Position.X += 8;
                    }

                    StateManager.PopState();
                    break;
                }
            }

            if (_displayActionTexture)
            {
                if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Escape))
                {
                    _displayActionTexture = false;
                    return;
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Space))
                {
                    DoAction();
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Down))
                {
                    _action++;

                    if (_action >= _actions.Count)
                    {
                        _action = 0;
                    }
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Up))
                {
                    _action--;

                    if (_action < 0)
                    {
                        _action = _actions.Count - 1;
                    }
                }
            }

            base.Update(gameTime);
        }
コード例 #7
0
        public override void Update(GameTime gameTime)
        {
            if (!_displayActionTexture)
            {
                _scene.Update(gameTime, PlayerIndex.One);
            }

            if (GamePlayScreen.Player.Character.Entity.Health.CurrentValue <= 0)
            {
                StateManager.ChangeState(GameRef.GameOverScreen);
            }

            if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Space) && !_displayActionTexture)
            {
                switch (_scene.SelectedIndex)
                {
                case 0:
                    if (GamePlayScreen.Player.Character.Entity.Dexterity >= _mob.Entity.Dexterity)
                    {
                        _mob.Attack(GamePlayScreen.Player.Character.Entity);

                        if (_mob.Entity.Health.CurrentValue <= 0)
                        {
                            StateManager.PopState();
                            return;
                        }

                        _mob.DoAttack(GamePlayScreen.Player.Character.Entity);
                    }
                    else
                    {
                        _mob.DoAttack(GamePlayScreen.Player.Character.Entity);
                        _mob.Attack(GamePlayScreen.Player.Character.Entity);

                        if (_mob.Entity.Health.CurrentValue <= 0)
                        {
                            StateManager.PopState();
                            return;
                        }
                    }
                    break;

                case 1:
                    _displayActionTexture = true;

                    _actions.Clear();
                    Entity entity = GamePlayScreen.Player.Character.Entity;

                    if (entity.Mana.MaximumValue > 0)
                    {
                        foreach (SpellData s in DataManager.SpellData.SpellData.Values)
                        {
                            foreach (string c in s.AllowedClasses)
                            {
                                if (c == entity.EntityClass && entity.Level >= s.LevelRequirement)
                                {
                                    _actions.Add(s.Name);
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (TalentData s in DataManager.TalentData.TalentData.Values)
                        {
                            foreach (string c in s.AllowedClasses)
                            {
                                if (c == entity.EntityClass && entity.Level >= s.LevelRequirement)
                                {
                                    _actions.Add(s.Name);
                                }
                            }
                        }
                    }
                    return;

                case 2:
                    Vector2 center    = GamePlayScreen.Player.Sprite.Center;
                    Vector2 mobCenter = _mob.Sprite.Center;
                    _action = 0;

                    if (center.Y < mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y -= 8;
                    }
                    else if (center.Y > mobCenter.Y)
                    {
                        GamePlayScreen.Player.Sprite.Position.Y += 8;
                    }
                    else if (center.X < mobCenter.X)
                    {
                        GamePlayScreen.Player.Sprite.Position.X -= 8;
                    }
                    else
                    {
                        GamePlayScreen.Player.Sprite.Position.X += 8;
                    }

                    StateManager.PopState();
                    break;
                }
            }

            if (_displayActionTexture)
            {
                if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Escape))
                {
                    _displayActionTexture = false;
                    return;
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Space))
                {
                    DoAction();
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Down))
                {
                    _action++;

                    if (_action >= _actions.Count)
                    {
                        _action = 0;
                    }
                }
                else if (InputHandler.KeyReleased(Microsoft.Xna.Framework.Input.Keys.Up))
                {
                    _action--;

                    if (_action < 0)
                    {
                        _action = _actions.Count - 1;
                    }
                }
            }

            base.Update(gameTime);
        }