Add Ground Zero terrain pipeline and playable assets
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import unreal
|
||||
|
||||
|
||||
MAP_PATH = "/Game/ThirdPerson/Lvl_ThirdPerson"
|
||||
CHARACTER_CLASS_PATH = "/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"
|
||||
SHELTER_RECIPE_PATH = "/Game/Agrarian/DataAssets/Recipes/DA_Recipe_PrimitiveShelter"
|
||||
FRAME_RECIPE_PATH = "/Game/Agrarian/DataAssets/Recipes/DA_Recipe_PrimitiveFrame"
|
||||
WALL_PANEL_RECIPE_PATH = "/Game/Agrarian/DataAssets/Recipes/DA_Recipe_PrimitiveWallPanel"
|
||||
ROOF_PANEL_RECIPE_PATH = "/Game/Agrarian/DataAssets/Recipes/DA_Recipe_PrimitiveRoofPanel"
|
||||
SHELTER_CLASS_PATH = "/Game/Agrarian/Blueprints/Structures/BP_PrimitiveShelter"
|
||||
WOOD_NODE_LABEL = "AGR_WoodResourceNode_01"
|
||||
FIBER_NODE_LABEL = "AGR_FiberResourceNode_01"
|
||||
RABBIT_LABEL = "AGR_RabbitWildlife_01"
|
||||
|
||||
|
||||
def get_actor_label(actor):
|
||||
try:
|
||||
return actor.get_actor_label()
|
||||
except Exception:
|
||||
return actor.get_name()
|
||||
|
||||
|
||||
def load_blueprint_class(path):
|
||||
generated_class = unreal.EditorAssetLibrary.load_blueprint_class(path)
|
||||
if not generated_class:
|
||||
raise RuntimeError(f"Could not load Blueprint class: {path}")
|
||||
return generated_class
|
||||
|
||||
|
||||
def find_actor_by_label(label):
|
||||
for actor in unreal.EditorLevelLibrary.get_all_level_actors():
|
||||
if get_actor_label(actor) == label:
|
||||
return actor
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
if not unreal.EditorLevelLibrary.load_level(MAP_PATH):
|
||||
raise RuntimeError(f"Could not load map: {MAP_PATH}")
|
||||
|
||||
character_class = load_blueprint_class(CHARACTER_CLASS_PATH)
|
||||
shelter_class = load_blueprint_class(SHELTER_CLASS_PATH)
|
||||
shelter_recipe = unreal.EditorAssetLibrary.load_asset(SHELTER_RECIPE_PATH)
|
||||
if not shelter_recipe:
|
||||
raise RuntimeError(f"Could not load shelter recipe: {SHELTER_RECIPE_PATH}")
|
||||
frame_recipe = unreal.EditorAssetLibrary.load_asset(FRAME_RECIPE_PATH)
|
||||
if not frame_recipe:
|
||||
raise RuntimeError(f"Could not load frame recipe: {FRAME_RECIPE_PATH}")
|
||||
wall_panel_recipe = unreal.EditorAssetLibrary.load_asset(WALL_PANEL_RECIPE_PATH)
|
||||
if not wall_panel_recipe:
|
||||
raise RuntimeError(f"Could not load wall panel recipe: {WALL_PANEL_RECIPE_PATH}")
|
||||
roof_panel_recipe = unreal.EditorAssetLibrary.load_asset(ROOF_PANEL_RECIPE_PATH)
|
||||
if not roof_panel_recipe:
|
||||
raise RuntimeError(f"Could not load roof panel recipe: {ROOF_PANEL_RECIPE_PATH}")
|
||||
|
||||
wood_node = find_actor_by_label(WOOD_NODE_LABEL)
|
||||
if not wood_node:
|
||||
raise RuntimeError(f"Could not find placed wood node: {WOOD_NODE_LABEL}")
|
||||
fiber_node = find_actor_by_label(FIBER_NODE_LABEL)
|
||||
if not fiber_node:
|
||||
raise RuntimeError(f"Could not find placed fiber node: {FIBER_NODE_LABEL}")
|
||||
rabbit = find_actor_by_label(RABBIT_LABEL)
|
||||
if not rabbit:
|
||||
raise RuntimeError(f"Could not find placed rabbit wildlife: {RABBIT_LABEL}")
|
||||
|
||||
result = unreal.AgrarianEditorAutomationLibrary.run_natural_shelter_loop_smoke_test(
|
||||
character_class,
|
||||
wood_node,
|
||||
fiber_node,
|
||||
rabbit,
|
||||
frame_recipe,
|
||||
wall_panel_recipe,
|
||||
roof_panel_recipe,
|
||||
shelter_recipe,
|
||||
shelter_class,
|
||||
)
|
||||
unreal.log(result)
|
||||
if not str(result).startswith("PASS:"):
|
||||
raise RuntimeError(result)
|
||||
|
||||
unreal.log("Agrarian playable loop smoke verification complete.")
|
||||
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user