217 lines
5.2 KiB
Bash
Executable file
217 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
help="love-js.sh: \n
|
|
A tool for assembling love.js projects without relying on npm / node. \n\
|
|
For the full project please see https://github.com/Davidobot/love.js \n\
|
|
\n\
|
|
usage: \n\
|
|
./love-js.sh [love-file] [project-name] [opts]\n\
|
|
\n
|
|
opts:\n
|
|
-v= (--version=) Version of the Game. Will be included in file name.\n
|
|
-o= (--output-directory=) Target directory. Defaults to PWD\n
|
|
-t= (--text-colour=) Text Colour. Defaults to \"240,234,214\"\n
|
|
-c= (--canvas-colour=) Canvas Colour. Defaults to \"54,69,79\"\n
|
|
-a= (--author=) Author (Shows up on loading page).\n
|
|
-w= (--width=) Canvas Width (game width in conf). Defaults to 800\n
|
|
-h= (--height=) Canvas Height (game height in conf). Defaults to 600\n
|
|
-r (--run) Set flag if you want to run a local copy on port 8000\n
|
|
-d (--debug) Set flag for debug info\n
|
|
-h (--help) Display this text\n
|
|
\n
|
|
eg: \n\
|
|
|
|
Pack up sample.love\n
|
|
\t./love-js.sh sample.love sample\n
|
|
\t> sample-web.zip\n
|
|
\n
|
|
Pack up sample.love version 0.1.0\n
|
|
\t./love-js.sh sample-0.1.0.love sample -v=0.1.0\n
|
|
\t> sample-0.1.0-web.zip\n
|
|
\n
|
|
Pack up sample.love and set the background colour to black\n
|
|
\t./love-js.sh sample-0.1.0.love sample -v=0.1.0 -c=\"0,0,0\"\n
|
|
\t> sample-0.1.0-web.zip\n
|
|
\n
|
|
Pack up sample.love and set the author to \"Sample Name\"\n
|
|
\t./love-js.sh sample-0.1.0.love sample -a=\"Sample Name\"\n
|
|
\t> sample-web.zip"
|
|
|
|
if [ "$#" -lt "2" ]
|
|
then
|
|
echo "ERROR! love-js.sh expects at least two arguments."
|
|
echo -e $help
|
|
exit 1
|
|
fi
|
|
|
|
# use gdu on macOS, fixes 'invalid option -b' error
|
|
if [ "$(uname -s)" = "Darwin" ]; then
|
|
DU_CMD=gdu
|
|
else
|
|
DU_CMD=du
|
|
fi
|
|
|
|
love_file=$1
|
|
name=$2
|
|
## confirm that $release_dir/$name-$version.love exists
|
|
if [ ! -f $love_file ]; then
|
|
echo "love file not found!"
|
|
echo $love_file
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f /proc/sys/kernel/random/uuid ]; then
|
|
uuid=$(cat /proc/sys/kernel/random/uuid)
|
|
else
|
|
uuid="2fd99e56-5455-45dd-86dd-7af724874d65"
|
|
fi
|
|
|
|
author="";
|
|
run=false;
|
|
debug=false;
|
|
gethelp=false;
|
|
width=800
|
|
height=600
|
|
release="compat"
|
|
love_version="11.4"
|
|
canvas_colour="54,69,79"
|
|
text_colour="240,234,214"
|
|
initial_memory=0
|
|
module_size=$($DU_CMD -b $love_file | awk '{print $1}')
|
|
title=$(echo $name | sed -r 's/\<./\U&/g' | sed -r 's/-/\ /g')
|
|
version=""
|
|
dash_version=""
|
|
output_dir=$(pwd)
|
|
cachemodule="true"
|
|
|
|
for i in "$@"
|
|
do
|
|
case $i in
|
|
-v=*|--version=*)
|
|
version="${i#*=}"
|
|
dash_version="-${i#*=}"
|
|
;;
|
|
-o=*|--output-directory=*)
|
|
output_dir="${i#*=}"
|
|
;;
|
|
-w=*|--width=*)
|
|
width="${i#*=}"
|
|
;;
|
|
-h=*|--height=*)
|
|
height="${i#*=}"
|
|
;;
|
|
-t=*|--text-colour=*)
|
|
text_colour="${i#*=}"
|
|
;;
|
|
-c=*|--canvas-colour=*)
|
|
canvas_colour="${i#*=}"
|
|
;;
|
|
-a=*|--author=*)
|
|
author="${i#*=}"
|
|
;;
|
|
-r|--run)
|
|
run=true
|
|
;;
|
|
-d|--debug)
|
|
debug=true
|
|
;;
|
|
-h|--help)
|
|
gethelp=true
|
|
;;
|
|
-n|--no-cache)
|
|
cachemodule="false"
|
|
;;
|
|
*)
|
|
# unknown option
|
|
;;
|
|
esac
|
|
done
|
|
|
|
page_colour=$canvas_colour
|
|
|
|
file_name=$output_dir/$name$dash_version-web
|
|
|
|
debug (){
|
|
if [ $debug = true ]
|
|
then
|
|
echo ""
|
|
echo "Debug: love-js.sh"
|
|
echo "love file: ${love_file}"
|
|
echo "output file: $file_name"
|
|
echo "author: $author"
|
|
echo "version: $version"
|
|
echo "text colour: $text_colour"
|
|
echo "canvas colour: $canvas_colour"
|
|
echo "canvas size: ${height}, ${width}"
|
|
echo "run: ${run}"
|
|
echo "use cache: $cachemodule"
|
|
fi
|
|
}
|
|
|
|
call_dir=$(pwd)
|
|
root="$(dirname "$0")"
|
|
|
|
build(){
|
|
rm -fr $file_name
|
|
mkdir -p $file_name && mkdir -p $file_name/theme
|
|
|
|
cat $root/src/index.html | \
|
|
sed "s/{{title}}/${title}/g" | \
|
|
sed "s/{{version}}/${version}/g" | \
|
|
sed "s/{{author}}/${author}/g" | \
|
|
sed "s/{{width}}/${width}/g" | \
|
|
sed "s/{{height}}/${height}/g" | \
|
|
sed "s/{{initial-memory}}/${initial_memory}/g" | \
|
|
sed "s/{{canvas-colour}}/${canvas_colour}/g" | \
|
|
sed "s/{{text-colour}}/${text_colour}/g" > \
|
|
$file_name/index.html
|
|
|
|
cat $root/src/love.css | \
|
|
sed "s/{{page-colour}}/${page_colour}/g" > \
|
|
$file_name/theme/love.css
|
|
|
|
cat $root/src/game.js | \
|
|
sed "s/{{{cachemodule}}}/${cachemodule}/g" | \
|
|
sed "s/{{{metadata}}}/{\"package_uuid\":\"${uuid}\",\"remote_package_size\":$module_size,\"files\":[{\"filename\":\"\/game.love\",\"crunched\":0,\"start\":0,\"end\":$module_size,\"audio\":false}]}/" > \
|
|
$file_name/game.js
|
|
cp $root/src/serve.py $file_name
|
|
cp $root/src/consolewrapper.js $file_name
|
|
cp $love_file $file_name/game.love
|
|
cp $root/src/love-$love_version/$release/love.js $file_name
|
|
cp $root/src/love-$love_version/$release/love.wasm $file_name
|
|
if [ $release == "release" ]; then
|
|
cp $root/src/release/love.worker.js $file_name
|
|
fi
|
|
}
|
|
|
|
clean(){
|
|
rm -rf $file_name
|
|
}
|
|
|
|
release (){
|
|
rm -fr $file_name
|
|
build
|
|
debug
|
|
zip -r -q tmp $file_name
|
|
rm -f $file_name.zip
|
|
mv tmp.zip $file_name.zip
|
|
clean
|
|
}
|
|
|
|
run (){
|
|
debug
|
|
build
|
|
cd $file_name
|
|
python serve.py
|
|
}
|
|
|
|
if [ $gethelp = true ]
|
|
then
|
|
echo -e $help
|
|
elif [ $run = false ]
|
|
then
|
|
release
|
|
else
|
|
run
|
|
fi
|