private void AddWard <T>(EnemyHero enemy) where T : IWard { var wardPosition = enemy.WardPosition(); if (units.OfType <T>() .Any( x => !x.RequiresUpdate && Game.RawGameTime - x.CreateTime < 1 && x.Distance(wardPosition) <= x.UpdatableDistance && enemy.Angle(x) < 0.5)) { return; } var shiftPosition = units.OfType <IWard>().Any(x => x.Distance(wardPosition) <= 50); if (shiftPosition) { wardPosition += new Vector3(60, 0, 0); } var ward = (IWard)Activator.CreateInstance(typeof(T), wardPosition, settings); units.Add(ward); if (settings.PingWards) { UpdateManager.BeginInvoke(() => PingWard(ward), 1000); } }
private void AddWard <T>(EnemyHero enemy) where T : Ward { var wardPosition = enemy.WardPosition(); var wardExists = units.OfType <T>().Any(x => !x.RequiresUpdate && x.Distance(wardPosition) <= 400 && enemy.Angle(x) < 0.5); if (wardExists) { return; } var shiftPosition = units.OfType <Ward>().Any(x => x.Distance(wardPosition) <= 50); if (shiftPosition) { wardPosition += new Vector3(60, 0, 0); } units.Add((T)Activator.CreateInstance(typeof(T), wardPosition)); }
private void AddWard <T>(EnemyHero enemy) where T : IWard { var wardPosition = enemy.WardPosition(); if (units.OfType <T>() .Any( x => !x.RequiresUpdate && Game.RawGameTime - x.CreateTime < 1 && x.Distance(wardPosition) <= x.UpdatableDistance && enemy.Angle(x) < 0.5)) { return; } var shiftPosition = units.OfType <IWard>().Any(x => x.Distance(wardPosition) <= 50); if (shiftPosition) { wardPosition += new Vector3(60, 0, 0); } units.Add((IUnit)Activator.CreateInstance(typeof(T), wardPosition, settings)); }