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. 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_ShotFire3_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. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  70. Destroy();
  71. }
  72.  
  73. private void OnAnimationFinished(StringName name)
  74. {
  75. if (name == AnimatorNames.Attack)
  76. {
  77. AttackTimer = 3f;
  78. }
  79. }
  80. }