Skip to content
Snippets Groups Projects
Select Git revision
  • 22ce96e3feb4ad3d39e5c22ef14a93c4fb6338f8
  • master default protected
  • 35-upgrade-framework-and-dependencies
  • 24-add-fruits
  • 15-improve-app-metadata
  • Release_0.10.0_31 protected
  • Release_0.9.2_30 protected
  • Release_0.9.1_29 protected
  • Release_0.9.0_28 protected
  • Release_0.8.0_27 protected
  • Release_0.7.0_26 protected
  • Release_0.6.0_25 protected
  • Release_0.5.4_24 protected
  • Release_0.5.3_23 protected
  • Release_0.5.2_22 protected
  • Release_0.5.1_21 protected
  • Release_0.5.0_20 protected
  • Release_0.4.0_19 protected
  • Release_0.3.1_18 protected
  • Release_0.3.0_17 protected
  • Release_0.2.1_16 protected
  • Release_0.2.0_15 protected
  • Release_0.1.1_14 protected
  • Release_0.1.0_13 protected
  • Release_0.0.12_12 protected
25 results

build_game_icons.sh

Blame
  • build_game_icons.sh 2.25 KiB
    #! /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}")"
    
    OPTIPNG_OPTIONS="-preserve -quiet -o7"
    ICON_SIZE=192
    
    #######################################################
    
    # Game images
    AVAILABLE_GAME_IMAGES="
      button_back
      button_start
      game_fail
      game_win
      level_easy
      level_normal
      level_hard
      level_nightmare
    "
    
    # Skins
    AVAILABLE_SKINS="
      retro
      colors
    "
    
    # Images per skin
    SKIN_IMAGES="
      empty
      head
      body
      fruit
    "
    
    #######################################################
    
    # 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}"
      fi
    
      optimize_svg "${SOURCE}"
    
      inkscape \
          --export-width=${ICON_SIZE} \
          --export-height=${ICON_SIZE} \
          --export-filename=${TARGET} \
          ${SOURCE}
    
      optipng ${OPTIPNG_OPTIONS} ${TARGET}
    }
    
    function build_icon_for_skin() {
      SKIN_CODE="$1"
    
      # skin main image
      build_icon ${CURRENT_DIR}/skin_${SKIN_CODE}.svg ${BASE_DIR}/assets/icons/skin_${SKIN_CODE}.png
    
      # skin images
      for SKIN_IMAGE in ${SKIN_IMAGES}
      do
        build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${SKIN_IMAGE}.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_${SKIN_IMAGE}.png
      done
    }
    
    mkdir -p ${BASE_DIR}/assets/icons
    mkdir -p ${BASE_DIR}/assets/skins
    
    # build game images
    for GAME_IMAGE in ${AVAILABLE_GAME_IMAGES}
    do
      build_icon ${CURRENT_DIR}/${GAME_IMAGE}.svg ${BASE_DIR}/assets/icons/${GAME_IMAGE}.png
    done
    
    # build skins images
    for SKIN in ${AVAILABLE_SKINS}
    do
      build_icon_for_skin "${SKIN}"
    done