/// <summary> /// Commande ChangePlayer /// </summary> /// <param name="command"></param> private static void CommandChangePlayer(string[] command) { if (command.Length != 2) { AddConsoleLine(string.Format("{0}: command format is incorrect", ConsoleConstants.C_CHANGEPLAYER)); return; } VO_Character character = GameCore.Instance.Game.Characters.Find(p => p.Title.ToLower() == command[1]); if (character != null) { VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_ChangeCurrentCharacter characterScript = new VO_Script_ChangeCurrentCharacter(); characterScript.Character = character.Id; characterScript.UseOldCoords = true; runningScript.Lines.Add(characterScript); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } else { AddConsoleLine(string.Format("{0}: character {1} not found", ConsoleConstants.C_CHANGEPLAYER, command[1])); } }
/// <summary> /// Commande CharSay /// </summary> /// <param name="command"></param> private static void CommandCharSay(string[] command) { if (ScriptManager.CurrentScript == null) { string message = string.Join(" ", command, 3, command.Length - 3); string characterName = command[1]; VO_Stage currentStage = _Service.GetCurrentStage(); VO_StageCharacter character = currentStage.ListCharacters.Find(p => p.Title.ToLower() == characterName); if (character != null) { VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_Message messageScript = new VO_Script_Message(); messageScript.Dialog = new VO_Dialog(); messageScript.Dialog.Messages = new List <VO_Message>(); messageScript.Dialog.Messages.Add(new VO_Message() { Character = character.Id, Duration = message.Length, FontSize = 14, Text = message }); runningScript.Lines.Add(messageScript); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } else { AddConsoleLine(string.Format("{0}: {1} not found", ConsoleConstants.C_SAY, command[1])); } } }
/// <summary> /// Rafraichi les choices /// </summary> /// <param name="script"></param> private void RefreshChoiceMessage(VO_RunningScript script, GameTime gametime) { if (script != null && script.CurrentLine != null && script.CurrentLine is VO_Script_ChoiceMessage) { ScriptManager.CurrentChoice.Draw(gametime); } }
/// <summary> /// Commande CharSay /// </summary> /// <param name="command"></param> private static void CommandCharMove(string[] command) { if (ScriptManager.CurrentScript == null) { if (command.Length != 5) { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); } else { int x = 0; int y = 0; try { x = Convert.ToInt32(command[3]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); return; } try { y = Convert.ToInt32(command[4]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); return; } string characterName = command[1]; VO_Stage currentStage = _Service.GetCurrentStage(); VO_StageCharacter character = currentStage.ListCharacters.Find(p => p.Title.ToLower() == characterName); if (character != null) { VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_MoveCharacter moveCharacter = new VO_Script_MoveCharacter(); moveCharacter.Character = character.Id; moveCharacter.Coords = new VO_Coords(new System.Drawing.Point(x, y), _Service.GetCurrentStage().Id); runningScript.Lines.Add(moveCharacter); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } else { AddConsoleLine(string.Format("{0}: {1} not found", ConsoleConstants.C_MOVE, command[1])); } } } }
/// <summary> /// Rafraichi les messages /// </summary> private void RefreshMessage(VO_RunningScript script) { if (script != null && script.CurrentLine != null && script.CurrentLine is VO_Script_Message) { VO_Dialog dialog = ((VO_Script_Message)script.CurrentLine).Dialog; VO_Message message = dialog.Messages[script.ObjectState - 1]; Draw(_Service.FormatText(message, new VO_Size(_ProjectData.Resolution.Width, _ProjectData.Resolution.Height), new Point((int)Camera2D.Pos.X, (int)Camera2D.Pos.Y))); //Dessiner les faces if (dialog.UseFaces) { Draw(_Service.GetAnimatedFaces(dialog)); } } }
/// <summary> /// Commande Teleport /// </summary> /// <param name="command"></param> private static void CommandTeleport(string[] command) { if (command.Length != 4) { AddConsoleLine(string.Format("{0}: command format is incorrect", ConsoleConstants.C_TELEPORT)); return; } VO_Stage stage = GameCore.Instance.Game.Stages.Find(p => p.Title.ToLower() == command[1]); if (stage != null) { int x = 0; int y = 0; try { x = Convert.ToInt32(command[2]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_TELEPORT)); return; } try { y = Convert.ToInt32(command[3]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_TELEPORT)); return; } VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_Teleport teleportScript = new VO_Script_Teleport(); teleportScript.Coords = new VO_Coords(new System.Drawing.Point(x, y), stage.Id); runningScript.Lines.Add(teleportScript); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } else { AddConsoleLine(string.Format("{0}: stage {1} not found", ConsoleConstants.C_TELEPORT, command[1])); } }
/// <summary> /// Commande Move /// </summary> /// <param name="command"></param> private static void CommandMove(string[] command) { if (ScriptManager.CurrentScript == null) { if (command.Length != 3) { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); } else { int x = 0; int y = 0; try { x = Convert.ToInt32(command[1]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); return; } try { y = Convert.ToInt32(command[2]); } catch { AddConsoleLine(string.Format("{0}: coords format is incorrect", ConsoleConstants.C_MOVE)); return; } VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_MovePlayer movePlayer = new VO_Script_MovePlayer(); movePlayer.CanBeInterrupted = true; movePlayer.Coords = new VO_Coords(new System.Drawing.Point(x, y), _Service.GetCurrentStage().Id); runningScript.Lines.Add(movePlayer); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } } }
/// <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> /// Lance le script de démarrage et crée la save de stage si non existente /// </summary> public void LaunchEndingScript() { VO_GameStateStage stage = GameState.State.Stages.Find(p => p.StageId == CurrentStageGuid); if (stage == null) { //On crée le stage dans l'instance de jeu stage = new VO_GameStateStage(); stage.StageId = CurrentStageGuid; GameState.State.Stages.Add(stage); } if (!stage.EndScriptDone) { //Première fois if (_Stage.EndingFirstScript.Lines.Count > 0) { VO_RunningScript endFirstScript = new VO_RunningScript(); endFirstScript.Id = _Stage.EndingFirstScript.Id; endFirstScript.Lines = _Stage.EndingFirstScript.Lines; ScriptManager.CurrentScript = endFirstScript; } else { ScriptManager.CurrentScript = null; } stage.StartScriptDone = true; } else if (_Stage.EndingScript.Lines.Count > 0) { //Fois suivantes VO_RunningScript script = new VO_RunningScript(); script.Id = _Stage.EndingScript.Id; script.Lines = _Stage.EndingScript.Lines; ScriptManager.CurrentScript = script; } else { ScriptManager.CurrentScript = null; } _LaunchedEndingScripts = true; }
/// <summary> /// Commande Say /// </summary> /// <param name="command"></param> private static void CommandSay(string[] command) { if (ScriptManager.CurrentScript == null) { string message = string.Join(" ", command, 1, command.Length - 1); VO_RunningScript runningScript = new VO_RunningScript(); runningScript.ScriptType = Enums.ScriptType.Events; runningScript.Lines = new List <VO_Line>(); VO_Script_Message messageScript = new VO_Script_Message(); messageScript.Dialog = new VO_Dialog(); messageScript.Dialog.Messages = new List <VO_Message>(); messageScript.Dialog.Messages.Add(new VO_Message() { Character = new Guid(GlobalConstants.CURRENT_PLAYER_ID), Duration = message.Length, FontSize = 14, Text = message }); runningScript.Lines.Add(messageScript); runningScript.CurrentLine = runningScript.Lines[0]; ScriptManager.CurrentScript = runningScript; } }
/// <summary> /// Lance le script de démarrage et crée la save de stage si non existente /// </summary> public void LaunchStartingScript() { if (IgnoreStartingScripts) { IgnoreStartingScripts = false; return; } VO_GameStateStage stage = GameState.State.Stages.Find(p => p.StageId == CurrentStageGuid); if (stage == null) { //On crée le stage dans l'instance de jeu stage = new VO_GameStateStage(); stage.StageId = CurrentStageGuid; GameState.State.Stages.Add(stage); } if (!stage.StartScriptDone) { //Première fois if (_Stage.StartingFirstScript.Lines.Count > 0) { VO_RunningScript firstScript = new VO_RunningScript(); firstScript.Id = _Stage.StartingFirstScript.Id; firstScript.Lines = _Stage.StartingFirstScript.Lines; ScriptManager.CurrentScript = firstScript; } stage.StartScriptDone = true; } else if (_Stage.StartingScript.Lines.Count > 0) { //Fois suivantes VO_RunningScript script = new VO_RunningScript(); script.Id = _Stage.StartingScript.Id; script.Lines = _Stage.StartingScript.Lines; ScriptManager.CurrentScript = script; } }
public override void DrawScene(GameTime gameTime) { #region Debug DebugConsole.Update(); #endregion #region Scripts if (!_Interface.IsInterfaceBlocking()) { _Service.CheckParallelProcessAndAutomaticAndContactScripts(_ProjectData.Resolution.MatrixPrecision); ScriptManager.RunParallelScripts(); ScriptManager.RunScript(ScriptManager.CurrentScript, false); } if (ScriptManager.GoToScreen != null && !_LaunchedEndingScripts) { LaunchEndingScript(); } if (ScriptManager.GameOver) { VO_RunningScript runningScript = new VO_RunningScript(); runningScript.Id = _ProjectData.GameOver.Id; runningScript.Lines = _ProjectData.GameOver.Lines; ScriptManager.CurrentScript = runningScript; ScriptManager.GameOver = false; } #endregion _SpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, Camera2D.GetTransformation(this.GraphicsDevice)); #region Décors et objets derrière perso int i = 1; _Stage.ListCharacters.OrderBy(p => p.Location.Y); int playerLayerIndex = _Service.GetLayerIndexFromCharacterLocation(PlayableCharactersManager.CurrentPlayerCharacter.CharacterSprite.Location); foreach (VO_Layer layer in _Stage.ListLayers) { RefreshLayer(layer, layer.MainLayer, !_Interface.IsInterfaceBlocking()); RefreshCharacters(i, layer.MainLayer, playerLayerIndex, !_Interface.IsInterfaceBlocking()); i++; } #endregion _SpriteBatch.End(); _SpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); #region Interface if (ScriptManager.ScriptUserControls) { _Interface.Draw(gameTime, ScriptManager.BlockType); } #endregion #region Messages if (!_Interface.IsInterfaceBlocking()) { RefreshMessage(ScriptManager.CurrentScript); RefreshChoiceMessage(ScriptManager.CurrentScript, gameTime); if (ScriptManager.ParallelScripts != null) { foreach (VO_RunningScript script in ScriptManager.ParallelScripts) { RefreshMessage(script); } } } #endregion #region Debug DebugConsole.Draw(); #endregion _SpriteBatch.End(); }
/// <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); }
public void MousePress(MouseState e) { if (e.LeftButton == ButtonState.Pressed) { #region Quitter l'inventaire //Click en dehors de l'inventaire if (!_Service.MouseIsInGrid(new Point(e.X, e.Y), new Point(_MenuData.InventoryCoords.X, _MenuData.InventoryCoords.Y), _MenuData.GridWidth, _MenuData.GridHeight, _MenuData.ItemWidth, _MenuData.ItemHeight)) { Opened = false; return; } //Click sur le bouton de l'inventaire if (GetInventoryButtonEvent(new Point(e.X, e.Y))) { SwitchInventory(); } #endregion VO_InventoryItem item = GetInventoryItemEvent(new Point(e.X, e.Y)); if (ActionManager.ItemAsAction && item != null) { VO_InventoryItem item2 = _Service.GetItemFromGrid(ActionManager.CurrentLinkedItem.Id, _MenuData.GridWidth, _MenuData.GridHeight); if (item.ItemId != Guid.Empty && item2.ItemId != Guid.Empty && item2.ItemId != item.ItemId) { //Interaction d'objets VO_Item itemObj = GameCore.Instance.GetItemById(item.ItemId); VO_ItemInteraction itemInteraction = itemObj.ItemInteraction.Find(p => p.AssociatedItem == item2.ItemId); if (itemInteraction != null) { VO_Script scriptObj = GameCore.Instance.GetInteractionScriptsById(itemInteraction.Script); VO_RunningScript script = new VO_RunningScript(); script.Id = scriptObj.Id; script.Lines = scriptObj.Lines; ScriptManager.CurrentScript = script; } } else { _Service.SwitchItemPlaces(item, item2); _ItemDragDrop = null; ActionManager.UnloadItem(); } } else if (item != null && item.ItemId != Guid.Empty) { if (ActionManager.CurrentActionIsGo()) { _ItemDragDrop = item; ActionManager.SetCurrentItem(item.ItemId); } else { //Script sur action VO_Item itemObj = GameCore.Instance.GetItemById(item.ItemId); VO_ActionOnItemScript actionScript = itemObj.Scripts.Find(p => p.Id == ActionManager.CurrentAction.Id); if (actionScript != null) { VO_RunningScript script = new VO_RunningScript(); script.Id = actionScript.Script.Id; script.Lines = actionScript.Script.Lines; ScriptManager.CurrentScript = script; } } } } else if (e.RightButton == ButtonState.Pressed) { PlayableCharactersManager.CurrentPlayerCharacter.ChangeNextAction(); } }