コード例 #1
0
 public Level GetLevel(Level.LevelRef lr)
 {
     foreach (var level in GetLevels(lr.type))
     {
         if (level.solved.Equals(lr.cc))
         {
             return(level);
         }
     }
     return(null);
 }
コード例 #2
0
        public SolvedState GetLevelState(Level.LevelRef lref)
        {
            if (!LevelUnlocked(lref))
            {
                return(SolvedState.Locked);
            }
            var stats = GetLevelStats(lref);

            if (stats.NumPerfect == stats.Total)
            {
                return(SolvedState.Mastered);
            }
            else if (stats.NumUnsolved == 0)
            {
                return(SolvedState.Finished);
            }
            return(SolvedState.Unsolved);
        }
コード例 #3
0
        /// <summary>
        /// Loads all level classes from metadata file
        /// format
        /// type, image file, solved config, configs move level 1, configs move level 2, ... configs move level N
        /// </summary>
        /// <param name="metaText"></param>
        private void LoadLevelDefs(string metaText)
        {
            levels.Clear();

            var json = JSON.Parse(metaText);

            foreach (JSONClass typeData in json["types"].AsArray)
            {
                var type        = (Level.LevelType)Enum.Parse(typeof(Level.LevelType), typeData["type"]);
                var typeTexture = typeData["texture"];

                foreach (JSONClass levelData in typeData["levels"].AsArray)
                {
                    var textureFile = levelData["texture"] ?? typeTexture;
                    var pieces      = levelData["pieces"];
                    var indexesStr  = levelData["indexes"].AsArray;
                    var indexes     = new int[indexesStr.Count];
                    for (int cs = 0; cs < indexesStr.Count; cs++)
                    {
                        indexes[cs] = int.Parse(indexesStr[cs]);
                    }
                    var playIndex     = levelData["moves"].AsInt;
                    var starsRequired = levelData["starsRequired"].AsInt;

                    bool  forceLoadTree = levelData["forceLoadTree"] != null;
                    bool  tutorial      = levelData["tutorial"] != null;
                    Level level         = new Level(type, PuzzleState.FromString(pieces), textureFile, LEVELS_BASE_DIR + pieces, indexes, playIndex, starsRequired, tutorial, forceLoadTree);
                    if (tutorial)
                    {
                        tutorialLevelRef = level.Ref;
                    }
                    AddLevel(level);
                }
            }

            availableLevels = new List <Level>();
            foreach (var ll in levels.Values)
            {
                availableLevels.AddRange(ll);
            }
            availableLevels.Sort();
        }
コード例 #4
0
 public SolvedStats GetLevelStats(Level.LevelRef lref)
 {
     return(db.GetLevelStats(lref));
 }
コード例 #5
0
 public bool LevelUnlocked(Level.LevelRef lref)
 {
     return(GetLevel(lref).starsRequired <= stars);
 }
コード例 #6
0
 public bool LevelMastered(Level.LevelRef lref)
 {
     return(NumPuzzlesToMaster(lref) == 0);
 }
コード例 #7
0
 public bool LevelFinished(Level.LevelRef lref)
 {
     return(NumPuzzlesToFinish(lref) == 0);
 }
コード例 #8
0
 public int NumPuzzlesSolved(Level.LevelRef lref)
 {
     return(db.PuzzlesWithState(lref, SolvedStates));
 }
コード例 #9
0
 public int NumPuzzlesToFinish(Level.LevelRef lref)
 {
     return(db.PuzzlesWithState(lref, PuzzleSolvedState.Unsolved));
 }
コード例 #10
0
 public int NumPuzzlesToMaster(Level.LevelRef lref)
 {
     return(db.PuzzlesWithState(lref, NotPerfectStates));
 }