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 Vector2I? _prevPosition = null;
  12. private BrushImageData _brushData;
  13. public override void OnInit()
  14. {
  15. base.OnInit();
  16. NoWeaponAttack = true;
  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. if (AffiliationArea != null)
  27. {
  28. var pos = AffiliationArea.RoomInfo.LiquidCanvas.ToLiquidCanvasPosition(Position);
  29. AffiliationArea.RoomInfo.LiquidCanvas.DrawBrush(_brushData, _prevPosition, pos, 0);
  30. _prevPosition = pos;
  31. }
  32. }
  33.  
  34. public override void Attack()
  35. {
  36. if (AnimationPlayer.CurrentAnimation != AnimatorNames.Attack)
  37. {
  38. AnimationPlayer.Play(AnimatorNames.Attack);
  39. }
  40. }
  41.  
  42. public void ShootBullet()
  43. {
  44. var targetPosition = LookTarget.GetCenterPosition();
  45. var bulletData = FireManager.GetBulletData(this, 0, ExcelConfig.BulletBase_Map["0006"]);
  46. for (var i = 0; i < 8; i++)
  47. {
  48. var data = bulletData.Clone();
  49. var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + Utils.Random.RandomRangeInt(-30, 30));
  50. FireManager.SetParabolaTarget(data, tempPos);
  51. FireManager.ShootBullet(data, AttackLayer);
  52. }
  53. }
  54.  
  55. protected override void OnDie()
  56. {
  57. var realVelocity = GetRealVelocity();
  58. var effPos = Position;
  59. var debris = Create<EnemyDead0002>(Ids.Id_enemy_dead0002);
  60. debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
  61. debris.MoveController.AddForce(Velocity + realVelocity);
  62. debris.SetFace(Face);
  63. debris.PrevPosition = _prevPosition;
  64. //派发敌人死亡信号
  65. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  66. Destroy();
  67. }
  68.  
  69. private void OnAnimationFinished(StringName name)
  70. {
  71. if (name == AnimatorNames.Attack)
  72. {
  73. AttackTimer = 2f;
  74. }
  75. }
  76. }