Add Ground Zero terrain pipeline and playable assets
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import unreal
|
||||
|
||||
|
||||
MAP_PATH = "/Game/Agrarian/Maps/L_GroundZeroTerrain_Test"
|
||||
PROJECT_ROOT = Path(r"Z:\AgrarianGameBulid")
|
||||
TILE_ID = "gz_us_ca_pacifica_utm10n_e544_n4160"
|
||||
UNREAL_TERRAIN_ROOT = PROJECT_ROOT / "Data" / "Terrain" / "Unreal" / TILE_ID
|
||||
HEIGHTMAP_PATH = UNREAL_TERRAIN_ROOT / f"{TILE_ID}_unreal_1009.r16"
|
||||
METADATA_PATH = UNREAL_TERRAIN_ROOT / f"{TILE_ID}_unreal_heightmap_metadata.json"
|
||||
LANDSCAPE_LABEL = "AGR_GroundZero_Landscape"
|
||||
|
||||
|
||||
def get_actor_label(actor):
|
||||
try:
|
||||
return actor.get_actor_label()
|
||||
except Exception:
|
||||
return actor.get_name()
|
||||
|
||||
|
||||
def remove_existing_landscape():
|
||||
for actor in unreal.EditorLevelLibrary.get_all_level_actors():
|
||||
if get_actor_label(actor) == LANDSCAPE_LABEL:
|
||||
unreal.EditorLevelLibrary.destroy_actor(actor)
|
||||
|
||||
|
||||
def create_or_load_map():
|
||||
unreal.EditorAssetLibrary.make_directory("/Game/Agrarian/Maps")
|
||||
if unreal.EditorAssetLibrary.does_asset_exist(MAP_PATH):
|
||||
if not unreal.EditorLevelLibrary.load_level(MAP_PATH):
|
||||
raise RuntimeError(f"Could not load map: {MAP_PATH}")
|
||||
return
|
||||
|
||||
level_subsystem = unreal.get_editor_subsystem(unreal.LevelEditorSubsystem)
|
||||
if hasattr(level_subsystem, "new_level"):
|
||||
if not level_subsystem.new_level(MAP_PATH):
|
||||
raise RuntimeError(f"Could not create map: {MAP_PATH}")
|
||||
return
|
||||
|
||||
if hasattr(unreal.EditorLevelLibrary, "new_level"):
|
||||
if not unreal.EditorLevelLibrary.new_level(MAP_PATH):
|
||||
raise RuntimeError(f"Could not create map: {MAP_PATH}")
|
||||
return
|
||||
|
||||
raise RuntimeError("No supported Unreal Python API found for creating a level")
|
||||
|
||||
|
||||
def main():
|
||||
create_or_load_map()
|
||||
remove_existing_landscape()
|
||||
|
||||
with METADATA_PATH.open("r", encoding="utf-8") as metadata_file:
|
||||
metadata = json.load(metadata_file)
|
||||
|
||||
import_settings = metadata["unreal_landscape_import"]
|
||||
heightmap = metadata["heightmap"]
|
||||
result = unreal.AgrarianEditorAutomationLibrary.import_landscape_heightmap_into_editor_world(
|
||||
str(HEIGHTMAP_PATH),
|
||||
int(heightmap["width"]),
|
||||
int(heightmap["height"]),
|
||||
float(import_settings["x_scale_cm"]),
|
||||
float(import_settings["y_scale_cm"]),
|
||||
float(import_settings["z_scale_cm"]),
|
||||
LANDSCAPE_LABEL,
|
||||
)
|
||||
|
||||
if not str(result).startswith("PASS:"):
|
||||
raise RuntimeError(str(result))
|
||||
|
||||
unreal.log(str(result))
|
||||
unreal.EditorLevelLibrary.save_current_level()
|
||||
unreal.log(f"Ground Zero terrain map saved: {MAP_PATH}")
|
||||
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user