Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / enemy / NoWeaponEnemy.cs
@小李xl 小李xl on 26 Mar 2024 2 KB 抽出 Gold.CreateGold()
  1.  
  2. using Config;
  3. using Godot;
  4.  
  5. /// <summary>
  6. /// 没有武器的敌人
  7. /// </summary>
  8. [Tool]
  9. public partial class NoWeaponEnemy : Enemy
  10. {
  11. private BrushImageData _brushData;
  12. public override void OnInit()
  13. {
  14. base.OnInit();
  15. NoWeaponAttack = true;
  16. WeaponPack.SetCapacity(0);
  17. AnimationPlayer.AnimationFinished += OnAnimationFinished;
  18. _brushData = LiquidBrushManager.GetBrush("0002");
  19. }
  20.  
  21. protected override void Process(float delta)
  22. {
  23. base.Process(delta);
  24.  
  25. //测试笔刷
  26. DrawLiquid(_brushData);
  27. }
  28.  
  29. public override void Attack()
  30. {
  31. if (AnimationPlayer.CurrentAnimation != AnimatorNames.Attack)
  32. {
  33. AnimationPlayer.Play(AnimatorNames.Attack);
  34. }
  35. }
  36. /// <summary>
  37. /// 开始执行攻击逻辑
  38. /// </summary>
  39. public virtual void OnAttack()
  40. {
  41. //攻击特效
  42. var effect = ObjectManager.GetPoolItem<IEffect>(ResourcePath.prefab_effect_weapon_ShotFire0003_tscn);
  43. var node = (Node2D)effect;
  44. node.GlobalPosition = FirePoint.GlobalPosition;
  45. node.Rotation = MountPoint.Rotation;
  46. node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
  47. effect.PlayEffect();
  48. var targetPosition = LookTarget.GetCenterPosition();
  49. var bulletData = FireManager.GetBulletData(this, 0, ExcelConfig.BulletBase_Map["0006"]);
  50. for (var i = 0; i < 8; i++)
  51. {
  52. var data = bulletData.Clone();
  53. var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + Utils.Random.RandomRangeInt(-30, 30));
  54. FireManager.SetParabolaTarget(data, tempPos);
  55. FireManager.ShootBullet(data, AttackLayer);
  56. }
  57. }
  58.  
  59. protected override void OnDie()
  60. {
  61. var realVelocity = GetRealVelocity();
  62. var effPos = Position;
  63. var debris = Create<EnemyDead0002>(Ids.Id_enemy_dead0002);
  64. debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
  65. debris.MoveController.AddForce(Velocity + realVelocity);
  66. debris.SetForwardDirection(Face);
  67. debris.BrushPrevPosition = BrushPrevPosition;
  68. //创建金币
  69. Gold.CreateGold(Position, RoleState.Gold);
  70. //派发敌人死亡信号
  71. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  72. Destroy();
  73. }
  74.  
  75. private void OnAnimationFinished(StringName name)
  76. {
  77. if (name == AnimatorNames.Attack)
  78. {
  79. AttackTimer = AttackInterval;
  80. }
  81. }
  82. }