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. FiringStand = true;
  17. WeaponPack.SetCapacity(0);
  18. AnimationPlayer.AnimationFinished += OnAnimationFinished;
  19. //_brushData = LiquidBrushManager.GetBrush("0002");
  20. }
  21.  
  22. // protected override void Process(float delta)
  23. // {
  24. // base.Process(delta);
  25. //
  26. // //测试笔刷
  27. // //DrawLiquid(_brushData);
  28. // }
  29.  
  30. public override void Attack()
  31. {
  32. if (AnimationPlayer.CurrentAnimation != AnimatorNames.Attack)
  33. {
  34. AnimationPlayer.Play(AnimatorNames.Attack);
  35. }
  36. }
  37. /// <summary>
  38. /// 开始执行攻击逻辑
  39. /// </summary>
  40. public virtual void OnAttack()
  41. {
  42. if (LookTarget == null)
  43. {
  44. return;
  45. }
  46. //攻击特效
  47. var effect = ObjectManager.GetPoolItem<IEffect>(ResourcePath.prefab_effect_weapon_ShotFire0003_tscn);
  48. var node = (Node2D)effect;
  49. node.GlobalPosition = FirePoint.GlobalPosition;
  50. node.Rotation = MountPoint.Rotation;
  51. node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
  52. effect.PlayEffect();
  53. var targetPosition = LookTarget.GetCenterPosition();
  54. var bulletData = FireManager.GetBulletData(this, 0, ExcelConfig.BulletBase_Map["0006"]);
  55. for (var i = 0; i < 8; i++)
  56. {
  57. var data = bulletData.Clone();
  58. var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + Utils.Random.RandomRangeInt(-30, 30));
  59. FireManager.SetParabolaTarget(data, tempPos);
  60. FireManager.ShootBullet(data, Camp);
  61. }
  62. }
  63.  
  64. protected override void OnDie()
  65. {
  66. var realVelocity = GetRealVelocity();
  67. var effPos = Position;
  68. var debris = Create<AutoFreezeObject>(Ids.Id_enemy_dead0002);
  69. debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
  70. debris.MoveController.AddForce(Velocity + realVelocity);
  71. debris.SetForwardDirection(Face);
  72. debris.BrushPrevPosition = BrushPrevPosition;
  73. //创建金币
  74. Gold.CreateGold(Position, RoleState.Gold);
  75. //派发敌人死亡信号
  76. EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
  77. Destroy();
  78. }
  79.  
  80. private void OnAnimationFinished(StringName name)
  81. {
  82. if (name == AnimatorNames.Attack)
  83. {
  84. AttackTimer = AttackInterval;
  85. }
  86. }
  87. }