Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent.py 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. Test case ID : C14861502
  6. Test Case Title : Verify PxMesh is auto-assigned in collider when Mesh is assigned in Rendering Mesh component
  7. """
  8. # fmt: off
  9. class Tests():
  10. create_entity = ("Created test entity", "Failed to create test entity")
  11. mesh_added = ("Added Mesh component", "Failed to add Mesh component")
  12. physx_collider_added = ("Added PhysX Mesh Collider component", "Failed to add PhysX Mesh Collider component")
  13. shape_default_at_start = ("Shape was correct initially", "Default shape was not correct")
  14. automatic_shape_change = ("Shape was changed automatically", "Shape failed to change automatically")
  15. # fmt: on
  16. def Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent():
  17. """
  18. Summary:
  19. Create entity with Mesh and PhysX Mesh Collider components, then assign a render mesh to the Mesh component
  20. Expected Behavior:
  21. The physics asset in PhysX Mesh Collider component is auto-assigned after adding the render mesh
  22. Test Steps:
  23. 1) Load the empty level
  24. 2) Create an entity
  25. 3) Add Mesh and PhysX Mesh Collider component
  26. 4) Verify no physics asset is auto-assigned.
  27. 5) Assign a render model asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
  28. 6) The physics asset in PhysX Mesh Collider component is auto-assigned.
  29. Note:
  30. - This test file must be called from the Open 3D Engine Editor command terminal
  31. - Any passed and failed tests are written to the Editor.log file.
  32. Parsing the file or running a log_monitor are required to observe the test results.
  33. :return: None
  34. """
  35. # Builtins
  36. import os
  37. # Helper Files
  38. from editor_python_test_tools.editor_entity_utils import EditorEntity as Entity
  39. from editor_python_test_tools.utils import Report
  40. from editor_python_test_tools.utils import TestHelper as helper
  41. from editor_python_test_tools.asset_utils import Asset
  42. from consts.physics import PHYSX_MESH_COLLIDER
  43. import editor_python_test_tools.hydra_editor_utils as hydra
  44. # Open 3D Engine Imports
  45. import azlmbr.legacy.general as general
  46. MESH_ASSET_PATH = os.path.join("Objects", "SphereBot", "r0-b_body.fbx.azmodel")
  47. MESH_PROPERTY_PATH = "Controller|Configuration|Model Asset"
  48. TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh"
  49. # 1) Load the empty level
  50. hydra.open_base_level()
  51. # 2) Create an entity
  52. test_entity = Entity.create_editor_entity("test_entity")
  53. test_entity.add_component("PhysX Static Rigid Body")
  54. Report.result(Tests.create_entity, test_entity.id.IsValid())
  55. # 3) Add Mesh and PhysX Mesh Collider component
  56. mesh_component = test_entity.add_component("Mesh")
  57. Report.result(Tests.mesh_added, test_entity.has_component("Mesh"))
  58. test_component = test_entity.add_component(PHYSX_MESH_COLLIDER)
  59. Report.result(Tests.physx_collider_added, test_entity.has_component(PHYSX_MESH_COLLIDER))
  60. # 4) Verify no physics asset is auto-assigned
  61. value_to_test = test_component.get_component_property_value(TESTED_PROPERTY_PATH)
  62. Report.result(Tests.shape_default_at_start, value_to_test == azlmbr.asset.AssetId())
  63. # 5) Assign a render model asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
  64. asset_value = Asset.find_asset_by_path(MESH_ASSET_PATH)
  65. mesh_component.set_component_property_value(MESH_PROPERTY_PATH, asset_value.id)
  66. # 6) The physics asset in PhysX Mesh Collider component is auto-assigned.
  67. general.idle_wait(1.0) # Gives the script a moment for the value to update before grabbing it
  68. value_to_test = test_component.get_component_property_value(TESTED_PROPERTY_PATH)
  69. asset = Asset(value_to_test)
  70. Report.result(Tests.automatic_shape_change, "r0-b_body" in asset.get_path())
  71. if __name__ == "__main__":
  72. from editor_python_test_tools.utils import Report
  73. Report.start_test(Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent)