test_burn_effect_merge.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 测试burnEffect字段深度合并功能
  5. """
  6. import json
  7. import copy
  8. from pathlib import Path
  9. def deep_merge_weapon_config(existing_weapon, new_weapon):
  10. """深度合并武器配置,保留现有武器中表格没有的字段"""
  11. # 创建新武器的深拷贝作为基础
  12. merged = copy.deepcopy(new_weapon)
  13. # 递归合并函数,将现有武器中新武器没有的字段添加到合并结果中
  14. def preserve_existing_fields(target, existing):
  15. for key, value in existing.items():
  16. if key not in target:
  17. # 现有武器有但新武器没有的字段,保留
  18. target[key] = copy.deepcopy(value)
  19. elif isinstance(target[key], dict) and isinstance(value, dict):
  20. # 如果两者都是字典,递归处理
  21. preserve_existing_fields(target[key], value)
  22. # 执行深度合并,保留现有武器中的额外字段
  23. preserve_existing_fields(merged, existing_weapon)
  24. return merged
  25. def test_burn_effect_merge():
  26. """测试burnEffect字段合并"""
  27. print("=== 测试burnEffect字段深度合并 ===")
  28. # 模拟现有武器配置(包含burnEffect)
  29. existing_weapon = {
  30. "id": "saw_grass",
  31. "name": "锯齿草",
  32. "bulletConfig": {
  33. "visual": {
  34. "bulletPrefab": "bullets/Saw_GrassBullet",
  35. "hitEffect": "Animation/WeaponTx/tx0002/tx0002",
  36. "trailEffect": None,
  37. "burnEffect": "Animation/Effects/burn_effect" # 现有的额外字段
  38. }
  39. }
  40. }
  41. # 模拟新武器配置(来自Excel,没有burnEffect)
  42. new_weapon = {
  43. "id": "saw_grass",
  44. "name": "锯齿草",
  45. "bulletConfig": {
  46. "visual": {
  47. "bulletPrefab": "bullets/Saw_GrassBullet",
  48. "hitEffect": "Animation/WeaponTx/tx0002/tx0002",
  49. "trailEffect": None
  50. }
  51. }
  52. }
  53. print("现有武器visual字段:")
  54. print(json.dumps(existing_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False))
  55. print("\n新武器visual字段:")
  56. print(json.dumps(new_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False))
  57. # 执行深度合并
  58. merged_weapon = deep_merge_weapon_config(existing_weapon, new_weapon)
  59. print("\n合并后visual字段:")
  60. print(json.dumps(merged_weapon["bulletConfig"]["visual"], indent=2, ensure_ascii=False))
  61. # 检查burnEffect是否被保留
  62. if "burnEffect" in merged_weapon["bulletConfig"]["visual"]:
  63. print("\n✓ 成功!burnEffect字段已保留")
  64. print(f"burnEffect值: {merged_weapon['bulletConfig']['visual']['burnEffect']}")
  65. return True
  66. else:
  67. print("\n✗ 失败!burnEffect字段丢失")
  68. return False
  69. if __name__ == "__main__":
  70. success = test_burn_effect_merge()
  71. if success:
  72. print("\n深度合并功能正常工作")
  73. else:
  74. print("\n深度合并功能存在问题")