Esempio n. 1
0
        public static void fillEvent(ArrayList fileContent, ref int startIndex, ref ArrayList conditions)
        {
            ArrayList events = new ArrayList();

            int endCount = 0;

            int maxEndCount = 0;

            int eCount = ((Condition)conditions[conditions.Count - 1]).events.Count;

            for (startIndex++; startIndex < fileContent.Count; startIndex++)
            {
                System.Windows.Forms.Application.DoEvents();

                string line = (string)fileContent[startIndex];

                line = common.COH_IO.removeExtraSpaceBetweenWords(line.Replace("\t", " ")).Trim();

                line = line.Replace("//", "#");

                if (line.Trim().Length < 1)
                {
                    continue;
                }

                bool isComment = line.StartsWith("#");

                //skip title lines that has multiple # Char
                if (isComment && line.Substring(1).Trim().StartsWith("#"))
                {
                    continue;
                }

                //haldle comment by stripping the first # char
                if (isComment)
                {
                    line = line.Substring(1).Trim();
                }

                //skip accidental commented event statement
                if (line.ToLower().StartsWith("Event".ToLower()))
                {
                    continue;
                }

                //trim the end comment
                if (line.Contains("#"))
                {
                    line = line.Substring(0, line.IndexOf('#')).Trim();
                }

                if (line.ToLower().StartsWith("Geom ".ToLower()))
                {
                    string geom = line.Substring("Geom ".Length).Trim();

                    if (isComment)
                    {
                        geom = "#" + geom;
                    }

                    ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eGeoms.Add(geom);
                }

                else if (line.ToLower().StartsWith("Part".ToLower()))
                {
                    string part = line.Substring("Part".Length);

                    part = part.Substring(part.IndexOf(" ") + 1);

                    if (isComment)
                    {
                        part = "#" + part;
                    }

                    ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eparts.Add(part);
                }

                else if (line.ToLower().StartsWith("Bhvr ".ToLower()))
                {
                    string bhvr = line.Substring("Bhvr ".Length).Trim();

                    if (isComment)
                    {
                        bhvr = "#" + bhvr;
                    }

                    //if tgaVal is not commented overwrite param value
                    if (!isComment)
                    {
                        //overwrite the first bhvr with the uncommented bhvr since events could only have one bhvr.
                        if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrs.Count > 0)
                        {
                            ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrs[0] = bhvr;
                        }
                        else
                        {
                            ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrs.Add(bhvr);
                        }
                    }
                    //to avoid overwriting a value line by a commented line
                    else if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrs.Count == 0)
                    {
                        ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrs.Add(bhvr);
                    }
                }

                else if (line.ToLower().StartsWith("Sound ".ToLower()))
                {
                    string sound = line.Substring("Sound ".Length).Trim();

                    if (isComment)
                    {
                        sound = "#" + sound;
                    }

                    ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eSounds.Add(sound);
                }

                else if (line.ToLower().StartsWith("BhvrOverride".ToLower()))
                {
                    FX_Parser.fillBhvrOverride(fileContent, ref startIndex, ref ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eBhvrOverrides);
                }

                else if (line.IndexOf(' ') > -1)
                {
                    string tagStr = fixEventKeys(line.Substring(0, line.IndexOf(' ')).Trim());

                    string tagVal = line.Substring(tagStr.Length).Trim();

                    if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters.ContainsKey(tagStr))
                    {
                        if (tagStr.Equals("Type"))
                        {
                            tagVal = fixEventKeys(tagVal);
                        }

                        else if (tagStr.Equals("At"))
                        {
                            tagVal = fixEventAtKeys(tagVal);
                        }

                        if (isComment)
                        {
                            tagVal = "#" + tagVal;
                        }

                        //if tgaVal is not commented overwrite param value
                        if (!isComment)
                        {
                            ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] = tagVal;
                        }

                        //to avoid overwriting a value line by a commented line
                        else if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] == null)
                        {
                            ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] = tagVal;
                        }
                    }
                }
                else
                {
                    string tagStr = fixEventKeys(line.Trim());

                    if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters.ContainsKey(tagStr))
                    {
                        string tagVal = "1";

                        switch (tagStr)
                        {
                        //flag like either is or not
                        case "HardwareOnly":
                        case "PhysicsOnly":
                        case "SoftwareOnly":
                        case "CameraSpace":
                            if (isComment)
                            {
                                tagVal = "#" + tagVal;
                            }

                            //if tgaVal is not commented overwrite param value
                            if (!isComment)
                            {
                                ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] = tagVal;
                            }

                            //to avoid overwriting a value line by a commented line
                            else if (((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] == null)
                            {
                                ((Event)((Condition)conditions[conditions.Count - 1]).events[eCount - 1]).eParameters[tagStr] = tagVal;
                            }

                            break;
                        }
                    }
                }

                if (line.ToLower().Equals("End".ToLower()))
                {
                    endCount++;
                }

                if (endCount > maxEndCount)
                {
                    break;
                }
            }
        }