Esempio n. 1
0
        public override void Aggro(Level level)
        {
            GameCharacter hero = null;

            foreach(GameCharacter g in level.GetCharactersIsFriendly(true))
            {
                hero = g;
                break;
            }

            if(AStar.getPathBetween(level, level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(hero)).Length < 4)
            {
                targets.Add(hero);
            }
        }
Esempio n. 2
0
        public override bool Aggro(Level level)
        {
            bool targetFound = false;

            IEnumerable<GameCharacter> chars = level.GetCharactersIsFriendly(true);

            if (target != null)
            {
                bool tIsPossible = false;
                Direction[] tPath = AStar.getPathBetween(level, level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(target), ref tIsPossible);
                if (tIsPossible)
                {
                    if (tPath.Length > deAggroRange)
                    {
                        target = null;
                    }
                    else
                    {
                        targetFound = true;
                    }
                }
                else
                {
                    target = null;
                }
            }

            foreach (GameCharacter g in chars)
            {
                GameCharacter hero = g;

                bool canSee = false;
                Direction[] nextPath;

                if (AStar.calculateHeuristic(level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(g)) < aggroRange)
                {
                    nextPath = AStar.getPathBetween(level, level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(hero), ref canSee);
                    if (canSee && target == null && nextPath.Length < aggroRange)
                    {
                        target = hero;
                        targetFound = true;
                    }
                    else if (canSee && target != null && nextPath.Length < AStar.getPathBetween(level, level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(target)).Length)
                    {
                        target = hero;
                        targetFound = true;
                    }
                }

                break;
            }

            if (targetFound)
            {
                foreach (Enemy e in GetAllEnemies())
                {
                    if (AStar.calculateHeuristic(level.CharacterEntities.FindPosition(this), level.CharacterEntities.FindPosition(e)) < 3)
                    {
                        e.ForceAggro(target);
                    }
                }
            }

            return targetFound;
        }