Exemple #1
0
        private MultiScript CreateMultiScript(params string[] lines)
        {
            // Creates a new MultiScript with mock IScripts, with .Line returning each
            // line passed in as a parameter.

            List<IScript> source = new List<IScript>();
            foreach (string line in lines)
            {
                var script = new Mock<IScript>();
                script.Setup(s => s.Line).Returns(line);
                source.Add(script.Object);
            }

            MultiScript result = new MultiScript(source.ToArray());
            result.UndoLog = m_worldModel.UndoLogger;

            return result;
        }
Exemple #2
0
        public IScript CreateScript(string line, Element proc)
        {
            string remainingScript;
            IScript newScript;
            MultiScript result = new MultiScript();
            bool finished = false;
            IScript lastIf = null;
            bool dontAdd;
            bool addedError;
            IfScriptConstructor ifConstructor = null;

            line = Utility.RemoveSurroundingBraces(line);

            while (!finished)
            {
                line = Utility.GetScript(line, out remainingScript);
                if (line != null)
                {
                    line = line.Trim();
                    line = Utility.RemoveComments(line);
                }

                if (!string.IsNullOrEmpty(line))
                {
                    newScript = null;
                    dontAdd = false;
                    addedError = false;

                    if (lastIf != null && line.StartsWith("else"))
                    {
                        if (line.StartsWith("else if"))
                        {
                            ifConstructor.AddElseIf(lastIf, line, proc);
                        }
                        else
                        {
                            ifConstructor.AddElse(lastIf, line, proc);
                        }
                        dontAdd = true;
                    }
                    else
                    {
                        lastIf = null;
                        IScriptConstructor constructor = GetScriptConstructor(line);

                        if (constructor != null)
                        {
                            try
                            {
                                newScript = constructor.Create(line, proc);
                                if (constructor.Keyword == "if")
                                {
                                    ifConstructor = (IfScriptConstructor)constructor;
                                    lastIf = newScript;
                                }
                            }
                            catch (Ciloci.Flee.ExpressionCompileException ex)
                            {
                                AddError(string.Format("Error compiling expression in '{0}': {1}", line, ex.Message));
                                addedError = true;
                            }
                            catch (Exception ex)
                            {
                                AddError(string.Format("Error adding script '{0}': {1}", line, ex.Message));
                                addedError = true;
                            }
                        }

                        if (newScript == null)
                        {
                            // See if the script is like "myvar = 2". newScript will be null otherwise.
                            newScript = m_setConstructor.Create(line, proc);
                        }

                        if (newScript == null)
                        {
                            // See if the script calls a procedure defined by the game
                            newScript = m_procConstructor.Create(line, proc);
                        }
                    }

                    if (!dontAdd)
                    {
                        if (newScript == null)
                        {
                            if (!addedError) AddError(string.Format("Unrecognised script command '{0}'", line));
                        }
                        else
                        {
                            newScript.Line = line;
                            result.Add(newScript);
                        }
                    }
                }

                line = remainingScript;
                if (string.IsNullOrEmpty(line)) finished = true;
            }

            return result;
        }
Exemple #3
0
 private string GetLinesString(MultiScript multiScript)
 {
     return string.Join(";", multiScript.Scripts.Select(s => s.Line));
 }
Exemple #4
0
 public void AddElseIf()
 {
     IScript newScript = new MultiScript();
     IfScript.ElseIfScript newElseIf = m_ifScript.AddElseIf(string.Empty, newScript);
 }
Exemple #5
0
 public void AddElse()
 {
     IScript newScript = new MultiScript();
     m_ifScript.SetElse(newScript);
 }
Exemple #6
0
 public UndoMultiScriptAddRemove(MultiScript appliesTo, IScript script, bool isAdd, int? index)
 {
     m_appliesTo = appliesTo;
     m_script = script;
     m_isAdd = isAdd;
     m_index = index;
 }
Exemple #7
0
 protected override ScriptBase CloneScript()
 {
     MultiScript clone = new MultiScript();
     clone.m_scripts = new List<IScript>();
     foreach (IScript script in m_scripts)
     {
         IScript clonedScript = (IScript)script.Clone();
         clonedScript.Parent = clone;
         clone.m_scripts.Add(clonedScript);
     }
     return clone;
 }
Exemple #8
0
 private void InitialiseMultiScript(MultiScript script)
 {
     System.Diagnostics.Debug.Assert(m_underlyingScript == null);
     m_underlyingScript = script;
     m_underlyingScript.ScriptUpdated += multiScript_ScriptUpdated;
     m_underlyingScript.UndoLog = m_controller.WorldModel.UndoLogger;
 }