Skip to content
Snippets Groups Projects
Commit bf8bd049 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Improve UI, add custom graphics

parent 698d376a
No related branches found
No related tags found
1 merge request!7Resolve "Improve UI, add custom graphics"
Pipeline #5954 passed
Showing
with 539 additions and 109 deletions
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.6 app.versionName=0.0.7
app.versionCode=6 app.versionCode=7
assets/skins/default_house.png

2.3 KiB

Improve UI.
Améliorations graphiques.
...@@ -98,7 +98,6 @@ class MyApp extends StatelessWidget { ...@@ -98,7 +98,6 @@ class MyApp extends StatelessWidget {
} }
final List<String> skinImages = [ final List<String> skinImages = [
'house',
'seed', 'seed',
]; ];
......
class Category {
final String key;
final String text;
final String emoji;
const Category({
required this.key,
required this.text,
required this.emoji,
});
@override
String toString() {
return '$Category(${toJson()})';
}
Map<String, dynamic> toJson() {
return {
'key': key,
'text': text,
'emoji': emoji,
};
}
}
class Letter {
final String key;
final String text;
const Letter({
required this.key,
required this.text,
});
@override
String toString() {
return '$Letter(${toJson()})';
}
Map<String, dynamic> toJson() {
return {
'key': key,
'text': text,
};
}
}
...@@ -25,7 +25,7 @@ class GameLayout extends StatelessWidget { ...@@ -25,7 +25,7 @@ class GameLayout extends StatelessWidget {
const SizedBox(height: 8), const SizedBox(height: 8),
const GameBoardWidget(), const GameBoardWidget(),
const SizedBox(height: 8), const SizedBox(height: 8),
const Expanded(child: SizedBox.shrink()), // const Expanded(child: SizedBox.shrink()),
currentGame.isFinished ? const GameEndWidget() : const SizedBox.shrink(), currentGame.isFinished ? const GameEndWidget() : const SizedBox.shrink(),
], ],
), ),
......
...@@ -18,19 +18,31 @@ class GameBoardWidget extends StatelessWidget { ...@@ -18,19 +18,31 @@ class GameBoardWidget extends StatelessWidget {
final Game currentGame = gameState.currentGame; final Game currentGame = gameState.currentGame;
final Color borderColor = Theme.of(context).colorScheme.onSurface; final Color borderColor = Theme.of(context).colorScheme.onSurface;
var screenSize = MediaQuery.of(context).size;
const totalMargins = 9 * 4;
final availableHeight = screenSize.height - totalMargins;
final double houseHeight = availableHeight / 10;
final double houseWidth = houseHeight;
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
currentGame.isFinished currentGame.isFinished
? const SizedBox.shrink() ? const SizedBox.shrink()
: const GamePlayerWidget(playerIndex: 0), : SizedBox(
width: houseWidth,
height: houseHeight,
child: const GamePlayerWidget(playerIndex: 0),
),
Container( Container(
margin: const EdgeInsets.all(2), margin: const EdgeInsets.all(2),
padding: const EdgeInsets.all(2), padding: const EdgeInsets.all(2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: borderColor, color: borderColor,
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(40),
border: Border.all( border: Border.all(
color: borderColor, color: borderColor,
width: 6, width: 6,
...@@ -40,43 +52,103 @@ class GameBoardWidget extends StatelessWidget { ...@@ -40,43 +52,103 @@ class GameBoardWidget extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const GameScoreWidget(playerIndex: 0), SizedBox(
width: 2 * houseWidth,
height: houseHeight,
child: const GameScoreWidget(playerIndex: 1),
),
Table( Table(
defaultColumnWidth: const IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: const [ children: [
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 0), SizedBox(
GameHouseWidget(cellIndex: 11), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 0),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 11),
),
]), ]),
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 1), SizedBox(
GameHouseWidget(cellIndex: 10), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 1),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 10),
),
]), ]),
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 2), SizedBox(
GameHouseWidget(cellIndex: 9), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 2),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 9),
),
]), ]),
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 3), SizedBox(
GameHouseWidget(cellIndex: 8), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 3),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 8),
),
]), ]),
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 4), SizedBox(
GameHouseWidget(cellIndex: 7), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 4),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 7),
),
]), ]),
TableRow(children: [ TableRow(children: [
GameHouseWidget(cellIndex: 5), SizedBox(
GameHouseWidget(cellIndex: 6), width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 5),
),
SizedBox(
width: houseWidth,
height: houseHeight,
child: const GameHouseWidget(cellIndex: 6),
),
]), ]),
], ],
), ),
const GameScoreWidget(playerIndex: 1) SizedBox(
width: 2 * houseWidth,
height: houseHeight,
child: const GameScoreWidget(playerIndex: 0),
),
], ],
), ),
), ),
currentGame.isFinished currentGame.isFinished
? const SizedBox.shrink() ? const SizedBox.shrink()
: const GamePlayerWidget(playerIndex: 1), : SizedBox(
width: houseWidth,
height: houseHeight,
child: const GamePlayerWidget(playerIndex: 1),
),
], ],
); );
}, },
......
...@@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; ...@@ -3,6 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:awale/cubit/game_cubit.dart'; import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart'; import 'package:awale/models/game/game.dart';
import 'package:awale/ui/widgets/game/game_seeds.dart';
import 'package:awale/utils/color_extensions.dart';
class GameHouseWidget extends StatelessWidget { class GameHouseWidget extends StatelessWidget {
const GameHouseWidget({ const GameHouseWidget({
...@@ -37,22 +39,14 @@ class GameHouseWidget extends StatelessWidget { ...@@ -37,22 +39,14 @@ class GameHouseWidget extends StatelessWidget {
padding: const EdgeInsets.all(2), padding: const EdgeInsets.all(2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: baseColor, color: baseColor,
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(100),
border: Border.all( border: Border.all(
color: baseColor, color: baseColor.darken(),
width: 2, width: 4,
),
),
width: 50,
child: Text(
seedsCount == 0 ? '' : seedsCount.toString(),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
), ),
), ),
width: 60,
child: GameSeedsWidget(seedsCount: seedsCount),
), ),
), ),
); );
......
import 'package:awale/utils/color_extensions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:awale/cubit/game_cubit.dart'; import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart'; import 'package:awale/models/game/game.dart';
import 'package:awale/ui/widgets/game/game_seeds.dart';
class GamePlayerWidget extends StatelessWidget { class GamePlayerWidget extends StatelessWidget {
const GamePlayerWidget({ const GamePlayerWidget({
...@@ -29,23 +31,13 @@ class GamePlayerWidget extends StatelessWidget { ...@@ -29,23 +31,13 @@ class GamePlayerWidget extends StatelessWidget {
padding: const EdgeInsets.all(2), padding: const EdgeInsets.all(2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: baseColor, color: baseColor,
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(6),
border: Border.all( border: Border.all(
color: baseColor, color: baseColor.darken(),
width: 2, width: 6,
),
),
width: 100,
height: 100,
child: Text(
seedsCount == 0 ? '' : seedsCount.toString(),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 50,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
), ),
), ),
child: GameSeedsWidget(seedsCount: seedsCount),
); );
}, },
); );
......
import 'package:awale/utils/color_extensions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:awale/cubit/game_cubit.dart'; import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart'; import 'package:awale/models/game/game.dart';
import 'package:awale/ui/widgets/game/game_seeds.dart';
class GameScoreWidget extends StatelessWidget { class GameScoreWidget extends StatelessWidget {
const GameScoreWidget({ const GameScoreWidget({
...@@ -28,22 +30,14 @@ class GameScoreWidget extends StatelessWidget { ...@@ -28,22 +30,14 @@ class GameScoreWidget extends StatelessWidget {
padding: const EdgeInsets.all(2), padding: const EdgeInsets.all(2),
decoration: BoxDecoration( decoration: BoxDecoration(
color: baseColor, color: baseColor,
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(100),
border: Border.all( border: Border.all(
color: baseColor, color: baseColor.darken(),
width: 2, width: 4,
), ),
), ),
width: 100, width: 100,
child: Text( child: GameSeedsWidget(seedsCount: currentGame.scores[playerIndex]),
currentGame.scores[playerIndex].toString(),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 50,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
); );
}, },
); );
......
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:awale/cubit/game_cubit.dart';
import 'package:awale/models/game/game.dart';
class GameSeedsWidget extends StatelessWidget {
const GameSeedsWidget({
super.key,
required this.seedsCount,
});
final int seedsCount;
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
final String skin = currentGame.globalSettings.skin;
const ratioScale = 0.2;
const ratioTranslate = 0.65;
const List<List<double>> layout = [
[0, 0], // 1
[10, -17], // 2
[20, 0], // 3
[10, 17], // 4
[-10, 17], // 5
[-20, 0], // 6
[-10, -17], // 7
[0, -34], // 8
[21, -34], // 9
[30, -16], // 10
[40, 0], // 11
[30, -18], // 12
[20, 35], // 13
[0, 35], // 14
[-20, 35], // 15
[-30, 18], // 16
[-38, 0], // 17
[-30, -16], // 18
[-20, -34], // 19
];
double minX = 0;
double maxX = 0;
double minY = 0;
double maxY = 0;
for (int i = 0; i < seedsCount; i++) {
final List<double> seedLocation = layout[i];
maxX = max(maxX, seedLocation[0]);
minX = min(minX, seedLocation[0]);
maxY = max(maxY, seedLocation[1]);
minY = min(minY, seedLocation[1]);
}
final double deltaX = minX + (maxX - minX) / 2;
final double deltaY = minY + (maxY - minY) / 2;
List<Widget> seeds = [];
for (int i = 0; i < seedsCount; i++) {
final List<double> seedLocation = layout[i];
seeds.add(
Transform.translate(
offset: Offset(
ratioTranslate * (seedLocation[0] - deltaX),
ratioTranslate * (seedLocation[1] - deltaY),
),
child: Transform.scale(
scale: ratioScale,
child: Image.asset('assets/skins/${skin}_seed.png'),
),
),
);
}
return Stack(
children: seeds,
);
},
);
}
}
...@@ -3,7 +3,7 @@ description: Awale game ...@@ -3,7 +3,7 @@ description: Awale game
publish_to: "none" publish_to: "none"
version: 0.0.6+6 version: 0.0.7+7
environment: environment:
sdk: "^3.0.0" sdk: "^3.0.0"
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
enable-background="new 0 0 100 100"
version="1.1"
viewBox="0 0 102 102"
xml:space="preserve"
id="svg1"
sodipodi:docname="seeds_layout.svg"
inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="4.1078432"
inkscape:cx="18.622912"
inkscape:cy="18.988067"
inkscape:window-width="1199"
inkscape:window-height="838"
inkscape:window-x="3531"
inkscape:window-y="68"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="path1"
cx="0.24011007"
cy="-0.2564899"
r="9.4961176"
transform="rotate(128.31689)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle12"
cx="-39.179901"
cy="-8.8366365"
r="9.4961176"
transform="rotate(-72.165849)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle13"
cx="-20.544954"
cy="27.919674"
r="9.4961176"
transform="rotate(-35.338291)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle14"
cx="19.937935"
cy="34.132896"
r="9.4961176"
transform="rotate(1.4893076)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle15"
cx="33.807491"
cy="-4.5862694"
r="9.4961176"
transform="rotate(38.316887)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle16"
cx="10.259504"
cy="-38.344585"
r="9.4961176"
transform="rotate(75.144506)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle17"
cx="-26.963198"
cy="-21.682329"
r="9.4961176"
transform="rotate(111.97209)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle18"
cx="-35.107906"
cy="18.365372"
r="9.4961176"
transform="rotate(148.79967)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle19"
cx="2.7728879"
cy="33.62381"
r="9.4961176"
transform="rotate(-174.37276)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle20"
cx="36.981033"
cy="11.651199"
r="9.4961176"
transform="rotate(-137.54517)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle21"
cx="21.71364"
cy="-26.034775"
r="9.4961176"
transform="rotate(-100.71757)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle22"
cx="-18.037323"
cy="-35.501793"
r="9.4961176"
transform="rotate(-63.890011)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle23"
cx="-34.741604"
cy="1.8949511"
r="9.4961176"
transform="rotate(-27.062431)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle24"
cx="-7.0690489"
cy="18.942566"
r="9.4961176"
transform="rotate(9.7651874)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle25"
cx="19.332306"
cy="4.9920368"
r="9.4961176"
transform="rotate(46.592737)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle26"
cx="2.5728326"
cy="-19.762348"
r="9.4961176"
transform="rotate(83.420366)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle27"
cx="-19.671154"
cy="-0.43411279"
r="9.4961176"
transform="rotate(120.24798)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle28"
cx="2.4148488"
cy="19.107695"
r="9.4961176"
transform="rotate(157.07556)" /><circle
style="fill:#43834c;stroke:#152818;stroke-width:0.897713;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="circle29"
cx="19.188715"
cy="-5.1802483"
r="9.4961176"
transform="rotate(-166.09691)" /><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-5.5879693"
y="-0.105837"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="-5.5879693"
y="-0.105837"
style="stroke-width:0.196623">1</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="13.903109"
y="-0.31237617"
id="text2"><tspan
sodipodi:role="line"
id="tspan2"
x="13.903109"
y="-0.31237617"
style="stroke-width:0.196623">3</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="4.2930083"
y="18.846392"
id="text3"><tspan
sodipodi:role="line"
id="tspan3"
x="4.2930083"
y="18.846392"
style="stroke-width:0.196623">4</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-14.656782"
y="18.846392"
id="text4"><tspan
sodipodi:role="line"
id="tspan4"
x="-14.656782"
y="18.846392"
style="stroke-width:0.196623">5</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-23.915712"
y="-0.93393528"
id="text5"><tspan
sodipodi:role="line"
id="tspan5"
x="-23.915712"
y="-0.93393528"
style="stroke-width:0.196623">6</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-13.795031"
y="-15.558908"
id="text6"><tspan
sodipodi:role="line"
id="tspan6"
x="-13.795031"
y="-15.558908"
style="stroke-width:0.196623">7</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="8.4240704"
y="-14.865454"
id="text7"><tspan
sodipodi:role="line"
id="tspan7"
x="8.4240704"
y="-14.865454"
style="stroke-width:0.196623">2</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="26.778719"
y="-16.190016"
id="text8"><tspan
sodipodi:role="line"
id="tspan8"
x="26.778719"
y="-16.190016"
style="stroke-width:0.196623">10</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="33.585457"
y="-0.28264824"
id="text9"><tspan
sodipodi:role="line"
id="tspan9"
x="33.585457"
y="-0.28264824"
style="stroke-width:0.196623">11</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="22.871408"
y="17.452448"
id="text10"><tspan
sodipodi:role="line"
id="tspan10"
x="22.871408"
y="17.452448"
style="stroke-width:0.196623">12</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="14.791765"
y="31.922098"
id="text11"><tspan
sodipodi:role="line"
id="tspan11"
x="14.791765"
y="31.922098"
style="stroke-width:0.196623">13</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-5.4304147"
y="33.756279"
id="text12"><tspan
sodipodi:role="line"
id="tspan12"
x="-5.4304147"
y="33.756279"
style="stroke-width:0.196623">14</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-25.521875"
y="33.744972"
id="text13"><tspan
sodipodi:role="line"
id="tspan13"
x="-25.521875"
y="33.744972"
style="stroke-width:0.196623">15</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-35.382278"
y="17.175936"
id="text14"><tspan
sodipodi:role="line"
id="tspan14"
x="-35.382278"
y="17.175936"
style="stroke-width:0.196623">16</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-42.581348"
y="1.4445361"
id="text15"><tspan
sodipodi:role="line"
id="tspan15"
x="-42.581348"
y="1.4445361"
style="stroke-width:0.196623">17</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-32.45631"
y="-16.667093"
id="text16"><tspan
sodipodi:role="line"
id="tspan16"
x="-32.45631"
y="-16.667093"
style="stroke-width:0.196623">18</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-22.339037"
y="-30.433443"
id="text17"><tspan
sodipodi:role="line"
id="tspan17"
x="-22.339037"
y="-30.433443"
style="stroke-width:0.196623">19</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="-2.6990914"
y="-31.878004"
id="text18"><tspan
sodipodi:role="line"
id="tspan18"
x="-2.6990914"
y="-31.878004"
style="stroke-width:0.196623">8</tspan></text><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.86491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.196623"
x="16.496477"
y="-31.550072"
id="text19"><tspan
sodipodi:role="line"
id="tspan19"
x="16.496477"
y="-31.550072"
style="stroke-width:0.196623">9</tspan></text></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><rect x="2.6304" y="2.6304" width="94.739" height="94.739" ry="20.054" fill="#c6bd7b" stroke="#505050" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.4632"/></svg>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment