Exemplo n.º 1
0
        /// <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]));
            }
        }
Exemplo n.º 2
0
        /// <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]));
                }
            }
        }
Exemplo n.º 3
0
 /// <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);
     }
 }
Exemplo n.º 4
0
        /// <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]));
                    }
                }
            }
        }
Exemplo n.º 5
0
        /// <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));
                }
            }
        }
Exemplo n.º 6
0
        /// <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]));
            }
        }
Exemplo n.º 7
0
        /// <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;
                }
            }
        }
Exemplo n.º 8
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;
                }
            }
        }
Exemplo n.º 9
0
        /// <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;
        }
Exemplo n.º 10
0
        /// <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;
            }
        }
Exemplo n.º 11
0
        /// <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;
            }
        }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
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);
        }
Exemplo n.º 14
0
        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();
            }
        }