Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent.py 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 : C14861501
  6. Test Case Title : Verify PxMesh is auto-assigned when Collider component is added after 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. assign_model_asset = ("Assigned Model asset to Mesh component", "Failed to assign model asset to Mesh component")
  14. automatic_shape_change = ("Shape was changed automatically", "Shape failed to change automatically")
  15. # fmt: on
  16. def Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent():
  17. """
  18. Summary:
  19. Create entity with Mesh component and assign a render mesh to the Mesh component. Add Physics Mesh Collider component
  20. and Verify that the physics mesh asset is auto-assigned.
  21. Expected Behavior:
  22. The physics asset in PhysX Mesh Collider component is auto-assigned
  23. Test Steps:
  24. 1) Load the empty level
  25. 2) Create an entity
  26. 3) Add Mesh component
  27. 4) Assign a render model asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
  28. 5) Add PhysX Mesh Collider component
  29. 6) The physics asset in PhysX Mesh Collider component is auto-assigned.
  30. Note:
  31. - This test file must be called from the Open 3D Engine Editor command terminal
  32. - Any passed and failed tests are written to the Editor.log file.
  33. Parsing the file or running a log_monitor are required to observe the test results.
  34. :return: None
  35. """
  36. # Builtins
  37. import os
  38. # Helper Files
  39. from editor_python_test_tools.editor_entity_utils import EditorEntity as Entity
  40. from editor_python_test_tools.utils import Report
  41. from editor_python_test_tools.utils import TestHelper as helper
  42. from editor_python_test_tools.asset_utils import Asset
  43. from consts.physics import PHYSX_MESH_COLLIDER
  44. import editor_python_test_tools.hydra_editor_utils as hydra
  45. # Asset paths
  46. STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.fbx.azmodel")
  47. PHYSX_MESH = os.path.join(
  48. "assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.fbx.pxmesh"
  49. )
  50. # 1) Load the empty level
  51. hydra.open_base_level()
  52. # 2) Create an entity
  53. test_entity = Entity.create_editor_entity("test_entity")
  54. test_entity.add_component("PhysX Static Rigid Body")
  55. Report.result(Tests.create_entity, test_entity.id.IsValid())
  56. # 3) Add Mesh component
  57. mesh_component = test_entity.add_component("Mesh")
  58. Report.result(Tests.mesh_added, test_entity.has_component("Mesh"))
  59. # 4) Assign a render model asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh)
  60. model_asset = Asset.find_asset_by_path(STATIC_MESH)
  61. mesh_component.set_component_property_value("Controller|Configuration|Model Asset", model_asset.id)
  62. model_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Model Asset")
  63. Report.result(Tests.assign_model_asset, model_asset.get_path().lower() == STATIC_MESH.replace(os.sep, "/").lower())
  64. # 5) Add PhysX Mesh Collider component
  65. test_component = test_entity.add_component(PHYSX_MESH_COLLIDER)
  66. Report.result(Tests.physx_collider_added, test_entity.has_component(PHYSX_MESH_COLLIDER))
  67. # 6) The physics asset in PhysX Mesh Collider component is auto-assigned.
  68. asset_id = test_component.get_component_property_value("Shape Configuration|Asset|PhysX Mesh")
  69. test_asset = Asset(asset_id)
  70. Report.result(Tests.automatic_shape_change, test_asset.get_path().lower() == PHYSX_MESH.replace(os.sep, "/").lower())
  71. if __name__ == "__main__":
  72. from editor_python_test_tools.utils import Report
  73. Report.start_test(Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent)