From b51c139de432751c9c1991aaddc6087f27fd6151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Tue, 2 Jan 2024 23:34:09 +0100 Subject: [PATCH] Improve layout, add images --- android/gradle.properties | 4 +- assets/images/blank.png | Bin 0 -> 197 bytes assets/images/left-foot.png | Bin 0 -> 6196 bytes assets/images/left-hand.png | Bin 0 -> 4383 bytes assets/images/right-foot.png | Bin 0 -> 6196 bytes assets/images/right-hand.png | Bin 0 -> 4325 bytes .../metadata/android/en-US/changelogs/14.txt | 1 + .../metadata/android/fr-FR/changelogs/14.txt | 1 + images/blank.svg | 2 + images/build_game_images.sh | 80 ++++++++++++++++++ images/left-foot.svg | 11 +++ images/left-hand.svg | 4 + images/right-foot.svg | 11 +++ images/right-hand.svg | 4 + lib/ui/widgets/game.dart | 36 +++----- lib/ui/widgets/show_move.dart | 50 ++++++++--- pubspec.yaml | 3 +- 17 files changed, 166 insertions(+), 41 deletions(-) create mode 100644 assets/images/blank.png create mode 100644 assets/images/left-foot.png create mode 100644 assets/images/left-hand.png create mode 100644 assets/images/right-foot.png create mode 100644 assets/images/right-hand.png create mode 100644 fastlane/metadata/android/en-US/changelogs/14.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/14.txt create mode 100644 images/blank.svg create mode 100755 images/build_game_images.sh create mode 100644 images/left-foot.svg create mode 100644 images/left-hand.svg create mode 100644 images/right-foot.svg create mode 100644 images/right-hand.svg diff --git a/android/gradle.properties b/android/gradle.properties index 6638812..81949df 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.13 -app.versionCode=13 +app.versionName=0.0.14 +app.versionCode=14 diff --git a/assets/images/blank.png b/assets/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..71f46e2afe84d6655d32e85d164c463cdfc5dabc GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yU}6AaMrH;EhI8B8b}}$9a29w(7BevL9R^{><M}I6 z7#J8NOI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!zAU=HvJasB`Q|MDZ! zCm0wQ7)yfuf*Bm1-AH3#U@-G^aSV}=e0z|Qk%57sX~DnsWgZ6@2!L~}O$-c-TiLVL PffRbW`njxgN@xNA7Y;A$ literal 0 HcmV?d00001 diff --git a/assets/images/left-foot.png b/assets/images/left-foot.png new file mode 100644 index 0000000000000000000000000000000000000000..fd46c1a8ac871945c801a6a353ebb0b70639df7f GIT binary patch literal 6196 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 literal 0 HcmV?d00001 diff --git a/assets/images/left-hand.png b/assets/images/left-hand.png new file mode 100644 index 0000000000000000000000000000000000000000..34d676bb3985fe6479e20d003c1be4370d20857d GIT binary patch literal 4383 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 I=akR{0NP>|oB#j- literal 0 HcmV?d00001 diff --git a/assets/images/right-foot.png b/assets/images/right-foot.png new file mode 100644 index 0000000000000000000000000000000000000000..d0eff85495b7b8910389f948a712b02cde1909ef GIT binary patch literal 6196 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 literal 0 HcmV?d00001 diff --git a/assets/images/right-hand.png b/assets/images/right-hand.png new file mode 100644 index 0000000000000000000000000000000000000000..e730e5f4c58c8bdf3444ae7ff7ad45fe3e32e3e3 GIT binary patch literal 4325 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 literal 0 HcmV?d00001 diff --git a/fastlane/metadata/android/en-US/changelogs/14.txt b/fastlane/metadata/android/en-US/changelogs/14.txt new file mode 100644 index 0000000..33a0409 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/14.txt @@ -0,0 +1 @@ +Improve layout, add images. diff --git a/fastlane/metadata/android/fr-FR/changelogs/14.txt b/fastlane/metadata/android/fr-FR/changelogs/14.txt new file mode 100644 index 0000000..679e3e2 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/14.txt @@ -0,0 +1 @@ +Amélioration de l'affichage, ajout d'images. diff --git a/images/blank.svg b/images/blank.svg new file mode 100644 index 0000000..762c431 --- /dev/null +++ b/images/blank.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="512" height="512" version="1.1" viewBox="0 0 1.707 1.707" xmlns="http://www.w3.org/2000/svg"/> diff --git a/images/build_game_images.sh b/images/build_game_images.sh new file mode 100755 index 0000000..4d7f1be --- /dev/null +++ b/images/build_game_images.sh @@ -0,0 +1,80 @@ +#! /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=512 + +####################################################### + +# Game images +AVAILABLE_GAME_IMAGES=" + blank + left-hand + right-hand + left-foot + right-foot +" +####################################################### + +# 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} +} + +####################################################### + +# Create output folder +mkdir -p ${ASSETS_DIR}/images + +# Delete existing generated images +find ${ASSETS_DIR}/images -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}/images/${GAME_IMAGE}.png +done + diff --git a/images/left-foot.svg b/images/left-foot.svg new file mode 100644 index 0000000..77b20cb --- /dev/null +++ b/images/left-foot.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="512" height="512" version="1.1" viewBox="0 0 1.707 1.707" xmlns="http://www.w3.org/2000/svg"> + <g transform="matrix(-.018646 0 0 .018646 1.7858 -.078555)"> + <path d="m60.3 28.6c-2.7-1.4-5.7-2.5-8.7-3.2-6.4-1.4-14.2 0.1-17.9 5.9-3.5 5.5-1.6 11.6 1.8 16.6 2.6 4 6.9 8 7.4 13 0.1 1.5-0.2 3-0.8 4.3-1.5 3.2-2.7 7-3 10.6-0.7 7.5 6.5 15.8 14.3 13.9 3.3-0.8 6.5-3.3 8.5-7.3 1.3-2.6 2.1-5.7 2.9-8.5 2-6.6 2.9-13.5 3.5-20.3 0.6-6.9 1.4-14.5-2.2-20-1.3-2-3.1-3.7-5.8-5z"/> + <ellipse cx="67.5" cy="26.8" rx="2.8" ry="4.2"/> + <ellipse cx="61.4" cy="21.6" rx="2.9" ry="4.3"/> + <ellipse cx="54.3" cy="18.7" rx="3.3" ry="5"/> + <ellipse cx="45.9" cy="17.4" rx="3.8" ry="5.6"/> + <ellipse cx="35.1" cy="18.1" rx="5.4" ry="8.1"/> + </g> +</svg> diff --git a/images/left-hand.svg b/images/left-hand.svg new file mode 100644 index 0000000..3f23f94 --- /dev/null +++ b/images/left-hand.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="512" height="512" version="1.1" viewBox="0 0 1.707 1.707" xmlns="http://www.w3.org/2000/svg"> + <path d="m0.46238 0.46639v0.68163a0.34131 0.34131 0 0 0 0.66514 0.10834 0.68839 0.68839 0 0 1 0.056047-0.12444l0.12961-0.22463a0.085326 0.085326 0 1 0-0.1477-0.085477l-0.093031 0.16042v-0.59079a0.065997 0.065997 0 0 0-0.077923-0.065002 0.067985 0.067985 0 0 0-0.0539 0.067983v0.39062a0.013716 0.013716 0 0 1-0.013714 0.013892 0.013716 0.013716 0 0 1-0.013713-0.013892v-0.50153a0.066196 0.066196 0 0 0-0.079312-0.065002 0.067985 0.067985 0 0 0-0.053662 0.067983v0.49855a0.013915 0.013915 0 0 1-0.013892 0.013892 0.013716 0.013716 0 0 1-0.013713-0.013892v-0.42957a0.065997 0.065997 0 0 0-0.077726-0.065002 0.067985 0.067985 0 0 0-0.0539 0.067983v0.42659a0.013716 0.013716 0 0 1-0.013713 0.013892 0.013716 0.013716 0 0 1-0.013714-0.013892v-0.32164a0.066196 0.066196 0 0 0-0.077726-0.065002 0.067985 0.067985 0 0 0-0.053483 0.067983z" stroke-width=".019878"/> +</svg> diff --git a/images/right-foot.svg b/images/right-foot.svg new file mode 100644 index 0000000..43df434 --- /dev/null +++ b/images/right-foot.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="512" height="512" version="1.1" viewBox="0 0 1.707 1.707" xmlns="http://www.w3.org/2000/svg"> + <g transform="matrix(.018646 0 0 .018646 -.078787 -.078555)"> + <path d="m60.3 28.6c-2.7-1.4-5.7-2.5-8.7-3.2-6.4-1.4-14.2 0.1-17.9 5.9-3.5 5.5-1.6 11.6 1.8 16.6 2.6 4 6.9 8 7.4 13 0.1 1.5-0.2 3-0.8 4.3-1.5 3.2-2.7 7-3 10.6-0.7 7.5 6.5 15.8 14.3 13.9 3.3-0.8 6.5-3.3 8.5-7.3 1.3-2.6 2.1-5.7 2.9-8.5 2-6.6 2.9-13.5 3.5-20.3 0.6-6.9 1.4-14.5-2.2-20-1.3-2-3.1-3.7-5.8-5z"/> + <ellipse cx="67.5" cy="26.8" rx="2.8" ry="4.2"/> + <ellipse cx="61.4" cy="21.6" rx="2.9" ry="4.3"/> + <ellipse cx="54.3" cy="18.7" rx="3.3" ry="5"/> + <ellipse cx="45.9" cy="17.4" rx="3.8" ry="5.6"/> + <ellipse cx="35.1" cy="18.1" rx="5.4" ry="8.1"/> + </g> +</svg> diff --git a/images/right-hand.svg b/images/right-hand.svg new file mode 100644 index 0000000..b825b28 --- /dev/null +++ b/images/right-hand.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="512" height="512" version="1.1" viewBox="0 0 1.707 1.707" xmlns="http://www.w3.org/2000/svg"> + <path d="m1.2446 0.46639v0.68163a0.34131 0.34131 0 0 1-0.66514 0.10834 0.68839 0.68839 0 0 0-0.056047-0.12444l-0.12961-0.22463a0.085326 0.085326 0 1 1 0.1477-0.085477l0.093031 0.16042v-0.59079a0.065997 0.065997 0 0 1 0.077923-0.065002 0.067985 0.067985 0 0 1 0.0539 0.067983v0.39062a0.013716 0.013716 0 0 0 0.013714 0.013892 0.013716 0.013716 0 0 0 0.013714-0.013892v-0.50153a0.066196 0.066196 0 0 1 0.079312-0.065002 0.067985 0.067985 0 0 1 0.053662 0.067983v0.49855a0.013915 0.013915 0 0 0 0.013892 0.013892 0.013716 0.013716 0 0 0 0.013713-0.013892v-0.42957a0.065997 0.065997 0 0 1 0.077726-0.065002 0.067985 0.067985 0 0 1 0.0539 0.067983v0.42659a0.013716 0.013716 0 0 0 0.013713 0.013892 0.013716 0.013716 0 0 0 0.013714-0.013892v-0.32164a0.066196 0.066196 0 0 1 0.077726-0.065002 0.067985 0.067985 0 0 1 0.053483 0.067983z" stroke-width=".019878"/> +</svg> diff --git a/lib/ui/widgets/game.dart b/lib/ui/widgets/game.dart index a88bae4..51d9077 100644 --- a/lib/ui/widgets/game.dart +++ b/lib/ui/widgets/game.dart @@ -1,7 +1,6 @@ import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:unicons/unicons.dart'; import 'package:twister/cubit/game_cubit.dart'; import 'package:twister/models/move.dart'; @@ -17,32 +16,21 @@ class Game extends StatefulWidget { class _GameState extends State<Game> { final player = AudioPlayer(); - Widget pickNewMove() { - return BlocBuilder<GameCubit, GameState>(builder: (BuildContext context, GameState state) { - return TextButton( - onPressed: () { - Move newMove = Move.pickRandom(); - - BlocProvider.of<GameCubit>(context).setValues( - move: newMove, - ); - - player.play(AssetSource(newMove.toSoundAsset())); - }, - child: Icon(UniconsSolid.refresh), - ); - }); - } - @override Widget build(BuildContext context) { return BlocBuilder<GameCubit, GameState>( - builder: (context, gameState) { - return Column( - children: [ - ShowMove(move: gameState.move ?? Move.createNull()), - pickNewMove(), - ], + builder: (BuildContext context, GameState gameState) { + return GestureDetector( + child: ShowMove(move: gameState.move ?? Move.createNull()), + onTap: () { + Move newMove = Move.pickRandom(); + + BlocProvider.of<GameCubit>(context).setValues( + move: newMove, + ); + + player.play(AssetSource(newMove.toSoundAsset())); + }, ); }, ); diff --git a/lib/ui/widgets/show_move.dart b/lib/ui/widgets/show_move.dart index adead4b..b1250a3 100644 --- a/lib/ui/widgets/show_move.dart +++ b/lib/ui/widgets/show_move.dart @@ -26,7 +26,13 @@ class ShowMove extends StatelessWidget { } } - Widget getWidget(Move move) { + Widget getImageWidget(Move move) { + String imageAsset = 'assets/images/' + (move.member?.toString() ?? 'blank') + '.png'; + + return Image.asset(imageAsset); + } + + Widget getTextWidget(Move move) { TextStyle style = TextStyle( color: Colors.black, fontSize: 30, @@ -47,23 +53,39 @@ class ShowMove extends StatelessWidget { } } - @override - Widget build(BuildContext context) { + Widget buildWidget(Move move, double maxWidth) { Color color = getColor(move); - return Container( - child: Padding( - padding: EdgeInsets.all(20), - child: getWidget(move), - ), - decoration: BoxDecoration( - color: color, - borderRadius: BorderRadius.all(Radius.circular(50)), - border: Border.all( - color: color.darken(20), - width: 10, + double containerSize = maxWidth * 0.8; + + return AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: (Widget child, Animation<double> animation) { + return ScaleTransition(child: child, scale: animation); + }, + child: Container( + width: containerSize, + height: containerSize, + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.all(Radius.circular(containerSize)), + border: Border.all( + color: color.darken(15), + width: 15, + ), ), + child: getImageWidget(move), ), ); } + + @override + Widget build(BuildContext context) { + return LayoutBuilder( + builder: (context, constraints) { + final double maxWidth = constraints.maxWidth; + return buildWidget(move, maxWidth); + }, + ); + } } diff --git a/pubspec.yaml b/pubspec.yaml index 360af89..f751a47 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: twister game companion publish_to: 'none' -version: 0.0.13+13 +version: 0.0.14+14 environment: sdk: '^3.0.0' @@ -23,6 +23,7 @@ dependencies: flutter: uses-material-design: false assets: + - assets/images/ - assets/translations/ - assets/voices/ -- GitLab