Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / enemy / NoWeaponEnemy.cs
  1.  
  2. using Config;
  3. using Godot;
  4.  
  5. /// <summary>
  6. /// 没有武器的敌人
  7. /// </summary>
  8. [Tool]
  9. public partial class NoWeaponEnemy : Enemy
  10. {
  11. public override void OnInit()
  12. {
  13. base.OnInit();
  14. NoWeaponAttack = true;
  15. AnimationPlayer.AnimationFinished += OnAnimationFinished;
  16. }
  17.  
  18. public override void Attack()
  19. {
  20. if (AnimationPlayer.CurrentAnimation != AnimatorNames.Attack)
  21. {
  22. AnimationPlayer.Play(AnimatorNames.Attack);
  23. }
  24. }
  25.  
  26. public void ShootBullet()
  27. {
  28. var targetPosition = LookTarget.GetCenterPosition();
  29. var bulletData = FireManager.GetBulletData(this, 0, ExcelConfig.BulletBase_Map["0006"]);
  30. for (var i = 0; i < 8; i++)
  31. {
  32. var data = bulletData.Clone();
  33. var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + + Utils.Random.RandomRangeInt(-30, 30));
  34. FireManager.SetParabolaTarget(data, tempPos);
  35. FireManager.ShootBullet(data, AttackLayer);
  36. }
  37. }
  38.  
  39. protected override void OnDie()
  40. {
  41. var realVelocity = GetRealVelocity();
  42. var effPos = Position;
  43. var debris = Create(Ids.Id_enemy_dead0002);
  44. debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
  45. debris.MoveController.AddForce(Velocity + realVelocity);
  46. debris.SetFace(Face);
  47. //派发敌人死亡信号
  48. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  49. Destroy();
  50. }
  51.  
  52. private void OnAnimationFinished(StringName name)
  53. {
  54. if (name == AnimatorNames.Attack)
  55. {
  56. AttackTimer = 2f;
  57. }
  58. }
  59. }