Esempio n. 1
0
    private bool LoadScriptFromStream(StreamReader sr)
    {
        bool          bracket = false;
        SkillInstance skill   = null;

        do
        {
            string line = sr.ReadLine();
            if (line == null)
            {
                break;
            }

            line = line.Trim();

            if (line.StartsWith("//") || line == "")
            {
                continue;
            }

            if (line.StartsWith("skill"))
            {
                int start = line.IndexOf("(");
                int end   = line.IndexOf(")");
                if (start == -1 || end == -1)
                {
                    Debug.LogError("ParseScript Error, start == -1 || end == -1  {0}" + line);
                }

                int length = end - start - 1;
                if (length <= 0)
                {
                    Debug.LogError("ParseScript Error, length <= 1, {0}" + line);
                    return(false);
                }

                string args    = line.Substring(start + 1, length);
                int    skillId = (int)Convert.ChangeType(args, typeof(int));
                skill = new SkillInstance();
                AddSkillInstanceToPool(skillId, skill, true);
            }
            else if (line.StartsWith("{"))
            {
                bracket = true;
            }
            else if (line.StartsWith("}"))
            {
                bracket = false;

                // 按时间排序
                skill.m_SkillTriggers.Sort((left, right) =>
                {
                    if (left.GetStartTime() > right.GetStartTime())
                    {
                        return(-1);
                    }
                    else if (left.GetStartTime() == right.GetStartTime())
                    {
                        return(0);
                    }
                    else
                    {
                        return(1);
                    }
                });
            }
            else
            {
                // 解析trigger
                if (skill != null && bracket == true)
                {
                    int start = line.IndexOf("(");
                    int end   = line.IndexOf(")");
                    if (start == -1 || end == -1)
                    {
                        Debug.LogError("ParseScript Error, {0}" + line);
                    }

                    int length = end - start - 1;
                    if (length <= 0)
                    {
                        Debug.LogError("ParseScript Error, length <= 1, {0}" + line);
                        return(false);
                    }

                    string type = line.Substring(0, start);
                    string args = line.Substring(start + 1, length);
                    args = args.Replace(" ", "");
                    ISkillTrigger trigger = SkillTriggerMgr.Instance.CreateTrigger(type, args);
                    Debug.Log("111111");
                    if (trigger != null)
                    {
                        skill.m_SkillTriggers.Add(trigger);
                        Debug.Log("2222222  count = " + skill.GetTriggerCount(trigger.GetTypeName()));
                    }
                }
            }
        } while (true);


        return(true);
    }