Finalizing temporary prefab helpers and test
Signed-off-by: jckand-amzn <jckand@amazon.com>
This commit is contained in:
+27
-22
@@ -10,18 +10,16 @@ def DynVegUtils_TempPrefabCreationWorks():
|
||||
"""
|
||||
Summary:
|
||||
An existing level is opened. Each Prefab setup to be spawned by Dynamic Vegetation tests is created in memory and
|
||||
validated against existing components/mesh assignments. A spawner is then created with the temporary prefabs to ensure
|
||||
proper functionality with Dynamic Vegetation components.
|
||||
validated against existing test slice components/mesh assignments.
|
||||
|
||||
Expected Behavior:
|
||||
Temporary prefabs contain the expected components/assets. Instances plant as expected in the assigned area.
|
||||
Temporary prefabs contain the expected components/assets.
|
||||
|
||||
Test Steps:
|
||||
1) Open an existing level
|
||||
2) Create each of the necessary temporary prefabs, and validate the component/mesh setups
|
||||
3) Create a Vegetation Layer Spawner setup using the temporary prefabs as Prefab Instance Spawner types
|
||||
4) Create a surface to plant on and validate instance counts
|
||||
5) Verify expected instance counts
|
||||
2) Create each of the necessary temporary Mesh prefabs, and validate the component/mesh setups
|
||||
3) Create the necessary temporary PhysX Collider, and validate the component setup
|
||||
4) Report errors/asserts
|
||||
|
||||
Note:
|
||||
- This test file must be called from the Open 3D Engine Editor command terminal
|
||||
@@ -33,12 +31,15 @@ def DynVegUtils_TempPrefabCreationWorks():
|
||||
|
||||
import os
|
||||
|
||||
import azlmbr.asset as asset
|
||||
import azlmbr.bus as bus
|
||||
import azlmbr.legacy.general as general
|
||||
import azlmbr.math as math
|
||||
|
||||
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
|
||||
from editor_python_test_tools.utils import Report, Tracer
|
||||
from editor_python_test_tools.utils import TestHelper as helper
|
||||
from editor_python_test_tools.prefab_utils import Prefab, PrefabInstance, get_prefab_file_path
|
||||
from editor_python_test_tools.prefab_utils import PrefabInstance
|
||||
|
||||
with Tracer() as error_tracer:
|
||||
# Create dictionary for prefab filenames and paths to create using helper function
|
||||
@@ -54,25 +55,29 @@ def DynVegUtils_TempPrefabCreationWorks():
|
||||
helper.init_idle()
|
||||
helper.open_level("Prefab", "Base")
|
||||
|
||||
# 2) Create a Dynamic Vegetation surface in preparation of prefab creation
|
||||
center_point = math.Vector3(0.0, 0.0, 0.0)
|
||||
dynveg.create_surface_entity("Planting Surface", center_point, 128.0, 128.0, 1.0)
|
||||
|
||||
# 3) Create each of the Mesh asset prefabs and validate that the prefab created successfully
|
||||
# 2) Create each of the Mesh asset prefabs and validate that the prefab created successfully
|
||||
for prefab_filename, asset_path in mesh_prefabs.items():
|
||||
prefab_created = (
|
||||
f"Temporary {prefab_filename} prefab created successfully",
|
||||
f"Failed to create temporary {prefab_filename} prefab"
|
||||
mesh_prefab_created = (
|
||||
f"Temporary mesh prefab: {prefab_filename} created successfully",
|
||||
f"Failed to create temporary mesh prefab: {prefab_filename}"
|
||||
)
|
||||
prefab = dynveg.create_temp_mesh_prefab(asset_path, prefab_filename)
|
||||
Report.result(prefab_created, helper.wait_for_condition(lambda: PrefabInstance.is_valid(prefab[1]), 3.0))
|
||||
Report.result(mesh_prefab_created, helper.wait_for_condition(lambda:
|
||||
PrefabInstance.is_valid(prefab[1]), 3.0))
|
||||
|
||||
# 4) Assign the temp prefab to the prefab instance spawner, and validate the instance count
|
||||
for prefab_filename in mesh_prefabs:
|
||||
spawner_entity = dynveg.create_prefab_spawner("PrefabSpawner", center_point, 16.0, 16.0, 16.0,
|
||||
get_prefab_file_path(get_prefab_file_path(prefab_filename)))
|
||||
# 3) Create temp PhysX Collider prefab and validate that the prefab created successfully
|
||||
physx_prefab_filename = "CedarTree_Collision"
|
||||
physx_collider_prefab_created = (
|
||||
f"Temporary mesh prefab: {physx_prefab_filename} created successfully",
|
||||
f"Failed to create temporary mesh prefab: {physx_prefab_filename}"
|
||||
)
|
||||
test_physx_mesh_asset_id = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", os.path.join(
|
||||
"assets", "objects", "foliage", "cedar.pxmesh"), math.Uuid(), False)
|
||||
dynveg.create_temp_physx_mesh_collider(test_physx_mesh_asset_id, "CedarTree_Collision")
|
||||
Report.result(physx_collider_prefab_created, helper.wait_for_condition(lambda:
|
||||
PrefabInstance.is_valid(prefab[1]), 3.0))
|
||||
|
||||
# 5) Report errors/asserts
|
||||
# 4) Report errors/asserts
|
||||
helper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
|
||||
for error_info in error_tracer.errors:
|
||||
Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
|
||||
|
||||
+22
-19
@@ -19,7 +19,7 @@ import azlmbr.paths
|
||||
|
||||
sys.path.append(os.path.join(azlmbr.paths.projectroot, 'Gem', 'PythonTests'))
|
||||
import editor_python_test_tools.hydra_editor_utils as hydra
|
||||
from editor_python_test_tools.editor_entity_utils import EditorEntity, EditorComponent
|
||||
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||
from editor_python_test_tools.prefab_utils import Prefab
|
||||
|
||||
|
||||
@@ -33,13 +33,33 @@ def create_temp_mesh_prefab(mesh_asset_path, prefab_filename):
|
||||
# Assign the specified mesh asset
|
||||
mesh_asset = asset.AssetCatalogRequestBus(bus.Broadcast, "GetAssetIdByPath", mesh_asset_path, math.Uuid(), False)
|
||||
mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset)
|
||||
assert mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset"), \
|
||||
assert mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset") == mesh_asset, \
|
||||
"Failed to set Mesh asset"
|
||||
# Create and return the temporary/in-memory prefab
|
||||
temp_prefab = Prefab.create_prefab([root], prefab_filename)
|
||||
return temp_prefab
|
||||
|
||||
|
||||
def create_temp_physx_mesh_collider(physx_mesh_id, prefab_filename):
|
||||
# Create initial entity
|
||||
root = EditorEntity.create_editor_entity(name=prefab_filename)
|
||||
assert root.exists(), "Failed to create entity"
|
||||
# Add PhysX Collider component
|
||||
collider_component = root.add_component("PhysX Collider")
|
||||
assert root.has_component("PhysX Collider") and collider_component.is_enabled(), \
|
||||
"Failed to add/activate PhysX Collider component"
|
||||
# Set the Collider's Shape Configuration field to PhysicsAsset, and assign the specified PhysX Mesh asset
|
||||
collider_component.set_component_property_value("Shape Configuration|Shape", 7)
|
||||
assert collider_component.get_component_property_value("Shape Configuration|Shape") == 7, \
|
||||
"Failed to set Collider Shape to PhysicsAsset"
|
||||
collider_component.set_component_property_value("Shape Configuration|Asset|PhysX Mesh", physx_mesh_id)
|
||||
assert collider_component.get_component_property_value("Shape Configuration|Asset|PhysX Mesh") == physx_mesh_id, \
|
||||
"Failed to assign PhysX Mesh asset"
|
||||
# Create and return the temporary/in-memory prefab
|
||||
temp_prefab = Prefab.create_prefab([root], prefab_filename)
|
||||
return temp_prefab
|
||||
|
||||
|
||||
def create_surface_entity(name, center_point, box_size_x, box_size_y, box_size_z):
|
||||
# Create a "flat surface" entity to use as a plantable vegetation surface
|
||||
surface_entity = hydra.Entity(name)
|
||||
@@ -71,23 +91,6 @@ def create_mesh_surface_entity_with_slopes(name, center_point, uniform_scale):
|
||||
return surface_entity
|
||||
|
||||
|
||||
def create_prefab_spawner(name, center_point, box_size_x, box_size_y, box_size_z, prefab_asset_path):
|
||||
# Create a vegetation area entity to use as our test vegetation spawner
|
||||
spawner_entity = EditorEntity.create_editor_entity_at(center_point, name=name)
|
||||
spawner_entity.add_components(["Vegetation Layer Spawner", "Box Shape", "Vegetation Asset List"])
|
||||
if spawner_entity.id.IsValid():
|
||||
print(f"'{spawner_entity.get_name()}' created")
|
||||
spawner_entity.components[1].set_component_property_value("Box Shape|Box Configuration|Dimensions",
|
||||
math.Vector3(box_size_x, box_size_y, box_size_z))
|
||||
|
||||
# Set the vegetation area to a Prefab spawner with a specific prefab asset selected
|
||||
prefab_spawner = vegetation.PrefabInstanceSpawner()
|
||||
prefab_spawner.SetPrefabAssetPath(prefab_asset_path)
|
||||
descriptor = spawner_entity.components[2].get_component_property_value("Configuration|Embedded Assets|[0]")
|
||||
descriptor.spawner = prefab_spawner
|
||||
spawner_entity.components[2].set_component_property_value("Configuration|Embedded Assets|[0]", descriptor)
|
||||
return spawner_entity
|
||||
|
||||
def create_empty_spawner(name, center_point, box_size_x, box_size_y, box_size_z):
|
||||
# Create a vegetation area entity to use as our test vegetation spawner
|
||||
spawner_entity = EditorEntity.create_editor_entity_at(center_point, name=name)
|
||||
|
||||
Reference in New Issue
Block a user