Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / mark / ActivityMark_HandlerExpression.cs
@小李xl 小李xl on 6 May 2023 2 KB 处理ActivityMark表达式参数
  1.  
  2. using System;
  3. using Godot;
  4.  
  5. public partial class ActivityMark
  6. {
  7. /// <summary>
  8. /// 根据预制表达式创建物体并返回
  9. /// </summary>
  10. /// <param name="type">物体类型</param>
  11. /// <param name="expressionFieldName">预制表达式字段名称, 注意是字段名称, 而不是内容</param>
  12. public ActivityObjectResult<T> CreateActivityObjectFromExpression<T>(ActivityIdPrefix.ActivityPrefixType type, string expressionFieldName) where T : ActivityObject
  13. {
  14. if (_currentExpression.TryGetValue(expressionFieldName, out var expressionData))
  15. {
  16. if (expressionData.Id == "null")
  17. {
  18. return null;
  19. }
  20. var id = ActivityIdPrefix.GetNameByPrefixType(type) + expressionData.Id;
  21. var activityObject = ActivityObject.Create<T>(id);
  22. if (activityObject == null)
  23. {
  24. return null;
  25. }
  26.  
  27. HandlerExpressionArgs(type, activityObject, expressionData);
  28. return new ActivityObjectResult<T>(activityObject, expressionData);
  29. }
  30.  
  31. GD.PrintErr("未找到表达式字段: " + expressionFieldName + ", 请检查是否有该字段或者该字段加上了[ActivityExpression]标记");
  32. return null;
  33. }
  34.  
  35. private void HandlerExpressionArgs(ActivityIdPrefix.ActivityPrefixType type, ActivityObject instance, ActivityExpressionData expressionData)
  36. {
  37. switch (type)
  38. {
  39. case ActivityIdPrefix.ActivityPrefixType.NonePrefix:
  40. break;
  41. case ActivityIdPrefix.ActivityPrefixType.Player:
  42. break;
  43. case ActivityIdPrefix.ActivityPrefixType.Test:
  44. break;
  45. case ActivityIdPrefix.ActivityPrefixType.Role:
  46. break;
  47. case ActivityIdPrefix.ActivityPrefixType.Enemy:
  48. break;
  49. case ActivityIdPrefix.ActivityPrefixType.Weapon:
  50. {
  51. var weapon = (Weapon)instance;
  52. //当前弹夹弹药量
  53. if (expressionData.Args.TryGetValue("CurrAmmon", out var currAmmon))
  54. {
  55. weapon.SetCurrAmmo(int.Parse(currAmmon));
  56. }
  57. //备用弹药量
  58. if (expressionData.Args.TryGetValue("ResidueAmmo", out var residueAmmo))
  59. {
  60. weapon.SetResidueAmmo(int.Parse(residueAmmo));
  61. }
  62. }
  63. break;
  64. case ActivityIdPrefix.ActivityPrefixType.Bullet:
  65. break;
  66. case ActivityIdPrefix.ActivityPrefixType.Shell:
  67. break;
  68. case ActivityIdPrefix.ActivityPrefixType.Other:
  69. break;
  70. }
  71. }
  72. }