// Reloads the level and reinitializes Mario to his default state.
        public void Reset()
        {
            Enemies.Clear();
            Blocks.Clear();
            Pipes.Clear();
            Coins.Clear();
            Checkpoints.Clear();
            Flagpoles.Clear();
            levelData.Clear();

            InvisibleBarrier = new InvisibleBarrier(Vector2.Zero);
            CoinRoomPosition = Vector2.Zero;

            DynamicObjects.Clear();
            StaticObjects.Clear();

            PowerUpState = false;

            Mario.Instance.ResetPlayer();

            SoundManager.Instance.gameOverPlayOnce = true;

            levelData = ParseLevelCSV(fileName);
            BuildLevel(levelData);
        }
Beispiel #2
0
        private void CreateCheckPoints()
        {
            Checkpoints.Clear();

            for (int i = 0; i < centerTrack.Lines.Count * 0.90f; i += 4)
            {
                Checkpoints.Add(new Boundary(outsideTrack.Lines[i].X, outsideTrack.Lines[i].Y, insideTrack.Lines[i].X, insideTrack.Lines[i].Y));
            }
        }
        public void Read(string path)
        {
            SaveEmpty = false;
            Checkpoints.Clear();
            EpisodePlayed.Clear();

            // read and decode Data
            byte[] file    = File.ReadAllBytes(path);
            byte[] decoded = DecodeEncode.Decode(file); // decoded is - dexored content only (since file starts with header)
            Raw = Encoding.UTF8.GetString(decoded);

            try
            {
                m_Data = Json.Decode(Raw);  //this is the save file, NOT initialdata
            }
            catch
            {
                SaveEmpty = true;
                return;
            }

            // add normal checkpoints
            foreach (var checkpoint in m_Data.checkpoints)
            {
                List <string> flags = new List <string>();
                var           vars  = ReadVarsForCheckpoint(checkpoint);
                foreach (var fl in checkpoint.flags)
                {
                    flags.Add(fl);
                }
                Checkpoints.Add(new Checkpoint(checkpoint, vars, flags));
            }

            // add currentcheckpoint (seems to be identical to latest checkpoint...)

            Dictionary <string, VariableState> variables;

            try
            {
                List <string> flags = new List <string>();
                foreach (var fl in m_Data.currentCheckpoint.stateCheckPoint.flags)
                {
                    flags.Add(fl);
                }
                variables = ReadVarsForCheckpoint(m_Data.currentCheckpoint.stateCheckPoint);
                Checkpoints.Add(new Checkpoint(m_Data.currentCheckpoint.stateCheckPoint, variables, flags));
            }
            catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
            {
                SaveEmpty = true;
                return;
            }

            // add global variables as a last checkpoint.. // hack...
            variables = ReadVarsForCheckpoint(m_Data);
            Checkpoints.Add(new Checkpoint(new { pointIdentifier = "Global Vars", currentObjective = "" }, variables));

            // fill episodeState (?)
            foreach (var episode in m_Data.episodes)
            {
                string name     = episode.name;
                string stateStr = episode.episodeState;
                bool   played   = false;
                if (stateStr == "kFinished" || stateStr == "kInProgress")
                {
                    played = true;
                }
                EpisodePlayed[name] = played;
            }
            if (File.Exists(Path.GetDirectoryName(path) + @"\Header.Save"))
            {
                ReadHeader(Path.GetDirectoryName(path) + @"\Header.Save");
            }
            else
            {
                m_Header = null;
            }
        }
Beispiel #4
0
        public void ReadSaveFromFile(string savePath)
        {
            SaveIsEmpty = false;
            Checkpoints.Clear();
            PlayedEpisodes.Clear();

            // Read and decode Data
            var fileContent = File.ReadAllBytes(savePath);

            try
            {
                Data    = JsonConverter.DecodeFileContentToJson(fileContent);
                RawSave = Data.ToString();
            }
            catch
            {
                SaveIsEmpty = true;
                return;
            }

            Dictionary <string, VariableState> variables;
            Dictionary <string, FloatState>    floats;

            // Add regular checkpoints
            foreach (var checkpoint in Data.checkpoints)
            {
                var cpFlags = new List <string>();
                variables = GetCheckpointVariables(checkpoint);
                floats    = GetCheckpointFloats(checkpoint);
                foreach (var flag in checkpoint.flags)
                {
                    cpFlags.Add(flag.Value);
                }
                Checkpoints.Add(new Checkpoint(checkpoint, variables, cpFlags, floats));
            }

            // Add currentcheckpoint (seems to be identical to latest checkpoint...)
            try
            {
                var currentCpFlags = new List <string>();
                foreach (var fl in Data.currentCheckpoint.stateCheckpoint.flags)
                {
                    currentCpFlags.Add(fl.Value);
                }
                variables = GetCheckpointVariables(Data.currentCheckpoint.stateCheckpoint);
                floats    = GetCheckpointFloats(Data.currentCheckpoint.stateCheckpoint);
                Checkpoints.Add(new Checkpoint(Data.currentCheckpoint.stateCheckpoint, variables, currentCpFlags, floats));
            }
            catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException)
            {
                SaveIsEmpty = true;
                return;
            }

            // Add global variables as a last checkpoint.. // hack...
            variables = GetCheckpointVariables(Data);
            floats    = GetCheckpointFloats(Data);
            Checkpoints.Add(new Checkpoint(new
            {
                pointIdentifier  = "Global Vars",
                currentObjective = Data.currentObjective
            }, variables, null, floats));

            // Fill episodeState (?)
            foreach (var episode in Data.episodes)
            {
                string episodeName  = episode.name;
                string episodeState = episode.episodeState;
                var    isPlayed     = episodeState == Consts.EpisodeStates.Finished ||
                                      episodeState == Consts.EpisodeStates.InProgress;
                PlayedEpisodes[episodeName] = isPlayed;
            }
            if (File.Exists(Path.GetDirectoryName(savePath) + @"\Header.Save"))
            {
                ReadHeaderFromFile(Path.GetDirectoryName(savePath) + @"\Header.Save");
            }
            else
            {
                Header = null;
            }
        }