Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / mark / EnemyMark.cs
@lijincheng lijincheng on 11 Mar 2023 2 KB 优化 ActivityMark
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 针对敌人生成位置的标记
  6. /// </summary>
  7. [Tool]
  8. public partial class EnemyMark : ActivityMark
  9. {
  10. /// <summary>
  11. /// 武器1 id, id会自动加上武器前缀
  12. /// </summary>
  13. [Export]
  14. public string Weapon1Id;
  15. /// <summary>
  16. /// 武器1弹药量, 如果值小于0, 则使用默认弹药量
  17. /// </summary>
  18. [Export]
  19. public int Weapon1Ammo = -1;
  20. /// <summary>
  21. /// 武器2 id, id会自动加上武器前缀
  22. /// </summary>
  23. [Export]
  24. public string Weapon2Id;
  25. /// <summary>
  26. /// 武器2弹药量, 如果值小于0, 则使用默认弹药量
  27. /// </summary>
  28. [Export]
  29. public int Weapon2Ammo = -1;
  30. /// <summary>
  31. /// 武器3 id, id会自动加上武器前缀
  32. /// </summary>
  33. [Export]
  34. public string Weapon3Id;
  35. /// <summary>
  36. /// 武器3弹药量, 如果值小于0, 则使用默认弹药量
  37. /// </summary>
  38. [Export]
  39. public int Weapon3Ammo = -1;
  40. /// <summary>
  41. /// 武器4 id, id会自动加上武器前缀
  42. /// </summary>
  43. [Export]
  44. public string Weapon4Id;
  45. /// <summary>
  46. /// 武器4弹药量, 如果值小于0, 则使用默认弹药量
  47. /// </summary>
  48. [Export]
  49. public int Weapon4Ammo = -1;
  50.  
  51. public override void _Ready()
  52. {
  53. DrawColor = Colors.Red;
  54. Type = ActivityIdPrefix.ActivityPrefixType.Enemy;
  55. Layer = RoomLayerEnum.YSortLayer;
  56. }
  57.  
  58. public override void Doing(RoomInfo roomInfo)
  59. {
  60. var pos = GlobalPosition;
  61. //创建敌人
  62. var instance = ActivityObject.Create<Enemy>(GetItemId());
  63. instance.PutDown(pos, Layer);
  64.  
  65. if (!string.IsNullOrWhiteSpace(Weapon1Id))
  66. CreateWeapon(instance, pos, Weapon1Id, Weapon1Ammo);
  67. if (!string.IsNullOrWhiteSpace(Weapon2Id))
  68. CreateWeapon(instance, pos, Weapon2Id, Weapon2Ammo);
  69. if (!string.IsNullOrWhiteSpace(Weapon3Id))
  70. CreateWeapon(instance, pos, Weapon3Id, Weapon3Ammo);
  71. if (!string.IsNullOrWhiteSpace(Weapon4Id))
  72. CreateWeapon(instance, pos, Weapon4Id, Weapon4Ammo);
  73. }
  74.  
  75. //生成武器
  76. private void CreateWeapon(Enemy instance, Vector2 pos, string id, int ammon)
  77. {
  78. var weaponId = ActivityIdPrefix.GetNameByPrefixType(ActivityIdPrefix.ActivityPrefixType.Weapon) + id;
  79. var weapon = ActivityObject.Create<Weapon>(weaponId);
  80. //设置弹药量
  81. if (ammon >= 0)
  82. {
  83. weapon.SetTotalAmmo(ammon);
  84. }
  85. //如果不能放下, 则直接扔地上
  86. if (!instance.PickUpWeapon(weapon))
  87. {
  88. weapon.PutDown(pos, RoomLayerEnum.NormalLayer);
  89. }
  90. }
  91. }