Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / enemy / Enemy.cs
@小李xl 小李xl on 10 Nov 2023 2 KB 更改角色模板继承关系
  1.  
  2. using Godot;
  3. using NnormalState;
  4.  
  5. /// <summary>
  6. /// 基础敌人
  7. /// </summary>
  8. [Tool]
  9. public partial class Enemy : Role
  10. {
  11. /// <summary>
  12. /// 目标是否在视野内
  13. /// </summary>
  14. public bool TargetInView { get; set; } = true;
  15. /// <summary>
  16. /// 敌人身上的状态机控制器
  17. /// </summary>
  18. public StateController<Enemy, AiStateEnum> StateController { get; private set; }
  19.  
  20. /// <summary>
  21. /// 视野半径, 单位像素, 发现玩家后改视野范围可以穿墙
  22. /// </summary>
  23. public float ViewRange { get; set; } = 250;
  24.  
  25. /// <summary>
  26. /// 发现玩家后的视野半径
  27. /// </summary>
  28. public float TailAfterViewRange { get; set; } = 400;
  29.  
  30. /// <summary>
  31. /// 背后的视野半径, 单位像素
  32. /// </summary>
  33. public float BackViewRange { get; set; } = 50;
  34.  
  35. /// <summary>
  36. /// 视野检测射线, 朝玩家打射线, 检测是否碰到墙
  37. /// </summary>
  38. [Export, ExportFillNode]
  39. public RayCast2D ViewRay { get; private set; }
  40.  
  41. /// <summary>
  42. /// 导航代理
  43. /// </summary>
  44. [Export, ExportFillNode]
  45. public NavigationAgent2D NavigationAgent2D { get; private set; }
  46.  
  47. /// <summary>
  48. /// 导航代理中点
  49. /// </summary>
  50. [Export, ExportFillNode]
  51. public Marker2D NavigationPoint { get; private set; }
  52.  
  53. //锁定目标时间
  54. private float _lockTargetTime = 0;
  55.  
  56. public override void OnInit()
  57. {
  58. base.OnInit();
  59. IsAi = true;
  60. StateController = AddComponent<StateController<Enemy, AiStateEnum>>();
  61.  
  62. AttackLayer = PhysicsLayer.Wall | PhysicsLayer.Player;
  63. EnemyLayer = PhysicsLayer.Player;
  64. Camp = CampEnum.Camp2;
  65.  
  66. RoleState.MoveSpeed = 20;
  67.  
  68. MaxHp = 20;
  69. Hp = 20;
  70. StateController.Register(new AiNormalState());
  71. StateController.ChangeState(AiStateEnum.AiNormal);
  72. }
  73.  
  74. public override void EnterTree()
  75. {
  76. if (!World.Enemy_InstanceList.Contains(this))
  77. {
  78. World.Enemy_InstanceList.Add(this);
  79. }
  80. }
  81.  
  82. public override void ExitTree()
  83. {
  84. World.Enemy_InstanceList.Remove(this);
  85. }
  86. }