private static Unit GetClosestCreep(CreepWaves creepWave) { float[] distance = { float.MaxValue }; Unit closest = null; try { var creeps = creepWave.Creeps; foreach (var creep in creeps.Where(creep => creep.IsValidTarget() && distance[0] > creepWave.meepo.Distance2D(creep.Position)) ) { distance[0] = creepWave.meepo.Distance2D(creep.Position); closest = creep; } return(closest ?? ObjectManager .GetEntities <Unit>( ).Where( x => x.IsAlive && x.IsVisible && x.IsValidTarget() && x.Team != me.Team && (x.ClassID == ClassID.CDOTA_BaseNPC_Barracks || x.ClassID == ClassID.CDOTA_BaseNPC_Tower || x.ClassID == ClassID.CDOTA_BaseNPC_Building ) && x.Distance2D(creepWave.Position) < 2000) .OrderBy(x => x.Distance2D(creepWave.meepo)) .DefaultIfEmpty(null) .FirstOrDefault()); } catch (Exception) { // ignore errors } return(closest); }
private void OnEntityAdded(object sender, Creep creep) { if (!creep.IsValid || creep.Team == myTeam || creep.UnitType != 1152) { return; } var wave = CreepWaves.FirstOrDefault(x => !x.IsSpawned && x.Creeps.Any(z => z.Distance2D(creep) < 300)); if (wave != null) { wave.Creeps.Add(creep); } else { var laneData = lanePaths.GetLaneData(creep.Position); if (laneData == null) { return; } var newWave = new CreepWave(laneData.Value, creep.Team); newWave.Creeps.Add(creep); CreepWaves.Add(newWave); } }
private void SpawnCreepWaves() { foreach (var creepWave in CreepWaves.Where(x => !x.IsSpawned)) { creepWave.Spawn(); } }
private void AddCreepWaves() { foreach (var wave in Waves) { CreepWaves.Add(new CreepWave(wave)); } WaveGenerator = new WaveGenerator(CreepWaves); }
public void Dispose() { IsActive = false; Entity.OnBoolPropertyChange -= OnBoolPropertyChange; Entity.OnInt32PropertyChange -= OnInt32PropertyChange; EntityManager <Creep> .EntityAdded -= OnEntityAdded; EntityManager <Creep> .EntityRemoved -= OnEntityRemoved; CreepWaves.Clear(); }
private static Vector3 GetNextWave(CreepWaves creepWave) { float[] distance = { float.MaxValue }; var p = 0; var coords = creepWave.Coords.ToArray(); for (var i = 0; i < coords.Length; i++) { if (coords[i].Distance2D(creepWave.meepo.Position) < distance[0]) { distance[0] = coords[i].Distance2D(creepWave.meepo.Position); p = i + 1 < coords.Length ? i + 1 : i; } } return(coords[p]); }
private void OnEntityRemoved(object sender, Creep creep) { if (!creep.IsValid || creep.Team == myTeam || creep.UnitType != 1152) { return; } var wave = CreepWaves.FirstOrDefault(x => x.Creeps.Contains(creep)); if (wave == null) { return; } wave.Creeps.Remove(creep); if (wave.Creeps.Any(x => x.IsValid)) { return; } CreepWaves.Remove(wave); }
private static Vector3 GetClosestWave(CreepWaves creepWave) { var pos = new Vector3(); try { float[] distance = { float.MaxValue }; foreach (var position in creepWave.Coords) { if (!(position.Distance2D(creepWave.Position) < distance[0])) { continue; } distance[0] = position.Distance2D(creepWave.Position); pos = position; } return(pos); } catch (Exception) { Console.WriteLine("Error GetClosestWave"); } return(pos); }
private void OnEntityRemoved(object sender, Creep creep) { if (!creep.IsValid || creep.Team == myTeam || creep.ClassId != ClassId.CDOTA_BaseNPC_Creep_Lane && creep.ClassId != ClassId.CDOTA_BaseNPC_Creep_Siege) { return; } var wave = CreepWaves.FirstOrDefault(x => x.Creeps.Contains(creep)); if (wave == null) { return; } wave.Creeps.Remove(creep); if (wave.Creeps.Any(x => x.IsValid)) { return; } CreepWaves.Remove(wave); }