From 87f931a8e4561eee2b22b88124499467245b0c54 Mon Sep 17 00:00:00 2001 From: Matt Penny Date: Wed, 9 Oct 2024 21:57:39 -0400 Subject: [PATCH] CMake: link level and model animation data --- assets/models/CMakeLists.txt | 119 +++++++++++++++++----------- assets/test_chambers/CMakeLists.txt | 18 ++++- 2 files changed, 87 insertions(+), 50 deletions(-) diff --git a/assets/models/CMakeLists.txt b/assets/models/CMakeLists.txt index f8eae63..5ec8a2f 100644 --- a/assets/models/CMakeLists.txt +++ b/assets/models/CMakeLists.txt @@ -11,42 +11,8 @@ cmake_path( ## Model export ## ################## -# Models whose data is loaded/unloaded as needed -set(DYNAMIC_MODELS - cube/cube - props/autoportal_frame/autoportal_frame - props/box_dropper_glass - props/cylinder_test - props/lab_chair - props/lab_desk/lab_desk01 - props/lab_desk/lab_desk02 - props/lab_desk/lab_desk03 - props/lab_desk/lab_desk04 - props/lab_monitor - props/light_rail_endcap - props/portal_cleanser - props/radio - signage/clock - signage/clock_digits -) - -# Animated models whose data is loaded/unloaded as needed -set(DYNAMIC_ANIMATED_MODELS - pedestal - props/box_dropper - props/button - props/combine_ball_catcher - props/combine_ball_launcher - props/door_01 - props/door_02 - props/security_camera - props/switch001 -) - -# All models -set(MODELS - ${DYNAMIC_MODELS} - ${DYNAMIC_ANIMATED_MODELS} +# Models whose data is always loaded +set(STATIC_MODELS fleck_ash2 grav_flare player/chell @@ -67,6 +33,60 @@ set(MODELS props/signage ) +# Models whose data is loaded/unloaded as needed +set(DYNAMIC_MODELS + cube/cube + pedestal + props/autoportal_frame/autoportal_frame + props/box_dropper + props/box_dropper_glass + props/button + props/combine_ball_catcher + props/combine_ball_launcher + props/cylinder_test + props/door_01 + props/door_02 + props/lab_chair + props/lab_desk/lab_desk01 + props/lab_desk/lab_desk02 + props/lab_desk/lab_desk03 + props/lab_desk/lab_desk04 + props/lab_monitor + props/light_rail_endcap + props/portal_cleanser + props/radio + props/security_camera + props/switch001 + signage/clock + signage/clock_digits +) + +# Models with predefined animations +set(KEYFRAMED_ANIMATED_MODELS + pedestal + player/chell + portal_gun/v_portalgun + props/box_dropper + props/combine_ball_catcher + props/combine_ball_launcher + props/door_01 + props/door_02 + props/switch001 +) + +# All animated models, including those which are only procedurally animated +set(ANIMATED_MODELS + ${KEYFRAMED_ANIMATED_MODELS} + props/button + props/security_camera +) + +# All models +set(MODELS + ${DYNAMIC_MODELS} + ${STATIC_MODELS} +) + # Most models depend on both of these. Some only depend on one or the other, # but use both for simplicity. Otherwise there would be many special cases. set(MODEL_DEFAULT_MATERIALS @@ -121,17 +141,22 @@ function(_add_model_generate_command MODEL_NAME MODEL_FBX OUTPUT_LIST) set(OUTPUT_FILE_H "${OUTPUT_FILE_NO_EXTENSION}.h") set(OUTPUT_FILE_GEO_C "${OUTPUT_FILE_NO_EXTENSION}_geo.c") + set(OUTPUT_FILES + ${OUTPUT_FILE_H} + ${OUTPUT_FILE_GEO_C} + ) - # TODO: not all models have animations - # set(OUTPUT_FILE_ANIM_C "${OUTPUT_FILE_NO_EXTENSION}_anim.c") + if (MODEL_NAME IN_LIST KEYFRAMED_ANIMATED_MODELS) + set(OUTPUT_FILE_ANIM_C "${OUTPUT_FILE_NO_EXTENSION}_anim.c") + list(APPEND OUTPUT_FILES ${OUTPUT_FILE_ANIM_C}) + endif() add_custom_command( DEPENDS - # Need to depend on textures since some models embed them textures "$" ${CONVERT_ASSET} ${MODEL_FBX} ${MODEL_FLAGS} ${MODEL_MATERIALS} OUTPUT - ${OUTPUT_FILE_H} ${OUTPUT_FILE_GEO_C} ${OUTPUT_FILE_ANIM_C} + ${OUTPUT_FILES} COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR} COMMAND @@ -150,11 +175,7 @@ function(_add_model_generate_command MODEL_NAME MODEL_FBX OUTPUT_LIST) VERBATIM ) - list(APPEND ${OUTPUT_LIST} - ${OUTPUT_FILE_H} - ${OUTPUT_FILE_GEO_C} - ${OUTPUT_FILE_ANIM_C} - ) + list(APPEND ${OUTPUT_LIST} ${OUTPUT_FILES}) return(PROPAGATE ${OUTPUT_LIST}) endfunction() @@ -217,9 +238,11 @@ foreach(GENERATED_HEADER ${MODEL_GENERATED_HEADERS}) ) if(MODEL_NAME IN_LIST DYNAMIC_MODELS) - list(APPEND DYNAMIC_MODEL_HEADERS ${GENERATED_HEADER}) - elseif(MODEL_NAME IN_LIST DYNAMIC_ANIMATED_MODELS) - list(APPEND DYNAMIC_ANIMATED_MODEL_HEADERS ${GENERATED_HEADER}) + if(MODEL_NAME IN_LIST ANIMATED_MODELS) + list(APPEND DYNAMIC_ANIMATED_MODEL_HEADERS ${GENERATED_HEADER}) + else() + list(APPEND DYNAMIC_MODEL_HEADERS ${GENERATED_HEADER}) + endif() endif() endforeach() diff --git a/assets/test_chambers/CMakeLists.txt b/assets/test_chambers/CMakeLists.txt index 8dffede..a58b7ed 100644 --- a/assets/test_chambers/CMakeLists.txt +++ b/assets/test_chambers/CMakeLists.txt @@ -41,6 +41,17 @@ set(LEVELS test_chamber_10 ) +set(ANIMATED_LEVELS + test_chamber_00 + test_chamber_03 + test_chamber_04 + test_chamber_06 + test_chamber_07 + test_chamber_08 + test_chamber_09 + test_chamber_10 +) + set(LEVEL_MATERIALS ${ASSETS_DIR}/materials/static.skm.yaml ) @@ -87,8 +98,10 @@ function(_add_level_generate_command LEVEL_NAME LEVEL_FBX OUTPUT_LIST) ${OUTPUT_FILE_GEO_C} ) - # TODO: not all levels have animations - # set(OUTPUT_FILE_ANIM_C "${OUTPUT_FILE_NO_EXTENSION}_anim.c") + if (LEVEL_NAME IN_LIST ANIMATED_LEVELS) + set(OUTPUT_FILE_ANIM_C "${OUTPUT_FILE_NO_EXTENSION}_anim.c") + list(APPEND OUTPUT_FILES ${OUTPUT_FILE_ANIM_C}) + endif() set(MATERIAL_ARGS "") foreach(MATERIAL ${LEVEL_MATERIALS}) @@ -99,6 +112,7 @@ function(_add_level_generate_command LEVEL_NAME LEVEL_FBX OUTPUT_LIST) add_custom_command( DEPENDS + textures "$" ${EXPORT_SCRIPTS} ${LEVEL_FBX} ${LEVEL_YAML} ${LEVEL_MATERIALS} OUTPUT ${OUTPUT_FILES}