You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/AutomatedTesting/Gem/PythonTests/physics/C6090546_ForceRegion_SliceF...

146 lines
5.1 KiB
Python

"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
# Test case ID : C6090546
# Test Case Title : Check that a force region slice can be saved and instantiated
# fmt: off
class Tests():
enter_game_mode = ("Entered game mode", "Failed to enter game mode")
find_sphere = ("SphereRigidBody found", "SphereRigidBody not found")
find_force_region = ("ForceRegionSliceEntity found", "ForceRegionSliceEntity not found")
sphere_dropped = ("Sphere dropped down", "Sphere did not drop down")
sphere_bounced = ("Sphere bounced up vertically", "Sphere did not bounce up vertically")
exit_game_mode = ("Exited game mode", "Couldn't exit game mode")
# fmt: on
def C6090546_ForceRegion_SliceFileInstantiates():
"""
Summary:
Check that a force region slice can be saved and instantiated
Level Description:
The SphereRigidBody entity is placed above the ForceRegionBox entity
ForceRegionSliceEntity (entity) - Slice Asset which is imported from .slice file of another level which has
an entity with force region component.
SphereRigidBody (entity) - Entity with PhysX Rigid body, Mesh and collider components.
The SphereRigidBody is placed above the ForceRegionEntity.
Expected Behavior:
Sphere drops and bounces vertically up from force region.
We are checking if the ball started falling down from its initial position and then verifying if it has bounced up
its initial position after entering into the force region.
Test Steps:
1) Open level
2) Enter game mode
3) Retrieve and validate entities
4) Get the initial position of the Sphere (rigid body)
5) Check if the ball is falling down
6) Add trigger notification handler
7) Wait till the ball enters the force region
8) Check if the ball has bounced vertically up
9) Exit game mode
10) Close the editor
Note:
- This test file must be called from the Open 3D Engine Editor command terminal
- Any passed and failed tests are written to the Editor.log file.
Parsing the file or running a log_monitor are required to observe the test results.
:return: None
"""
import os
import sys
import ImportPathHelper as imports
imports.init()
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general
import azlmbr.bus
# Constants
TIMEOUT = 3.0 # wait a maximum of 3 seconds
SPHERE_RADIUS = 0.5
class Sphere:
id = None
initial_position = None
current_position = None
in_force_region = False
bounced = False
class ForceRegion:
id = None
def sphere_bounced():
Sphere.current_position = azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", Sphere.id)
Sphere.bounced = Sphere.current_position.z > (Sphere.initial_position.z + SPHERE_RADIUS)
return Sphere.bounced
def on_trigger_enter(args):
if args[0].Equal(Sphere.id):
Sphere.in_force_region = True
helper.init_idle()
# 1) Open level
helper.open_level("Physics", "C6090546_ForceRegion_SliceFileInstantiates")
# 2) Enter game mode
helper.enter_game_mode(Tests.enter_game_mode)
# 3) Retrieve and validate entities
Sphere.id = general.find_game_entity("SphereRigidBody")
Report.critical_result(Tests.find_sphere, Sphere.id.IsValid())
ForceRegion.id = general.find_game_entity("ForceRegionSliceEntity")
Report.critical_result(Tests.find_force_region, ForceRegion.id.IsValid())
# 4) Get the initial position of the Sphere (rigid body)
Sphere.initial_position = azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", Sphere.id)
# 5) Check if the ball is falling down
Sphere.current_position = azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", Sphere.id)
sphere_dropped = Sphere.current_position.z < (Sphere.initial_position.z + SPHERE_RADIUS)
Report.critical_result(Tests.sphere_dropped, sphere_dropped)
# 6) Add trigger notification handler
handler = azlmbr.physics.TriggerNotificationBusHandler()
handler.connect(ForceRegion.id)
handler.add_callback("OnTriggerEnter", on_trigger_enter)
# 7) Wait till the ball enters the force region
helper.wait_for_condition(lambda: Sphere.in_force_region, TIMEOUT)
# 8) Check if the ball has bounced vertically up
# wait till the ball bounces
helper.wait_for_condition(sphere_bounced, TIMEOUT)
Report.critical_result(Tests.sphere_bounced, Sphere.bounced)
# 9) Exit game mode
helper.exit_game_mode(Tests.exit_game_mode)
if __name__ == "__main__":
import ImportPathHelper as imports
imports.init()
from editor_python_test_tools.utils import Report
Report.start_test(C6090546_ForceRegion_SliceFileInstantiates)