Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / enemy / NoWeaponEnemy.cs
@小李xl 小李xl on 20 Dec 2023 2 KB 小修改
  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. AnimationPlayer.AnimationFinished += OnAnimationFinished;
  17. _brushData = LiquidBrushManager.GetBrush("0002");
  18. }
  19.  
  20. protected override void Process(float delta)
  21. {
  22. base.Process(delta);
  23.  
  24. //测试笔刷
  25. DrawLiquid(_brushData);
  26. }
  27.  
  28. public override void Attack()
  29. {
  30. if (AnimationPlayer.CurrentAnimation != AnimatorNames.Attack)
  31. {
  32. AnimationPlayer.Play(AnimatorNames.Attack);
  33. }
  34. }
  35. /// <summary>
  36. /// 开始执行攻击逻辑
  37. /// </summary>
  38. public virtual void OnAttack()
  39. {
  40. //攻击特效
  41. var effect = ObjectManager.GetPoolItem<IEffect>(ResourcePath.prefab_effect_weapon_ShotFire3_tscn);
  42. var node = (Node2D)effect;
  43. node.GlobalPosition = FirePoint.GlobalPosition;
  44. node.Rotation = MountPoint.Rotation;
  45. node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
  46. effect.PlayEffect();
  47. var targetPosition = LookTarget.GetCenterPosition();
  48. var bulletData = FireManager.GetBulletData(this, 0, ExcelConfig.BulletBase_Map["0006"]);
  49. for (var i = 0; i < 8; i++)
  50. {
  51. var data = bulletData.Clone();
  52. var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + Utils.Random.RandomRangeInt(-30, 30));
  53. FireManager.SetParabolaTarget(data, tempPos);
  54. FireManager.ShootBullet(data, AttackLayer);
  55. }
  56. }
  57.  
  58. protected override void OnDie()
  59. {
  60. var realVelocity = GetRealVelocity();
  61. var effPos = Position;
  62. var debris = Create<EnemyDead0002>(Ids.Id_enemy_dead0002);
  63. debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
  64. debris.MoveController.AddForce(Velocity + realVelocity);
  65. debris.SetForwardDirection(Face);
  66. debris.BrushPrevPosition = BrushPrevPosition;
  67. //派发敌人死亡信号
  68. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  69. Destroy();
  70. }
  71.  
  72. private void OnAnimationFinished(StringName name)
  73. {
  74. if (name == AnimatorNames.Attack)
  75. {
  76. AttackTimer = 3f;
  77. }
  78. }
  79. }