private async Task <bool> Moving() { EnablePulse(); TargetingHelper.TurnCombatOn(); if (!await NavigationCoroutine.MoveTo(_keywardenLocation, 15)) { return(false); } if (_keywardenData.IsAlive) { _keywardenLocation = GetKeywardenLocation(); if (_keywardenLocation == Vector3.Zero) { State = States.Searching; } } else { Logger.Info("[Keywarden] Keywarden shish kebab!"); State = States.Waiting; } return(false); }
public void UpdateAuraTargets() { ClearAuraTargets(); if (!HasAttribute(AttributeName.AuraRange)) { return; } var pos = transform.position; var range = GetAttributeValue(AttributeName.AuraRange); foreach (var auraEffect in AuraEffects) { if (auraEffect.AffectsNpcs) { var npcsInRange = TargetingHelper.GetNpcsInRadius(pos, range); npcsInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect)); } if (auraEffect.AffectsTowers) { var towersInRange = TargetingHelper.GetTowersInRadius(pos, range); towersInRange.ForEach(npc => ApplyAuraEffect(npc, auraEffect)); } } }
public override CognitionState Update() { if (Map.IsPositionDangorous(Unit.LogicPosition)) { return(RememberCurrent().AndChangeStateTo(StatesFactory.CreateStrafing(_target))); } if (_target.IsVisible) { if (ProbabilisticTriggering.TestOnAverageOnceEvery(0.1f)) { _path = Map.PathFinder.FindPath(Unit.LogicPosition, _target.Position); } TargetingHelper.ManageAimingAtTheTarget(_target); var distanceToTarget = (_target.Position - Unit.LogicPosition).magnitude; if (distanceToTarget > 4) { MovementHelper.ManageMovingAlongThePath(_path); } return(this); } return(DisposeCurrent().AndChangeStateTo(StatesFactory.CreateSearching(_target))); }
public Moving(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map, IVisionObserver vision, Vector3 targetPosition) : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision) { _targetPositoon = targetPosition; _path = Map.PathFinder.FindPath(Unit.LogicPosition, _targetPositoon); }
public bool IsGoodTarget(ITarget target, Player controller) { return(TargetingHelper.IsGoodTargetForSpell( target, OwningCard, controller, _p.TargetSelector, _p.Rules.Where(r => r is TargetingRule).Cast <TargetingRule>(), _p.DistributeAmount)); }
public Strafing(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map, IVisionObserver vision, ITarget target) : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision) { _target = target; _path = Map.PathFinder.FindSafespot(Unit.LogicPosition); }
private List <Npc> GetRandomTargets() { var npcs = TargetingHelper.GetNpcsInRadius(Target.transform.position, 3); npcs.Remove(Target); npcs.Shuffle(); return(npcs.Take(OtherTargetsCount).ToList()); }
public ComputerStatesFactory(IMap map, IUnit unit, IVisionObserver vision, MovementHelper movementHelper, TargetingHelper targetingHelper) { _map = map; _unit = unit; _vision = vision; _movementHelper = movementHelper; _targetingHelper = targetingHelper; }
public Searching(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map, IVisionObserver vision, ITargetMemory memory) : base(ComputerStateIds.Chasing, movementHelper, targetingHelper, unit, map, vision) { _targetMemory = memory; _initialDistance = (_targetMemory.LastSeenPosition - Unit.LogicPosition).magnitude; FindPath(); }
private void RefreshNearbyTowers() { UnsubscribeTowerEvents(); var radius = Attributes[AttributeName.AuraRange].Value; _towers = TargetingHelper.GetTowersInRadius(transform.position, radius); _towers.ForEach(tower => { tower.OnLevelUp += HandleTowerLevelUp; }); }
private IEnumerable <Targets> GenerateTargets() { var targetsCandidates = TargetingHelper.GenerateTargets( D._p.Effect.Source.OwningCard, D._p.TargetSelector, D._p.MachineRules.Where(x => x is TargetingRule).Cast <TargetingRule>(), force: true, triggerMessage: D._p.Effect.TriggerMessage <object>()); return(targetsCandidates.Take(Ai.CurrentTargetCount)); }
private IEnumerator ShootPlayers() { while (true) { const float MaxTargetingDistance = 15.0f; TargetingHelper.ShootNearestTarget(pMissile, this.transform.position, MaxTargetingDistance, true); yield return(new WaitForSeconds(1.0f)); } }
private IEnumerator ShootEnemies() { while (true) { const float MaxTargetingDistance = 15.0f; TargetingHelper.ShootNearestTarget(pMissile, this.transform.position, MaxTargetingDistance, false); yield return(new WaitForSeconds(Mathf.Lerp(10.0f, 1.0f, healthManager.GetHealthRatio()))); } }
protected override void Attack(bool triggering = true) { //Does not attack "regulary" var se = new ParticleEffectData("BlacksmithyExplosion", gameObject, new Vector3(0, WeaponHeight, 0), 5); GameManager.Instance.SpecialEffectManager.PlayParticleEffect(se); var r = GetAttributeValue(AttributeName.AttackRange); var npcs = TargetingHelper.GetNpcsInRadius(transform.position, r); npcs.ForEach(npc => { npc.DealDamage(GetAttributeValue(AttributeName.AttackDamage), this); }); }
public Watching(MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map, IVisionObserver vision, Vector3?preferedLookDirection, float timeLimit = 0) : base(ComputerStateIds.Watching, movementHelper, targetingHelper, unit, map, vision) { _preferedLookDirection = preferedLookDirection; if (timeLimit > 0) { _isLimited = true; _timeLimit = timeLimit; } }
protected CognitionState(ComputerStateIds id, MovementHelper movementHelper, TargetingHelper targetingHelper, IUnit unit, IMap map, IVisionObserver vision) { Unit = unit; Id = id; Map = map; Vision = vision; MovementHelper = movementHelper; TargetingHelper = targetingHelper; _nextStateBuilder = new NextStateBuilder(this); StatesFactory = new ComputerStatesFactory(map, unit, vision, movementHelper, targetingHelper); }
private void ZergCheck() { if (PluginSettings.Current.KeywardenZergMode.HasValue && !PluginSettings.Current.KeywardenZergMode.Value) { return; } var corruptGrowthDetectionRadius = ZetaDia.Me.ActorClass == ActorClass.Barbarian ? 30 : 20; var combatState = false; if (_keywardenLocation != Vector3.Zero && _keywardenLocation.Distance(AdvDia.MyPosition) <= 50f) { TargetingHelper.TurnCombatOn(); return; } if (!combatState && ZetaDia.Me.HitpointsCurrentPct <= 0.8f) { combatState = true; } if (!combatState && _keywardenData.Act == Act.A4) { if (ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Any( a => a.IsFullyValid() && KeywardenDataFactory.A4CorruptionSNOs.Contains(a.ActorSnoId) && a.IsAlive & a.Position.Distance(AdvDia.MyPosition) <= corruptGrowthDetectionRadius)) { combatState = true; } } if (!combatState && ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Any(u => u.IsFullyValid() && u.IsAlive && KeywardenDataFactory.GoblinSNOs.Contains(u.ActorSnoId))) { combatState = true; } if (!combatState && ZetaDia.Actors.GetActorsOfType <DiaUnit>(true).Count(u => u.IsFullyValid() && u.IsHostile && u.IsAlive && u.Position.Distance(AdvDia.MyPosition) <= 15f) >= 4) { combatState = true; } if (combatState) { TargetingHelper.TurnCombatOn(); } else { TargetingHelper.TurnCombatOff(); } }
public void EnforceNearbyTower(int goldAmount) { var range = GetAttributeValue(AttributeName.AuraRange); var towers = TargetingHelper.GetTowersInRadius(transform.position, range); towers.Add(this); var tower = towers[_rng.Next(towers.Count)]; if (tower.HasAttribute(AttributeName.AttackDamage)) { var effect = new AttributeEffect(0.5f, AttributeName.AttackDamage, AttributeEffectType.Flat, this); tower.Attributes[AttributeName.AttackDamage].AddAttributeEffect(effect); } }
public override CognitionState Update() { if (!Map.IsPositionDangorous(Unit.LogicPosition)) { return(DisposeCurrent().AndReturnToThePreviousState()); } ProbabilisticTriggering.PerformOnAverageOnceEvery(0.3f, () => _path = Map.PathFinder.FindSafespot(Unit.LogicPosition)); MovementHelper.ManageMovingAlongThePath(_path); if (_target.IsVisible) { TargetingHelper.ManageAimingAtTheTarget(_target); } return(this); }
private bool NotStarted() { DisablePulse(); _keywardenLocation = Vector3.Zero; if (!_keywardenData.IsAlive) { State = States.Completed; return(false); } TargetingHelper.TurnCombatOn(); Logger.Info("[Keywarden] Lets go find da guy with da machina, shall we?"); State = AdvDia.CurrentLevelAreaId == _keywardenData.LevelAreaId ? States.Searching : States.TakingWaypoint; return(false); }
private void CheckExplode(Npc npc, NpcHitData hitData) { if (_stunTriggered) { return; } if (npc.CurrentHealth > npc.Attributes[AttributeName.MaxHealth].Value / 2.0f) { return; } var towers = TargetingHelper.GetTowersInRadius(transform.position, _stunRadius); towers.ForEach(tower => { tower.Stun(_stunDuration, this); }); _stunTriggered = true; }
private async Task <bool> Moving() { EnablePulse(); TargetingHelper.TurnCombatOn(); if (!await NavigationCoroutine.MoveTo(_keywardenLocation, 15)) { return(false); } if (NavigationCoroutine.LastResult == CoroutineResult.Failure && (NavigationCoroutine.LastMoveResult == MoveResult.Failed || NavigationCoroutine.LastMoveResult == MoveResult.PathGenerationFailed)) { var canClientPathTo = await AdvDia.Navigator.CanFullyClientPathTo(_keywardenLocation); if (!canClientPathTo) { State = States.Searching; MoveCooldownUntil = DateTime.UtcNow.AddSeconds(10); Core.Logger.Debug("[Keywarden] Can't seem to get to the keywarden!"); } return(false); } if (_keywardenData.IsAlive) { _keywardenLocation = GetKeywardenLocation(); if (_keywardenLocation == Vector3.Zero) { State = States.Searching; } } else { Core.Logger.Log("[Keywarden] Keywarden shish kebab!"); State = States.Waiting; } return(false); }
private Npc AquireTargetInRange(float range) { var npcs = TargetingHelper.GetNpcsInRadius(transform.position, range); return(npcs.FirstOrDefault()); }