private void Think(float elapsedMs) { if (player != null) { CheckCover(); if (SearchPlayer()) { if (inHand.AmmoInMag > 0) { if (!covered) { if (Aim(player.Position)) { Weapon.FireState state = Attack(player); switch (state) { case Weapon.FireState.OutOfAmmo: //Stop thinking? Destroy(); break; } } } } else { if (!inHand.Reloading) { Reload(); } } } else { elapsedTimeSinceContact += elapsedMs; if (elapsedTimeSinceContact > 1000f && !inHand.Reloading && inHand.AmmoInMag < inHand.MaxMagSize) { Reload(); } if (elapsedTimeSinceContact > 5000f) { if (Rotation != defaultRotation) { Aim(Position + Helpers.ConvertToDirection(Position, defaultRotation)); } } else { Aim(lastKnownPosition); } } } }
private void Think(float elapsedMs) { if (npcs != null) { if (SearchPlayer()) { if (inHand.AmmoInMag > 0) { if (Aim(npcsInView[0].Center, Center)) { if (inHand.Reloading) { if (inHand.Slot == Weapon.WeaponSlot.Primary) { SwitchWeapon(Weapon.WeaponSlot.Secondary); } else { SwitchWeapon(Weapon.WeaponSlot.Primary); } } if (inHand.AmmoInMag > 0 && !inHand.Reloading) { Weapon.FireState state = Attack(npcsInView[0]); switch (state) { case Weapon.FireState.OutOfAmmo: //Stop thinking? Destroy(); break; } } } } else { if (!inHand.Reloading) { Reload(); } } } else { elapsedTimeSinceContact += elapsedMs; if (elapsedTimeSinceContact > 1000f && !inHand.Reloading && inHand.AmmoInMag / inHand.MaxMagSize < 0.2f) { Reload(); } if (elapsedTimeSinceContact < 2000f) { Aim(lastKnownPosition, Center); } else { Move(); Aim(Position + direction, Position, true); } } if (Vector2.Distance(prevPosition, Position) > 5) { elapsedTimeDoingNothing = 0; } elapsedTimeDoingNothing += elapsedMs; if (elapsedTimeDoingNothing > 10000) { health.ChangeHealth(this, -health.MaxHealth); } prevPosition = Position; } }