Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 32-improve-app-metadata
  • master
  • Release_0.0.10_10
  • Release_0.0.11_11
  • Release_0.0.12_12
  • Release_0.0.13_13
  • Release_0.0.14_14
  • Release_0.0.15_15
  • Release_0.0.16_16
  • Release_0.0.17_17
  • Release_0.0.18_18
  • Release_0.0.19_19
  • Release_0.0.20_20
  • Release_0.0.21_21
  • Release_0.0.22_22
  • Release_0.0.23_23
  • Release_0.0.24_24
  • Release_0.0.25_25
  • Release_0.0.26_26
  • Release_0.0.2_2
  • Release_0.0.3_3
  • Release_0.0.4_4
  • Release_0.0.5_5
  • Release_0.0.6_6
  • Release_0.0.7_7
  • Release_0.0.8_8
  • Release_0.0.9_9
  • Release_0.1.0_27
  • Release_0.1.1_28
  • Release_0.1.2_29
  • Release_0.2.0_30
  • Release_0.2.1_31
  • Release_0.3.0_32
  • Release_0.3.1_33
  • Release_0.4.0_34
  • Release_0.4.1_35
  • Release_0.4.2_36
  • Release_0.5.0_37
  • Release_0.6.0_38
  • Release_0.7.0_39
  • Release_0.8.0_40
  • Release_0.8.1_41
  • Release_0.8.2_42
  • Release_0.9.0_43
  • Release_0.9.1_44
  • Release_0.9.2_45
46 results

Target

Select target project
No results found
Select Git revision
  • 32-improve-app-metadata
  • master
  • Release_0.0.10_10
  • Release_0.0.11_11
  • Release_0.0.12_12
  • Release_0.0.13_13
  • Release_0.0.14_14
  • Release_0.0.15_15
  • Release_0.0.16_16
  • Release_0.0.17_17
  • Release_0.0.18_18
  • Release_0.0.19_19
  • Release_0.0.20_20
  • Release_0.0.21_21
  • Release_0.0.22_22
  • Release_0.0.23_23
  • Release_0.0.24_24
  • Release_0.0.25_25
  • Release_0.0.26_26
  • Release_0.0.2_2
  • Release_0.0.3_3
  • Release_0.0.4_4
  • Release_0.0.5_5
  • Release_0.0.6_6
  • Release_0.0.7_7
  • Release_0.0.8_8
  • Release_0.0.9_9
  • Release_0.1.0_27
  • Release_0.1.1_28
  • Release_0.1.2_29
  • Release_0.2.0_30
  • Release_0.2.1_31
  • Release_0.3.0_32
  • Release_0.3.1_33
  • Release_0.4.0_34
  • Release_0.4.1_35
  • Release_0.4.2_36
  • Release_0.5.0_37
  • Release_0.6.0_38
  • Release_0.7.0_39
  • Release_0.8.0_40
  • Release_0.8.1_41
  • Release_0.8.2_42
  • Release_0.9.0_43
  • Release_0.9.1_44
  • Release_0.9.2_45
46 results
Show changes

Commits on Source 4

16 files
+ 1226
1037
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Original line Diff line number Diff line
org.gradle.jvmargs=-Xmx1536M
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.useAndroidX=true
android.enableJetifier=true
android.enableJetifier=true
app.versionName=0.0.22
app.versionName=0.0.24
app.versionCode=22
app.versionCode=24
Original line number Original line Diff line number Diff line
import 'package:sortgame/data/fetch_data_helper.dart';
import 'package:sortgame/utils/tools.dart';
import 'package:sortgame/utils/tools.dart';


class DefaultGameSettings {
class DefaultGameSettings {
  static const List<String> availableParameters = [
  static const List<String> availableParameters = [
    'itemsCount',
    'itemsCount',
    'theme',
  ];
  ];


  static const int itemsCountValueLow = 5;
  static const int itemsCountValueLow = 5;
@@ -18,12 +20,20 @@ class DefaultGameSettings {
    itemsCountValueVeryHigh,
    itemsCountValueVeryHigh,
  ];
  ];


  static const int defaultThemeValue = 0;

