/// <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; } } }
/// <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); }