#! /bin/bash # Check dependencies command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" ASSETS_DIR="${BASE_DIR}/assets" OPTIPNG_OPTIONS="-preserve -quiet -o7" ICON_SIZE=192 ####################################################### # Game images AVAILABLE_GAME_IMAGES=" button_back button_start button_help button_show_conflicts game_win placeholder cell_empty " # Settings images AVAILABLES_GAME_SETTINGS=" level:easy,medium,hard,nightmare size:2x2,3x2,3x3,4x4 " # Skins AVAILABLE_SKINS=" default food monsters nature " # Images per skin SKIN_IMAGES=" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 " ####################################################### # optimize svg function optimize_svg() { SOURCE="$1" cp ${SOURCE} ${SOURCE}.tmp scour \ --remove-descriptive-elements \ --enable-id-stripping \ --enable-viewboxing \ --enable-comment-stripping \ --nindent=4 \ --quiet \ -i ${SOURCE}.tmp \ -o ${SOURCE} rm ${SOURCE}.tmp } # build icons function build_icon() { SOURCE="$1" TARGET="$2" echo "Building ${TARGET}" if [ ! -f "${SOURCE}" ]; then echo "Missing file: ${SOURCE}" exit 1 fi optimize_svg "${SOURCE}" inkscape \ --export-width=${ICON_SIZE} \ --export-height=${ICON_SIZE} \ --export-filename=${TARGET} \ ${SOURCE} optipng ${OPTIPNG_OPTIONS} ${TARGET} } function build_settings_icons() { INPUT_STRING="$1" SETTING_NAME="$(echo "${INPUT_STRING}" | cut -d":" -f1)" SETTING_VALUES="$(echo "${INPUT_STRING}" | cut -d":" -f2 | tr "," " ")" for SETTING_VALUE in ${SETTING_VALUES} do SETTING_CODE="${SETTING_NAME}_${SETTING_VALUE}" build_icon ${CURRENT_DIR}/${SETTING_CODE}.svg ${ASSETS_DIR}/icons/${SETTING_CODE}.png done } function build_icon_for_skin() { SKIN_CODE="$1" # skin main image build_icon ${CURRENT_DIR}/skin_${SKIN_CODE}.svg ${ASSETS_DIR}/icons/skin_${SKIN_CODE}.png # skin images for SKIN_IMAGE in ${SKIN_IMAGES} do build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${SKIN_IMAGE}.svg ${ASSETS_DIR}/skins/${SKIN_CODE}_${SKIN_IMAGE}.png done } ####################################################### # Create output folders mkdir -p ${ASSETS_DIR}/icons mkdir -p ${ASSETS_DIR}/skins # Delete existing generated images find ${ASSETS_DIR}/icons -type f -name "*.png" -delete find ${ASSETS_DIR}/skins -type f -name "*.png" -delete # build game images for GAME_IMAGE in ${AVAILABLE_GAME_IMAGES} do build_icon ${CURRENT_DIR}/${GAME_IMAGE}.svg ${ASSETS_DIR}/icons/${GAME_IMAGE}.png done # build settings images for GAME_SETTING in ${AVAILABLES_GAME_SETTINGS} do build_settings_icons "${GAME_SETTING}" done # build skins images for SKIN in ${AVAILABLE_SKINS} do build_icon_for_skin "${SKIN}" done