예제 #1
0
        /// <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++;
            }
        }
예제 #2
0
        /// <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++;
            }
        }