forked from mtcontrib/leaftest
127 lines
3.4 KiB
Bash
Executable File
127 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
MAPDIR=$1
|
|
SPAWNPOS=$2
|
|
DIMENSIONS=$3
|
|
|
|
if [ -z $MAPPERDIR ]; then
|
|
MAPPERDIR=.
|
|
fi
|
|
|
|
mapperpath=$MAPPERDIR/minetestmapper
|
|
|
|
if [ ! -f $mapperpath ]; then
|
|
echo "Error, "$mapperpath" doesn't exist."
|
|
echo "Please specify the path to the minetestmapper executable via the MAPPERDIR variable"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$JOBNUM" ]; then
|
|
JOBNUM=1
|
|
fi
|
|
|
|
case "$JOBNUM" in
|
|
''|*[!0-9]*) echo "Bad number of jobs '$JOBNUM'. Please specify a positive integer." ; exit 1 ;;
|
|
*) ;;
|
|
esac
|
|
|
|
# echo "Number of jobs: $JOBNUM"
|
|
|
|
prefix_func="\
|
|
prefix() { \
|
|
while read line ; do \
|
|
echo \"\${1}\${line}\"; \
|
|
done \
|
|
}"
|
|
|
|
# retains || usage when doing | prefix "sth"
|
|
# use it when needed
|
|
prefix_pipefail="\
|
|
set -o pipefail ; \
|
|
$prefix_func"
|
|
|
|
# prefix should be usable within this script as well
|
|
eval $prefix_func
|
|
|
|
#sh -c "$prefix_func ; echo -e 'a\nb\nc\n' | prefix 'PREF '"
|
|
#bash -c "$prefix_pipefail ; (echo -e 'a\nb\nc\n' ; false) | prefix 'PREF '" || echo "ERR"
|
|
#exit 1
|
|
|
|
scriptdir=`readlink -f $0`
|
|
scriptdir=`dirname $scriptdir`
|
|
|
|
tiledir=$scriptdir/www/tiles
|
|
|
|
spawnx=${SPAWNPOS%%,*}
|
|
spawny=${SPAWNPOS##*,}
|
|
#echo "spawn position: $spawnx $spawny"
|
|
tilesize=256
|
|
zoomlevelnum=3
|
|
|
|
tilenum=$(($DIMENSIONS/$tilesize))
|
|
|
|
mkdir -p ${tiledir}/20
|
|
rm -f ${tiledir}/20/*
|
|
|
|
jobparam="-P$JOBNUM"
|
|
|
|
#create tile images
|
|
for x in $(seq 0 $tilenum)
|
|
do
|
|
for y in $(seq 0 $tilenum)
|
|
do
|
|
posx=$(($spawnx+$tilesize*($x-$tilenum/2)))
|
|
posy=$(($spawny+$tilesize*($tilenum/2-$y)))
|
|
# Execute sh -c "something"
|
|
echo "-c"
|
|
echo "$prefix_pipefail ; $mapperpath ${MAPPERPARAMS} -i ${MAPDIR} --geometry ${posx},${posy}+${tilesize}+${tilesize} -o ${tiledir}/20/map_${x}_${y}.png \
|
|
2> >(>&2 prefix '[TILEGEN 20/map_${x}_${y}.png ERR]: ') | prefix '[TILEGEN 20/map_${x}_${y}.png]: ' \
|
|
|| (>&2 echo 'minetesmapper for tile [${x},${y}] ended with non zero exit code'; exit 255)"
|
|
done
|
|
done | xargs -n2 $jobparam -d '\n' bash # bash required because of "set -o pipefail" usage
|
|
|
|
xargs_exit=$?
|
|
if [ $xargs_exit -ne 0 ]; then
|
|
# xargs unfortunately exits immediately, without even waiting for sub-processes
|
|
sleep 1
|
|
>&2 echo "Error: xargs ended with non-zero exit code $xargs_exit."
|
|
exit 1
|
|
fi
|
|
|
|
#join the images and make them smaller
|
|
mult=1
|
|
for s in $(seq 1 $zoomlevelnum)
|
|
do
|
|
mult=$(($mult*2))
|
|
tnum=$(($tilenum/$mult-1))
|
|
zoomlevel=$((20-$s))
|
|
zoomlevelbefore=$((20-$s+1))
|
|
zlv=$zoomlevel # shorter name
|
|
dir=$tiledir/$zoomlevel
|
|
dirb=$tiledir/$zoomlevelbefore
|
|
mkdir -p $dir
|
|
rm -f ${dir}/20/*
|
|
for x in $(seq 0 $tnum)
|
|
do
|
|
for y in $(seq 0 $tnum)
|
|
do
|
|
montage $dirb/map_$(($x*2))_$((y*2)).png $dirb/map_$(($x*2+1))_$((y*2)).png $dirb/map_$(($x*2))_$((y*2+1)).png $dirb/map_$(($x*2+1))_$((y*2+1)).png -geometry +0+0 $dir/map_${x}_${y}.png \
|
|
2> >(>&2 prefix "[MONTAGE $zlv/map_${x}_${y}.png ERR]: ") | prefix "[MONTAGE $zlv/map_${x}_${y}.png]: "
|
|
if [ ${PIPESTATUS[0]} -ne 0 ]; then
|
|
echo "montage exited with non zero exit code, aborting."
|
|
exit 1
|
|
fi
|
|
convert $dir/map_${x}_${y}.png -resize 50% $dir/map_${x}_${y}.png \
|
|
2> >(>&2 prefix "[SHRINK $zlv/map_${x}_${y}.png ERR]: ") | prefix "[SHRINK $zlv/map_${x}_${y}.png]: "
|
|
if [ ${PIPESTATUS[0]} -ne 0 ]; then
|
|
echo "shrinking exited with non zero exit code, aborting."
|
|
exit 1
|
|
fi
|
|
done
|
|
done
|
|
done
|
|
|
|
zoommin=$((20-$zoomlevelnum))
|
|
#write the resulting config into a json file
|
|
echo "{\"mapsize\":$DIMENSIONS, \"spawn\":{\"x\":$spawnx,\"y\":$spawny}, \"zoommin\":$zoommin}" > $scriptdir/www/conf.json
|