  static List<int> getAvailableValues(String parameterCode) {
  static List<int> getAvailableValues(String parameterCode) {
    switch (parameterCode) {
    switch (parameterCode) {
      case 'itemsCount':
      case 'itemsCount':
        return DefaultGameSettings.allowedItemsCountValues;
        return DefaultGameSettings.allowedItemsCountValues;
    }
    }


    switch (parameterCode) {
      case 'theme':
        final int count = FetchDataHelper().getThemes().length;
        return List<int>.generate(count, (i) => i);
    }

    printlog('Did not find any available value for game parameter "$parameterCode".');
    printlog('Did not find any available value for game parameter "$parameterCode".');
    return [];
    return [];
  }
  }
Original line number Original line Diff line number Diff line
@@ -12,11 +12,13 @@ class GameSettingsCubit extends HydratedCubit<GameSettingsState> {


  void setValues({
  void setValues({
    int? itemsCount,
    int? itemsCount,
    int? theme,
  }) {
  }) {
    emit(
    emit(
      GameSettingsState(
      GameSettingsState(
        settings: GameSettings(
        settings: GameSettings(
          itemsCount: itemsCount ?? state.settings.itemsCount,
          itemsCount: itemsCount ?? state.settings.itemsCount,
          theme: theme ?? state.settings.theme,
        ),
        ),
      ),
      ),
    );
    );
@@ -26,6 +28,8 @@ class GameSettingsCubit extends HydratedCubit<GameSettingsState> {
    switch (code) {
    switch (code) {
      case 'itemsCount':
      case 'itemsCount':
        return GameSettings.getItemsCountValueFromUnsafe(state.settings.itemsCount);
        return GameSettings.getItemsCountValueFromUnsafe(state.settings.itemsCount);
      case 'theme':
        return GameSettings.getThemeValueFromUnsafe(state.settings.theme);
    }
    }
    return 0;
    return 0;
  }
  }
@@ -35,19 +39,23 @@ class GameSettingsCubit extends HydratedCubit<GameSettingsState> {
    printlog('code: $code  / value: $value');
    printlog('code: $code  / value: $value');


    int itemsCount = code == 'itemsCount' ? value : getParameterValue('itemsCount');
    int itemsCount = code == 'itemsCount' ? value : getParameterValue('itemsCount');
    int theme = code == 'theme' ? value : getParameterValue('theme');


    setValues(
    setValues(
      itemsCount: itemsCount,
      itemsCount: itemsCount,
      theme: theme,
    );
    );
  }
  }


  @override
  @override
  GameSettingsState? fromJson(Map<String, dynamic> json) {
  GameSettingsState? fromJson(Map<String, dynamic> json) {
    int itemsCount = json['itemsCount'] as int;
    int itemsCount = json['itemsCount'] as int;
    int theme = json['theme'] as int;


    return GameSettingsState(
    return GameSettingsState(
      settings: GameSettings(
      settings: GameSettings(
        itemsCount: itemsCount,
        itemsCount: itemsCount,
        theme: theme,
      ),
      ),
    );
    );
  }
  }
@@ -56,6 +64,7 @@ class GameSettingsCubit extends HydratedCubit<GameSettingsState> {
  Map<String, dynamic>? toJson(GameSettingsState state) {
  Map<String, dynamic>? toJson(GameSettingsState state) {
    return <String, dynamic>{
    return <String, dynamic>{
      'itemsCount': state.settings.itemsCount,
      'itemsCount': state.settings.itemsCount,
      'theme': state.settings.theme,
    };
    };
  }
  }
}
}
Original line number Original line Diff line number Diff line
import 'package:sortgame/data/game_data.dart';
import 'package:sortgame/data/game_data.dart';
import 'package:sortgame/models/data/category.dart';
import 'package:sortgame/models/data/category.dart';
import 'package:sortgame/models/data/game_item.dart';
import 'package:sortgame/models/data/game_item.dart';
import 'package:sortgame/models/data/game_theme.dart';
import 'package:sortgame/models/data/item.dart';
import 'package:sortgame/models/data/item.dart';
import 'package:sortgame/models/settings_game.dart';
import 'package:sortgame/utils/tools.dart';
import 'package:sortgame/utils/tools.dart';


class FetchDataHelper {
class FetchDataHelper {
@@ -13,6 +15,9 @@ class FetchDataHelper {
  final List<Item> _items = [];
  final List<Item> _items = [];
  List<Item> get items => _items;
  List<Item> get items => _items;


  final List<GameTheme> _themes = [];
  List<GameTheme> get themes => _themes;

  final List<GameItem> _mapping = [];
  final List<GameItem> _mapping = [];


  void init() {
  void init() {
@@ -25,6 +30,16 @@ class FetchDataHelper {
        _categories.add(Category(key: element, text: element));
        _categories.add(Category(key: element, text: element));
      }
      }


      final Map<String, dynamic> rawThemes = gameData['themes'] as Map<String, dynamic>;
      rawThemes.forEach((code, rawCategories) {
        final List<Category> categories = [];
        for (var rawElement in rawCategories) {
          final element = rawElement.toString();
          categories.add(Category(key: element, text: element));
        }
        _themes.add(GameTheme(code: code, categories: categories));
      });

      final List<dynamic> rawItems = gameData['items'] as List<dynamic>;
      final List<dynamic> rawItems = gameData['items'] as List<dynamic>;
      for (var rawElement in rawItems) {
      for (var rawElement in rawItems) {
        final element = rawElement.toString();
        final element = rawElement.toString();
@@ -64,13 +79,27 @@ class FetchDataHelper {
    }
    }
  }
  }


  List<GameItem> getItems(int count) {
  List<GameItem> getItems(GameSettings gameSettings) {
    if (_mapping.isEmpty) {
    if (_mapping.isEmpty) {
      init();
      init();
    }
    }


    final int count = gameSettings.itemsCount;
    final int theme = gameSettings.theme;

    List<GameItem> items = _mapping;
    List<GameItem> items = _mapping;


    // Remove unwanted categories if theme is selected
    if (theme != 0) {
      final GameTheme gameTheme = _themes[theme];
      for (GameItem item in items) {
        item.isCategory.removeWhere((Category category) =>
            (!gameTheme.categories.map((c) => c.key).contains(category.key)));
        item.isNotCategory.removeWhere((Category category) =>
            (!gameTheme.categories.map((c) => c.key).contains(category.key)));
      }
    }

    // Remove items without enough data
    // Remove items without enough data
    items.removeWhere((GameItem gameItem) =>
    items.removeWhere((GameItem gameItem) =>
        (gameItem.isCategory.isEmpty || gameItem.isNotCategory.isEmpty));
        (gameItem.isCategory.isEmpty || gameItem.isNotCategory.isEmpty));
@@ -79,4 +108,20 @@ class FetchDataHelper {


    return items.take(count).toList();
    return items.take(count).toList();
  }
  }

  List<GameTheme> getThemes() {
    if (_themes.isEmpty) {
      init();
    }

    return _themes.toList();
  }

  GameTheme getTheme(int themeIndex) {
    if (_themes.isEmpty) {
      init();
    }

    return _themes[themeIndex];
  }
}
}
+23 −0
Original line number Original line Diff line number Diff line
import 'package:sortgame/models/data/category.dart';

class GameTheme {
  final String code;
  final List<Category> categories;

