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); } }
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; }