Esempio n. 1
0
        /// <summary>
        /// Nouveau jeu
        /// </summary>
        public static void NewGame()
        {
            State = new VO_GameState();

            //Triggers
            State.Triggers = new List <VO_Trigger>();
            foreach (VO_Trigger trigger in GameCore.Instance.Game.Triggers)
            {
                State.Triggers.Add(trigger);
            }

            //Variables
            State.Variables = new List <VO_Variable>();
            foreach (VO_Variable variable in GameCore.Instance.Game.Variables)
            {
                State.Variables.Add(variable);
            }

            //Character
            PlayableCharactersManager.ResetCharacters();
            State.Players          = new List <VO_GameStateCharacter>();
            State.CurrentCharacter = GameCore.Instance.Game.Project.StartingCharacter;
            PlayableCharactersManager.CurrentPlayerCharacter = PlayableCharactersManager.GetPlayer(State.CurrentCharacter);
            PlayableCharactersManager.CurrentPlayerCharacter.CurrentStage = PlayableCharactersManager.CurrentPlayerCharacter.PlayableCharacter.CoordsCharacter.Map;

            //Stages
            State.Stages = new List <VO_GameStateStage>();

            //Running Scripts
            State.RunningScripts = new List <VO_GameStateRunningScript>();
        }
Esempio n. 2
0
        /// <summary>
        /// Charge une sauvegarde
        /// </summary>
        /// <param name="path"></param>
        public static bool LoadGameState(string path)
        {
            if (!File.Exists(GameCore.Instance.Game.Project.RootPath + "\\" + path))
            {
                return(false);
            }

            #region Récupération du GameState
            //Récupération
            VO_GameState tempGameState = (VO_GameState)AppTools.LoadObjectFromFile(GameCore.Instance.Game.Project.RootPath + "\\" + path);

            //GameCore.Instance.Game.Project.RootPath = Path.GetDirectoryName(path) + "\\";
            GameCore.Instance.Game.Project.ProjectFileName = Path.GetFileNameWithoutExtension(path);
            #endregion

            //Nouveau du jeu
            NewGame();

            //Reset des managers
            ScriptManager.ResetScriptManager();
            PlayableCharactersManager.ResetCharacters();

            //Chargement
            //Boutons
            foreach (VO_Trigger trigger in State.Triggers)
            {
                VO_Trigger updateTrigger = tempGameState.Triggers.Find(p => p.Id == trigger.Id);
                trigger.Value = updateTrigger.Value;
            }

            //Variables
            foreach (VO_Variable variable in State.Variables)
            {
                VO_Variable updateVariable = tempGameState.Variables.Find(p => p.Id == variable.Id);
                variable.Value = updateVariable.Value;
            }

            //Perso courant
            State.CurrentCharacter = tempGameState.CurrentCharacter;

            //Persos
            foreach (VO_GameStateCharacter characterGame in tempGameState.Players)
            {
                PlayableCharactersManager.CreatePlayer(characterGame.CharacterId);
                VO_Player charSprite = PlayableCharactersManager.GetPlayer(characterGame.Id);
                charSprite.Actions.Clear();
                foreach (Guid action in characterGame.Actions)
                {
                    charSprite.Actions.Add(action);
                }
                foreach (Guid item in characterGame.Items)
                {
                    charSprite.AddItem(item);
                }
                charSprite.CurrentStage = characterGame.Coords.Map;
                charSprite.CharacterSprite.CurrentDirection = characterGame.CurrentDirection;
                charSprite.CharacterSprite.Id                   = characterGame.Id;
                charSprite.CharacterSprite.CharacterId          = characterGame.CharacterId;
                charSprite.CharacterSprite.CurrentExecutingPage = characterGame.CurrentExecutingPage;
                charSprite.CharacterSprite.IsTalking            = characterGame.IsTalking;
                charSprite.CharacterSprite.CurrentPath          = characterGame.CurrentPath;
                charSprite.CharacterSprite.SetCurrentAnimation(charSprite.CharacterSprite.CurrentCharacterAnimationType, characterGame.CurrentAnim);
            }
            PlayableCharactersManager.CurrentPlayerCharacter = PlayableCharactersManager.GetPlayer(State.CurrentCharacter);
            State.Players         = tempGameState.Players;
            State.Stages          = tempGameState.Stages;
            State.CurrentStagePNJ = tempGameState.CurrentStagePNJ;

            //RunningScript
            foreach (VO_GameStateRunningScript runningScriptState in tempGameState.RunningScripts)
            {
                VO_RunningScript runningScript = new VO_RunningScript();
                runningScript.Id          = runningScriptState.Script;
                runningScript.ObjectState = runningScriptState.ObjectState;
                runningScript.WaitFrames  = runningScriptState.WaitFrames;
                runningScript.Lines       = FindScript(runningScriptState.Script).Lines;
                runningScript.CurrentLine = FindLine(runningScript.Lines, runningScriptState.CurrentLine);
                if (runningScript.Lines != null)
                {
                    ScriptManager.AddParallelScript(runningScript);
                }
            }
            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// Sauvegarde une partie
        /// </summary>
        /// <param name="path"></param>
        public static void SaveGameState(string path)
        {
            //Enregistrement des personnages
            List <VO_Player> players = PlayableCharactersManager.GetPlayers();

            State.Players = new List <VO_GameStateCharacter>();
            foreach (VO_Player player in players)
            {
                VO_GameStateCharacter gameCharacter = new VO_GameStateCharacter();
                gameCharacter.Id                   = player.Id;
                gameCharacter.CharacterId          = player.CharacterSprite.CharacterId;
                gameCharacter.Coords               = new VO_Coords(new System.Drawing.Point(player.CharacterSprite.Location.X, player.CharacterSprite.Location.Y), player.CurrentStage);
                gameCharacter.CurrentAnim          = player.CharacterSprite.CurrentAnimationType;
                gameCharacter.CurrentDirection     = player.CharacterSprite.CurrentDirection;
                gameCharacter.Actions              = new List <Guid>();
                gameCharacter.Items                = new List <Guid>();
                gameCharacter.CurrentExecutingPage = player.CharacterSprite.CurrentExecutingPage;
                gameCharacter.IsTalking            = player.CharacterSprite.IsTalking;
                gameCharacter.CurrentPath          = player.CharacterSprite.CurrentPath;
                foreach (Guid action in player.Actions)
                {
                    gameCharacter.Actions.Add(action);
                }
                for (int i = 0; i < GameCore.Instance.Game.Menu.GridHeight; i++)
                {
                    for (int j = 0; j < GameCore.Instance.Game.Menu.GridWidth; j++)
                    {
                        if (player.Items[j, i] != Guid.Empty)
                        {
                            gameCharacter.Items.Add(player.Items[j, i]);
                        }
                    }
                }
                GameState.State.Players.Add(gameCharacter);
            }

            //Enregistrement de stages
            VO_Stage stage = GameCore.Instance.GetStageById(PlayableCharactersManager.CurrentPlayerCharacter.CurrentStage);

            State.CurrentStagePNJ = new List <VO_GameStateCharacter>();
            foreach (VO_StageCharacter character in stage.ListCharacters)
            {
                VO_CharacterSprite    characterSprite = _Service.GetCharacterSprite(character.Id);
                VO_GameStateCharacter gameCharacter   = new VO_GameStateCharacter();
                gameCharacter.Id                   = character.Id;
                gameCharacter.CharacterId          = character.CharacterId;
                gameCharacter.Coords               = new VO_Coords(new System.Drawing.Point(characterSprite.Location.X, character.Location.Y), Guid.Empty);
                gameCharacter.CurrentAnim          = characterSprite.CurrentAnimationType;
                gameCharacter.CurrentDirection     = characterSprite.CurrentDirection;
                gameCharacter.Actions              = new List <Guid>();
                gameCharacter.Items                = new List <Guid>();
                gameCharacter.CurrentExecutingPage = characterSprite.CurrentExecutingPage;
                gameCharacter.IsTalking            = characterSprite.IsTalking;
                gameCharacter.CurrentPath          = characterSprite.CurrentPath;
                GameState.State.CurrentStagePNJ.Add(gameCharacter);
            }

            //Enregistrement des Script courants
            if (ScriptManager.ParallelScripts != null)
            {
                foreach (VO_RunningScript runningScript in ScriptManager.ParallelScripts)
                {
                    VO_GameStateRunningScript runningScriptState = new VO_GameStateRunningScript();
                    runningScriptState.CurrentLine = runningScript.Id;
                    runningScriptState.ObjectState = runningScript.ObjectState;
                    runningScriptState.Script      = runningScript.Id;
                    runningScriptState.WaitFrames  = runningScript.WaitFrames;
                    State.RunningScripts.Add(runningScriptState);
                }
            }

            AppTools.SaveObjectToFile(GameState.State, GameCore.Instance.Game.Project.RootPath + "\\" + path);
        }