예제 #1
0
        /// <summary>
        /// Lance un script
        /// </summary>
        /// <param name="hotSpot"></param>
        /// <param name="script"></param>
        private void LaunchScript(VO_StageObject hotSpot, VO_Script script, Enums.TriggerEventConditionType type)
        {
            if (type == Enums.TriggerEventConditionType.ClickEvent && hotSpot.PlayerMustMove)
            {
                VO_RunningScript newScript = new VO_RunningScript();
                newScript.Id         = Guid.NewGuid();
                newScript.Lines      = new List <VO_Line>();
                newScript.ScriptType = Enums.ScriptType.Dynamic;
                VO_Script_MovePlayer moveScript = new VO_Script_MovePlayer();
                moveScript.Id     = Guid.NewGuid();
                moveScript.Coords = hotSpot.PlayerPositionPoint;
                newScript.Lines.Add(moveScript);
                VO_Script_ChangePlayerDirection playerDirection = new VO_Script_ChangePlayerDirection();
                playerDirection.Id        = Guid.NewGuid();
                playerDirection.Direction = hotSpot.PlayerMoveEndDirection;
                newScript.Lines.Add(playerDirection);
                VO_Script_CallScript callScript = new VO_Script_CallScript();
                callScript.Id     = Guid.NewGuid();
                callScript.Script = script;
                newScript.Lines.Add(callScript);
                ScriptManager.AddParallelScript(newScript);
            }
            else
            {
                VO_RunningScript runningScript = new VO_RunningScript();
                runningScript.Id    = script.Id;
                runningScript.Lines = script.Lines;
                switch (type)
                {
                case Enums.TriggerEventConditionType.Automatic:
                case Enums.TriggerEventConditionType.ClickEvent:
                case Enums.TriggerEventConditionType.ContactEvent:
                    if (ScriptManager.CurrentScript == null)
                    {
                        ScriptManager.CurrentScript = runningScript;
                    }
                    break;

                case Enums.TriggerEventConditionType.ParallelProcess:
                    ScriptManager.AddParallelScript(runningScript);
                    break;
                }
            }
        }
예제 #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);
        }