  GameTheme({
    required this.code,
    required this.categories,
  });

  @override
  String toString() {
    return '$GameTheme(${toJson()})';
  }

  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
      'code': code,
      'categories': categories.toString(),
    };
  }
}
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ class Game {
    GameSettings newGameSettings = gameSettings ?? GameSettings.createDefault();
    GameSettings newGameSettings = gameSettings ?? GameSettings.createDefault();
    GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();
    GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();


    List<GameItem> items = FetchDataHelper().getItems(newGameSettings.itemsCount);
    List<GameItem> items = FetchDataHelper().getItems(newGameSettings);


    return Game(
    return Game(
      items: items,
      items: items,
Original line number Original line Diff line number Diff line
@@ -3,9 +3,11 @@ import 'package:sortgame/utils/tools.dart';


class GameSettings {
class GameSettings {
  final int itemsCount;
  final int itemsCount;
  final int theme;


  GameSettings({
  GameSettings({
    required this.itemsCount,
    required this.itemsCount,
    required this.theme,
  });
  });


  static int getItemsCountValueFromUnsafe(int itemsCount) {
  static int getItemsCountValueFromUnsafe(int itemsCount) {
@@ -16,15 +18,25 @@ class GameSettings {
    return DefaultGameSettings.defaultItemsCountValue;
    return DefaultGameSettings.defaultItemsCountValue;
  }
  }


  static int getThemeValueFromUnsafe(int theme) {
    if (DefaultGameSettings.getAvailableValues('theme').contains(theme)) {
      return theme;
    }

    return DefaultGameSettings.defaultThemeValue;
  }

  factory GameSettings.createDefault() {
  factory GameSettings.createDefault() {
    return GameSettings(
    return GameSettings(
      itemsCount: DefaultGameSettings.defaultItemsCountValue,
      itemsCount: DefaultGameSettings.defaultItemsCountValue,
      theme: DefaultGameSettings.defaultThemeValue,
    );
    );
  }
  }


  void dump() {
  void dump() {
    printlog('Settings: ');
    printlog('Settings: ');
    printlog('  itemsCount: $itemsCount');
    printlog('  itemsCount: $itemsCount');
    printlog('  theme: $theme');
  }
  }


  @override
  @override
@@ -35,6 +47,7 @@ class GameSettings {
  Map<String, dynamic>? toJson() {
  Map<String, dynamic>? toJson() {
    return <String, dynamic>{
    return <String, dynamic>{
      'itemsCount': itemsCount,
      'itemsCount': itemsCount,
      'theme': theme,
    };
    };
  }
  }
}
}
Original line number Original line Diff line number Diff line
@@ -3,6 +3,8 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';


import 'package:sortgame/config/default_game_settings.dart';
import 'package:sortgame/config/default_game_settings.dart';
import 'package:sortgame/data/fetch_data_helper.dart';
import 'package:sortgame/models/data/game_theme.dart';
import 'package:sortgame/models/settings_game.dart';
import 'package:sortgame/models/settings_game.dart';
import 'package:sortgame/models/settings_global.dart';
import 'package:sortgame/models/settings_global.dart';
import 'package:sortgame/utils/tools.dart';
import 'package:sortgame/utils/tools.dart';
@@ -44,6 +46,9 @@ class ParameterPainter extends CustomPainter {
      case 'itemsCount':
      case 'itemsCount':
        paintItemsCountParameterItem(value, canvas, canvasSize);
        paintItemsCountParameterItem(value, canvas, canvasSize);
        break;
        break;
      case 'theme':
        paintThemeParameterItem(value, canvas, canvasSize);
        break;
      default:
      default:
        printlog('Unknown parameter: $code/$value');
        printlog('Unknown parameter: $code/$value');
        paintUnknownParameterItem(value, canvas, canvasSize);
        paintUnknownParameterItem(value, canvas, canvasSize);
@@ -146,4 +151,46 @@ class ParameterPainter extends CustomPainter {
      ),
      ),
    );
    );
  }
  }

  void paintThemeParameterItem(
    final int value,
    final Canvas canvas,
    final double size,
  ) {
    final GameTheme theme = FetchDataHelper().getTheme(value);

    final Color backgroundColor =
        Color((theme.code.hashCode * 0xFFFFFF).toInt()).withOpacity(1.0);

    final paint = Paint();
    paint.strokeJoin = StrokeJoin.round;
    paint.strokeWidth = 3 / 100 * size;

    // Colored background
    paint.color = backgroundColor;
    paint.style = PaintingStyle.fill;
    canvas.drawRect(Rect.fromPoints(const Offset(0, 0), Offset(size, size)), paint);

    // centered text value
    final textSpan = TextSpan(
      text: theme.code,
      style: TextStyle(
        color: Colors.black,
        fontSize: size / 4,
        fontWeight: FontWeight.bold,
      ),
    );
    final textPainter = TextPainter(
      text: textSpan,
      textDirection: TextDirection.ltr,
    );
    textPainter.layout();
    textPainter.paint(
      canvas,
      Offset(
        (size - textPainter.width) * 0.5,
        (size - textPainter.height) * 0.5,
      ),
    );
  }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -3,7 +3,7 @@ description: A sorting game application.


publish_to: 'none'
publish_to: 'none'


version: 0.0.22+22
version: 0.0.24+24


environment:
environment:
  sdk: '^3.0.0'
  sdk: '^3.0.0'
+528 −511

File changed.

Preview size limit exceeded, changes collapsed.

Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ function find_missing_associations(array $mappingItems, array $categories, array
            $mappingItems[$item]['na'],
            $mappingItems[$item]['na'],
        );
        );
        foreach ($categories as $category) {
        foreach ($categories as $category) {
            if ($category === 'inerte' && !\in_array($category, $set)) {
            if (!\in_array($category, $set)) {
                $missing[] = [
                $missing[] = [
                    'item' => $item,
                    'item' => $item,
                    'category' => $category,
                    'category' => $category,
@@ -106,8 +106,8 @@ if (!is_writable($jsonDataFile)) {
    die;
    die;
}
}


$categories = (\array_key_exists('categories', $data) && \is_array($data['categories'])) ? $data['categories'] : [];;
$categories = (\array_key_exists('categories', $data) && \is_array($data['categories'])) ? $data['categories'] : [];
$items = (\array_key_exists('items', $data) && \is_array($data['items'])) ? $data['items'] : [];;
$items = (\array_key_exists('items', $data) && \is_array($data['items'])) ? $data['items'] : [];


// Manage categories exclusions
// Manage categories exclusions
$exclusions = (\array_key_exists('exclusions', $data) && \is_array($data['exclusions'])) ? $data['exclusions'] : [];
$exclusions = (\array_key_exists('exclusions', $data) && \is_array($data['exclusions'])) ? $data['exclusions'] : [];
@@ -121,14 +121,18 @@ foreach ($exclusions as $exclusionSet) {
$categories = array_clean($categories);
$categories = array_clean($categories);
$items = array_clean($items);
$items = array_clean($items);


$themes = (\array_key_exists('themes', $data) && \is_array($data['themes'])) ? $data['themes'] : [];

$data['categories'] = $categories;
$data['categories'] = $categories;
$data['items'] = $items;
$data['items'] = $items;
$data['exclusions'] = $exclusions;
$data['exclusions'] = $exclusions;
$data['themes'] = $themes;


dump('');
dump('');
dump('Found ' . \count($categories) . ' unique categories.');
dump('Found ' . \count($categories) . ' unique categories.');
dump('Found ' . \count($items) . ' unique items.');
dump('Found ' . \count($items) . ' unique items.');
dump('Found ' . \count($exclusions) . ' exclusions sets.');
dump('Found ' . \count($exclusions) . ' exclusions sets.');
dump('Found ' . \count($themes) . ' themes.');


// Get/init mapping data
// Get/init mapping data
$mapping = (\array_key_exists('mapping', $data) && \is_array($data['mapping'])) ? $data['mapping'] : [];
$mapping = (\array_key_exists('mapping', $data) && \is_array($data['mapping'])) ? $data['mapping'] : [];
@@ -174,6 +178,13 @@ function showExclusions($exclusions)
    }
    }
}
}


function showThemes($theme)
{
    foreach ($theme as $name => $categories) {
        dump($name . ': ' . \join(', ', $categories));
    }
}

function showMappings($mappingItems)
function showMappings($mappingItems)
{
{
    $columnsWidths = [
    $columnsWidths = [
@@ -337,14 +348,15 @@ while ($exitMainLoop === false) {
    $missing = find_missing_associations($mappingItems, $categories, $items);
    $missing = find_missing_associations($mappingItems, $categories, $items);


    $menu = [
    $menu = [
        '0: exit',
        '0: save and exit',
        '',
        '',
        '1: show categories (' . \count($categories) . ' found)',
        '1: show categories (' . \count($categories) . ' found)',
        '2: show items (' . \count($items) . ' found)',
        '2: show items (' . \count($items) . ' found)',
        '3: show exclusions (' . \count($exclusions) . ' found)',
        '3: show exclusions (' . \count($exclusions) . ' found)',
        '4: show mappings (' . \count($mappingItems) . ' found)',
        '4: show themes (' . \count($themes) . ' found)',
        '5: show mappings (' . \count($mappingItems) . ' found)',
        '',
        '',
        '5: complete mappings (' . \count($missing) . ' missing)',
        '6: complete mappings (' . \count($missing) . ' missing)',
    ];
    ];
    $answer = ask(\join("\n", $menu));
    $answer = ask(\join("\n", $menu));


@@ -362,9 +374,12 @@ while ($exitMainLoop === false) {
            showExclusions($exclusions);
            showExclusions($exclusions);
            break;
            break;
        case '4':
        case '4':
            showMappings($mappingItems);
            showThemes($themes);
            break;
            break;
        case '5':
        case '5':
            showMappings($mappingItems);
            break;
        case '6':
            $data['mapping']['items'] = editMappings($mappingItems, $categories, $items, $exclusions);
            $data['mapping']['items'] = editMappings($mappingItems, $categories, $items, $exclusions);
            break;
            break;
        default:
        default: