Workspace

Description

Snapshots detailing my workflow.

Features

#!/bin/bash # compileproject.sh # ------------------------------- # CONFIG # ------------------------------- # PROJECT STRUCTURE # ~/PROJECT_NAME/ WORKSPACE # ~/PROJECT_NAME/source SOURCE_DIR # ~/PROJECT_NAME/source/PROJECT_NAME PROJECT_FILES # # PLUGIN STRUCTURE # ~/PROJECT_NAME/source/PROJECT_NAME/Plugins DIR_PLUGIN # ~/PROJECT_NAME/source/PRJOECT_NAME/Plugins/PLUGIN_NAME PLUGINFILES # ------------------------------- # PATH TO ENGINE # ------------------------------- DIR_ENGINE="/media/stefan-wienold/UnrealEngine/Source/" # ------------------------------- # DETECT PROJECT NAME # ------------------------------- DIR_SCRIPT=$(dirname "$(realpath "$0")") IFS='/' read -ra FOLDERS <<< "$DIR_SCRIPT" PROJECT_NAME=${FOLDERS[-2]} PROJECT_FILES="$DIR_SCRIPT/$PROJECT_NAME" # ------------------------------- # SET DEFAULT DIRS # ------------------------------- PLUGIN_DIR="$PROJECT_FILES/Plugins" # ------------------------------- # ARROW KEY SELECTOR # ------------------------------- select_action() { local prompt="$1" shift local options=("$@") local selected=0 local key while true; do # clear line and redraw printf "\r\033[K%s > %s" "$prompt" "${options[$selected]}" IFS= read -rsn1 key case "$key" in $'\x1b') read -rsn2 key case "$key" in '[A') ((selected = (selected - 1 + ${#options[@]}) % ${#options[@]})) ;; '[B') ((selected = (selected + 1) % ${#options[@]})) ;; esac ;; "") echo return "$selected" ;; esac done } build_plugin() { local plugin="$1" local path="$PLUGIN_DIR/$plugin" echo "Building plugin: $plugin" "$ENGINE_DIR/Engine/Build/BatchFiles/Linux/Build.sh" \ "$PROJECT_NAME"Editor Linux Development \ -project="$PROJECT_FILES/$PROJECT_NAME.uproject" \ -ModuleWithSuffix="$plugin,3603" local status=$? if [ $status -ne 0 ]; then echo "Plugin build failed. Returing to menu..." read -n1 -p "Press any key to continue..." return 1 fi echo "Plugin build finished." read -n1 -p "Press any key to continue..." return 0 } # ------------------------------- # MAIN ARROW-KEY MENU # ------------------------------- select_action "Console" "Generate Project Files" "Build Project Files" "Build Plugin" "Exit" case $? in 0) "$DIR_ENGINE/Engine/Build/BatchFiles/Linux/GenerateProjectFiles.sh" \ -project="$PROJECT_FILES/$PROJECT_NAME.uproject" echo read -n1 -p "Press any key to continue..." ;; 1) "$DIR_ENGINE/Engine/Build/BatchFiles/Linux/Build.sh" \ "$PROJECT_NAME"Editor Linux Development \ -project="$PROJECT_FILES/$PROJECT_NAME.uproject" echo read -n1 -p "Press any key to continue..." ;; 2) # select plugin while true; do # ------------------------------- # SCAN PLUGINS # ------------------------------- mapfile -t PLUGIN_ARRAY < <(find "$PLUGIN_DIR" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) if [ ${#PLUGIN_ARRAY[@]} -eq 0 ]; then echo "No plugins found in $PLUGIN_DIR" read -n1 -p "Press any key to continue..." break # nothing to build, exit loop fi # ------------------------------- # DISPLAY OPTIONS # ------------------------------- echo "Available plugins:" echo for plugin in "${PLUGIN_ARRAY[@]}"; do echo " > $plugin" done echo echo "Any change to UCLASS layouts or Factory/AssetTypeActions code, " echo "always need a full editor restart, " echo "because Hot Reload cannot safely replace default objects." echo # ------------------------------- # PROMPT USER FOR PLUGIN NAME # ------------------------------- read -p "Type the plugin name to build: " selection # Check if input matches a scanned plugin folder MATCHED=false for plugin in "${PLUGIN_ARRAY[@]}"; do if [ "$selection" == "$plugin" ]; then MATCHED=true break fi done if [ "$MATCHED" = false ]; then echo "No matching plugin found." echo read -n1 -p "Press any key to refresh..." continue # back to while loop for new input fi # ------------------------------- # BUILD SELECTED PLUGIN # ------------------------------- SELECTED_PLUGIN="$selection" PLUGIN_PATH="$PLUGIN_DIR/$SELECTED_PLUGIN" echo echo "PLUGIN: $SELECTED_PLUGIN" echo "PATH: $PLUGIN_PATH" echo "$DIR_ENGINE/Engine/Build/BatchFiles/Linux/Build.sh" \ "$PROJECT_NAME"Editor Linux Development \ -project="$PROJECT_FILES/$PROJECT_NAME.uproject" \ -ModuleWithSuffix="$SELECTED_PLUGIN,3603" echo echo "Plugin build finished." echo read -n1 -p "Press any key to exit..." break # exit loop after successful build done ;; 3) exit 0 ;; esac

Performance

Specification

Intent