Skip to content
Snippets Groups Projects
Select Git revision
  • f05e8d781499450293eb6c9990f383eb7235068c
  • master default protected
  • 27-improve-app-metadata
  • 6-fix-display-grid
  • Release_1.9.1_39 protected
  • Release_1.9.0_38 protected
  • Release_1.8.2_37 protected
  • Release_1.8.1_36 protected
  • Release_1.8.0_35 protected
  • Release_1.7.0_34 protected
  • Release_1.6.0_33 protected
  • Release_1.5.0_32 protected
  • Release_1.4.3_31 protected
  • Release_1.4.2_30 protected
  • Release_1.4.1_29 protected
  • Release_1.4.0_28 protected
  • Release_1.3.1_27 protected
  • Release_1.3.0_26 protected
  • Release_1.2.1_25 protected
  • Release_1.2.0_24 protected
  • Release_1.1.0_23 protected
  • Release_1.0.21_22 protected
  • Release_1.0.20_21 protected
  • Release_1.0.19_20 protected
24 results

manifest.json

Blame
  • activity.dart 4.33 KiB
    import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
    
    import 'package:momomotus/config/default_activity_settings.dart';
    import 'package:momomotus/data/fetch_data_helper.dart';
    import 'package:momomotus/models/settings/settings_activity.dart';
    import 'package:momomotus/models/settings/settings_global.dart';
    
    class Activity {
      Activity({
        // Settings
        required this.activitySettings,
        required this.globalSettings,
    
        // State
        this.isRunning = false,
        this.isStarted = false,
        this.animationInProgress = false,
    
        // Base data
        required this.word,
        required this.dictionary,
    
        // Game data
        this.currentGuess = '',
        this.foundLetters = '',
        required this.guesses,
        this.foundWord = false,
      });
    
      // Settings
      final ActivitySettings activitySettings;
      final GlobalSettings globalSettings;
    
      // State
      bool isRunning;
      bool isStarted;
      bool animationInProgress;
    
      // Base data
      final String word;
      final List<String> dictionary;
    
      // Game data
      String currentGuess;
      String foundLetters;
      List<String> guesses;
      bool foundWord;
    
      factory Activity.createEmpty() {
        return Activity(
          // Settings
          activitySettings: ActivitySettings.createDefault(),
          globalSettings: GlobalSettings.createDefault(),
          // Base data
          word: '',
          dictionary: [],
          // Game data
          guesses: [],
        );
      }
    
      factory Activity.createNew({
        ActivitySettings? activitySettings,
        GlobalSettings? globalSettings,
      }) {
        final ActivitySettings newActivitySettings =
            activitySettings ?? ActivitySettings.createDefault();
        final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault();
    
        final String pickedWord = FetchDataHelper().getRandomWord(
          lang: newActivitySettings.lang,
          length: newActivitySettings.length,
          level: newActivitySettings.level,
        );
    
        final List<String> dictionary = FetchDataHelper().getDictionary(
          lang: newActivitySettings.lang,
          length: newActivitySettings.length,
        );
    
        // Starts with first letter revealed
        final String foundLetters = pickedWord.substring(0, 1).padRight(pickedWord.length, ' ');
    
        return Activity(
          // Settings
          activitySettings: newActivitySettings,
          globalSettings: newGlobalSettings,
          // State
          isRunning: true,
          // Base data
          word: pickedWord,
          dictionary: dictionary,
          // Game data
          foundLetters: foundLetters,
          guesses: [],
        );
      }
    
      bool get canBeResumed => isStarted && !isFinished;
      bool get gameWon => isRunning && isStarted && isFinished;
      bool get isFinished {
        if (foundWord || (guesses.length >= DefaultActivitySettings.maxGuessesCount)) {
          return true;
        }
    
        return false;
      }
    
      bool checkWordIsValid(String candidate) {
        final int length = int.parse(activitySettings.length);
    
        return (word.length == length) &&
            (candidate.length == length) &&
            dictionary.contains(candidate);
      }
    
      void dump() {
        printlog('');
        printlog('## Current game dump:');
        printlog('');
        printlog('$Activity:');
        printlog('  Settings');
        activitySettings.dump();
        globalSettings.dump();
        printlog('  State');
        printlog('    isRunning: $isRunning');
        printlog('    isStarted: $isStarted');
        printlog('    isFinished: $isFinished');
        printlog('    animationInProgress: $animationInProgress');
        printlog('  Base data');
        printlog('    word: $word');
        printlog('    dictionary: ${dictionary.length}');
        printlog('  Game data');
        printlog('    currentGuess: $currentGuess');
        printlog('    foundLetters: $foundLetters');
        printlog('    guesses: $guesses');
        printlog('    foundWord: $foundWord');
        printlog('');
      }
    
      @override
      String toString() {
        return '$Activity(${toJson()})';
      }
    
      Map<String, dynamic>? toJson() {
        return <String, dynamic>{
          // Settings
          'activitySettings': activitySettings.toJson(),
          'globalSettings': globalSettings.toJson(),
          // State
          'isRunning': isRunning,
          'isStarted': isStarted,
          'isFinished': isFinished,
          'animationInProgress': animationInProgress,
          // Base data
          'word': word,
          'dictionary': dictionary,
          // Game data
          'currentGuess': currentGuess,
          'foundLetters': foundLetters,
          'guesses': guesses,
          'foundWord': foundWord,
        };
      }
    }