Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / mark / EnemyMark.cs
@小李xl 小李xl on 6 May 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. /// 脸默认朝向
  12. /// </summary>
  13. public enum FaceDirectionValueEnum
  14. {
  15. /// <summary>
  16. /// 随机
  17. /// </summary>
  18. Random,
  19. /// <summary>
  20. /// 左边
  21. /// </summary>
  22. Left,
  23. /// <summary>
  24. /// 右边
  25. /// </summary>
  26. Right
  27. }
  28. /// <summary>
  29. /// 武器1 id, id会自动加上武器前缀
  30. /// </summary>
  31. [Export(PropertyHint.Expression), ActivityExpression]
  32. public string Weapon1Id;
  33. /// <summary>
  34. /// 武器2 id, id会自动加上武器前缀
  35. /// </summary>
  36. [Export(PropertyHint.Expression), ActivityExpression]
  37. public string Weapon2Id;
  38. /// <summary>
  39. /// 脸默认的朝向
  40. /// </summary>
  41. [Export]
  42. public FaceDirectionValueEnum FaceDirection = FaceDirectionValueEnum.Random;
  43.  
  44. public override void _Ready()
  45. {
  46. Type = ActivityIdPrefix.ActivityPrefixType.Enemy;
  47. Layer = RoomLayerEnum.YSortLayer;
  48. }
  49.  
  50. public override void Doing(ActivityObjectResult<ActivityObject> result, RoomInfo roomInfo)
  51. {
  52. //创建敌人
  53. var instance = (Enemy)result.ActivityObject;
  54. var pos = instance.Position;
  55. //脸的朝向
  56. if (FaceDirection == FaceDirectionValueEnum.Random)
  57. {
  58. instance.Face = Utils.RandomBoolean() ? global::FaceDirection.Left : global::FaceDirection.Right;
  59. }
  60. else if (FaceDirection == FaceDirectionValueEnum.Left)
  61. {
  62. instance.Face = global::FaceDirection.Left;
  63. }
  64. else
  65. {
  66. instance.Face = global::FaceDirection.Right;
  67. }
  68.  
  69. if (!string.IsNullOrWhiteSpace(Weapon1Id))
  70. CreateWeapon(instance, pos, nameof(Weapon1Id));
  71. if (!string.IsNullOrWhiteSpace(Weapon2Id))
  72. CreateWeapon(instance, pos, nameof(Weapon2Id));
  73. }
  74.  
  75. //生成武器
  76. private void CreateWeapon(Enemy enemy, Vector2 pos, string fieldName)
  77. {
  78. var result = CreateActivityObjectFromExpression<Weapon>(ActivityIdPrefix.ActivityPrefixType.Weapon, fieldName);
  79. if (result != null)
  80. {
  81. //如果不能放下, 则直接扔地上
  82. if (!enemy.PickUpWeapon(result.ActivityObject))
  83. {
  84. result.ActivityObject.PutDown(pos, RoomLayerEnum.NormalLayer);
  85. }
  86. }
  87. }
  88. }