/// <summary> /// Mets à jour le déplacement du héros en fonction des entrées du joueur humain. /// </summary> void UpdateHeroMovement() { // Mouvement du héros. var ms = Input.GetMouseState(); Vector2 pos = MapRdr.ToMapSpace(new Vector2(ms.X, ms.Y)); if (Input.IsRightClickPressed() && m_client.Snapshot.GetPassabilityAt(pos)) { float dst = Vector2.Distance(pos, Hero.Position); // Obtient les entités targettables par le héros à portée. var entities = GameServer.GetMap().Entities.GetEntitiesInSight(Hero.Type). GetAliveEntitiesInRange(pos, 1).Where(delegate(KeyValuePair <int, EntityBase> kvp) { EntityType ennemyteam = (Hero.Type & EntityType.Teams) ^ EntityType.Teams; return(kvp.Value.Type.HasFlag(ennemyteam) || EntityType.AllTargettableNeutral.HasFlag(kvp.Value.Type)); }).ToList(); // Utilise l'arme sur le héros. if (entities.Count != 0) { if (Hero.Weapon.Use(Hero, entities.First().Value) == SpellUseResult.Success) { m_hero.EndMoveTo(); m_hero.Path = null; } } // Si on effectue une auto attaque if (entities.Count == 0 || dst > Hero.Weapon.GetAttackSpell().TargetType.Range) { m_hero.Path = new Trajectory(new List <Vector2>() { pos }); } } if (m_hero.Path != null && m_hero.IsBlockedByWall) { m_hero.StartMoveTo(m_hero.Path.LastPosition()); } // Vision range if (ms.ScrollWheelValue - __oldScroll < 0) { m_hero.VisionRange--; } else if (ms.ScrollWheelValue - __oldScroll > 0) { m_hero.VisionRange++; } }
/// <summary> /// Mets à jour le déplacement du héros en fonction des entrées du joueur humain. /// </summary> void UpdateHeroMovement() { // Mouvement du héros. var ms = Input.GetMouseState(); Vector2 pos = MapRdr.ToMapSpace(new Vector2(ms.X, ms.Y)); if (Input.IsRightClickTrigger() && GameServer.GetMap().GetPassabilityAt(pos)) { float dst = Vector2.Distance(pos, Hero.Position); // Obtient les entités targettables par le héros à portée. var entities = GameServer.GetMap().Entities.GetEntitiesInSight(Hero.Type). GetAliveEntitiesInRange(pos, 1).Where(delegate(KeyValuePair <int, EntityBase> kvp) { EntityType ennemyteam = (Hero.Type & EntityType.Teams) ^ EntityType.Teams; return(kvp.Value.Type.HasFlag(ennemyteam) || EntityType.AllTargettableNeutral.HasFlag(kvp.Value.Type)); }).ToList(); // Utilise l'arme sur le héros. bool hasAttacked = false; if (Hero.Weapon != null) { if (entities.Count != 0) { float range = Hero.Weapon.GetAttackSpell().TargetType.Range; if (Hero.Weapon.Use(Hero, entities.First().Value) == SpellUseResult.Success || Vector2.Distance(m_hero.Position, entities.First().Value.Position) <= range) { m_hero.EndMoveTo(); m_hero.Path = null; hasAttacked = true; } } } // Si on effectue pas d'auto attaque => on peut avancer. if (entities.Count == 0 || !hasAttacked) { // Si on peut bouger en ligne droite, on le fait if (m_client.Controler.GetMap().CanMoveLine(this.Hero.Position, pos)) { m_hero.Path = new Trajectory(new List <Vector2>() { pos }); } else { // Sinon : on calcule le chemin. m_hero.StartMoveTo(pos); } } } // Vision range if (ms.ScrollWheelValue - __oldScroll < 0) { m_hero.VisionRange--; } else if (ms.ScrollWheelValue - __oldScroll > 0) { m_hero.VisionRange++; } }