Merge pull request #7563 from aws-lumberyard-dev/jckand/ImageGradientTests
Adding new Image Gradient test to validate surface modificationmonroegm-disable-blank-issue-2
commit
18631b1a30
@ -0,0 +1,114 @@
|
|||||||
|
"""
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Tests:
|
||||||
|
image_gradient_entity_created = (
|
||||||
|
"Image Gradient entity created",
|
||||||
|
"Failed to create Image Gradient entity",
|
||||||
|
)
|
||||||
|
image_gradient_assigned = (
|
||||||
|
"Successfully assigned image gradient asset",
|
||||||
|
"Failed to assign image gradient asset"
|
||||||
|
)
|
||||||
|
instance_validation = (
|
||||||
|
"Found the expected number of instances",
|
||||||
|
"Found an unexpected number of instances"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def ImageGradient_ModifiesSurfaces():
|
||||||
|
"""
|
||||||
|
Summary:
|
||||||
|
This test verifies that an Image Gradient + Gradient Surface Tag Emitter properly modifies surfaces.
|
||||||
|
|
||||||
|
Expected Behavior:
|
||||||
|
Vegetation is used to verify expected surface modification.
|
||||||
|
|
||||||
|
Test Steps:
|
||||||
|
1) Open a level
|
||||||
|
2) Create an entity with Image Gradient, Gradient Transform Modifier, Shape Reference, and Gradient Surface Tag
|
||||||
|
Emitter components with an Image asset assigned.
|
||||||
|
3) Create a Vegetation Layer Spawner setup to plant on the generated surface.
|
||||||
|
4) Update all surface tag references
|
||||||
|
5) Validate expected instances planted on the modified surface.
|
||||||
|
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
import azlmbr.bus as bus
|
||||||
|
import azlmbr.entity as EntityId
|
||||||
|
import azlmbr.editor as editor
|
||||||
|
import azlmbr.math as math
|
||||||
|
import azlmbr.surface_data as surface_data
|
||||||
|
|
||||||
|
import editor_python_test_tools.hydra_editor_utils as hydra
|
||||||
|
from editor_python_test_tools.asset_utils import Asset
|
||||||
|
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||||
|
from largeworlds.large_worlds_utils import editor_dynveg_test_helper as dynveg
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
from editor_python_test_tools.utils import TestHelper as helper
|
||||||
|
|
||||||
|
# 1) Open an existing simple level
|
||||||
|
hydra.open_base_level()
|
||||||
|
|
||||||
|
# 2) Create an entity with required Image Gradient + Surface Tag Emitter components and assign image asset
|
||||||
|
components_to_add = ["Image Gradient", "Gradient Transform Modifier", "Shape Reference",
|
||||||
|
"Gradient Surface Tag Emitter"]
|
||||||
|
entity_position = math.Vector3(0.0, 0.0, 0.0)
|
||||||
|
new_entity_id = editor.ToolsApplicationRequestBus(
|
||||||
|
bus.Broadcast, "CreateNewEntityAtPosition", entity_position, EntityId.EntityId()
|
||||||
|
)
|
||||||
|
Report.critical_result(Tests.image_gradient_entity_created, new_entity_id.IsValid())
|
||||||
|
image_gradient_entity = EditorEntity.create_editor_entity_at(entity_position, "Image Gradient")
|
||||||
|
image_gradient_entity.add_components(components_to_add)
|
||||||
|
test_img_gradient_path = os.path.join("Assets", "ImageGradients", "image_grad_test_gsi.png.streamingimage")
|
||||||
|
asset = Asset.find_asset_by_path(test_img_gradient_path)
|
||||||
|
image_gradient_entity.components[0].set_component_property_value("Configuration|Image Asset", asset.id)
|
||||||
|
success = image_gradient_entity.components[0].get_component_property_value("Configuration|Image Asset") == asset.id
|
||||||
|
Report.result(Tests.image_gradient_assigned, success)
|
||||||
|
|
||||||
|
# 3) Create vegetation and planting surface entities, and assign the Image Gradient entity's Shape Reference
|
||||||
|
|
||||||
|
# Create vegetation entity
|
||||||
|
purple_flower_prefab_path = os.path.join("assets", "prefabs", "PurpleFlower.spawnable")
|
||||||
|
spawner_entity = dynveg.create_prefab_vegetation_area("Instance Spawner", entity_position, 50.0, 50.0, 10.0,
|
||||||
|
purple_flower_prefab_path)
|
||||||
|
spawner_entity.add_component("Vegetation Surface Mask Filter")
|
||||||
|
|
||||||
|
# Create surface entity
|
||||||
|
dynveg.create_surface_entity("Box Shape", entity_position, 50.0, 50.0, 1.0)
|
||||||
|
|
||||||
|
# Assign Image Gradient entity's Shape Reference
|
||||||
|
image_gradient_entity.components[2].set_component_property_value("Configuration|Shape Entity Id", spawner_entity.id)
|
||||||
|
|
||||||
|
# 4) Assign surface tags to the required components
|
||||||
|
tag_list = [surface_data.SurfaceTag("terrain")]
|
||||||
|
|
||||||
|
# Set the Veg Spawner entity's Surface Tag Mask Filter component to include the "terrain" tag
|
||||||
|
hydra.get_set_test(spawner_entity, 3, "Configuration|Inclusion|Surface Tags", tag_list)
|
||||||
|
|
||||||
|
# Set the Image Gradient entity's Gradient Surface Tag Emitter component to modify the "terrain" tag
|
||||||
|
# NOTE: This requires a disable/re-enable of the component to force a refresh as assigning a tag via script does not
|
||||||
|
grad_surf_tag_emitter_component = image_gradient_entity.components[3]
|
||||||
|
grad_surf_tag_emitter_component.add_container_item("Configuration|Extended Tags", 0, tag_list[0])
|
||||||
|
grad_surf_tag_emitter_component.set_enabled(False)
|
||||||
|
grad_surf_tag_emitter_component.set_enabled(True)
|
||||||
|
|
||||||
|
# 5) Validate the expected number of vegetation instances. Instances should only spawn on the modified surface
|
||||||
|
num_expected_instances = 168
|
||||||
|
success = helper.wait_for_condition(lambda: dynveg.validate_instance_count_in_entity_shape(
|
||||||
|
spawner_entity.id, num_expected_instances), 5.0)
|
||||||
|
Report.result(Tests.instance_validation, success)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
Report.start_test(ImageGradient_ModifiesSurfaces)
|
||||||
Loading…
Reference in New Issue