public void MobCanAttackWithWeapon() { var weapon = Substitute.For <IWeapon> (); _mob.Equip(weapon); _attackable = Substitute.For <IAttackable> (); _mob.Attack(_attackable); weapon.Received().Attack(_attackable, _mob.AttackSkill); }
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); }
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); }
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); }
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; } } }
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); }
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); }