Esempio n. 1
0
    public void RemoveTrigger(ISkillTrigger trigger)
    {
        foreach (var child in mTriggeres)
        {
            List <ISkillTrigger> list = child.Value;
            int cnt = list.Count;

            for (int i = 0; i < cnt; i++)
            {
                if (list[i] == trigger)
                {
                    list.RemoveAt(i);

                    if (list.Count == 0)
                    {
                        mTriggeres.Remove(child.Key);
                    }

                    break;
                }
            }
        }

        if (mTriggeres.Count == 0)
        {
            SkillSystem.Instance.RemoveInstance(this);
        }
    }
Esempio n. 2
0
 public virtual void AddSkillTrigger(string name, ISkillTrigger trigger)
 {
     if (!triggerMap.ContainsKey(name))
     {
         triggerMap[name] = new Stack <ISkillTrigger>();
     }
     this.triggerMap[name].Push(trigger);
 }
Esempio n. 3
0
 /// <summary>
 /// 添加触发器
 /// </summary>
 /// <param name="trigger"></param>
 public void AddTrigger(ISkillTrigger trigger)
 {
     if (trigger.StartTime + trigger.LastTime > this.lastTime)
     {
         this.lastTime = trigger.StartTime + trigger.LastTime;
     }
     skillTriggers.Add(trigger);
 }
Esempio n. 4
0
 /// <summary>
 /// 移除触发器
 /// </summary>
 /// <param name="trigger"></param>
 public void RemoveTrigger(ISkillTrigger trigger)
 {
     skillTriggers.Remove(trigger);
     this.lastTime = 0f;
     foreach (var t in skillTriggers)
     {
         if (trigger.StartTime + trigger.LastTime > this.lastTime)
         {
             this.lastTime = trigger.StartTime + trigger.LastTime;
         }
     }
 }
Esempio n. 5
0
        public ISkillTrigger CreateTrigger(string type, string args)
        {
            ISkillTrigger           ret     = null;
            BaseSkillTriggerFactory factory = GetTriggerFactory(type);

            if (factory == null)
            {
                return(null);
            }
            ret = factory.Create();
            ret.Init(args);
            return(ret);
        }
Esempio n. 6
0
        public override ISkillTrigger.TriggerStatus Triggered(ISkillArgs args)
        {
            ISkillTrigger trigger = args.ComponentMap.GetSkillTrigger(name);

            if (trigger != null)
            {
                return(trigger.Triggered(args));
            }
            else
            {
                if (defaultTrigger != null)
                {
                    return(defaultTrigger.Triggered(args));
                }
            }
            return(ISkillTrigger.TriggerStatus.Failed);
        }
Esempio n. 7
0
        /// <summary>
        /// 技能实体
        /// /*
        /// <Level Value="2">
        ///	    <AddBuff buffSkillId = "2" buffLevel="2"/>
        ///	    <AttackBuff buffSkillId = "2" buffLevel="2"/>
        /// </Level>
        /// */
        /// </summary>
        /// <param name="id">技能ID</param>
        /// <param name="data">技能参数</param>
        public SkillEntity(int id, XmlNode skillXml)
        {
            this._id          = id;
            this._skillXml    = skillXml;
            _skillTriggerList = new List <ISkillTrigger>();
            XmlNodeList nodeList = _skillXml.ChildNodes;

            foreach (XmlNode item in nodeList)
            {
                if (item is XmlElement)
                {
                    string        triggerName  = item.Name;
                    ISkillTrigger skillTrigger = SkillSystem.Instance.GetTrigger(triggerName);
                    if (skillTrigger == null)
                    {
                        Debug.LogError(triggerName + "没有找到类型!!!");
                        continue;
                    }

                    _skillTriggerList.Add(skillTrigger);
                }
            }
        }
Esempio n. 8
0
        public bool LoadSkill(string txt)
        {
            bool          bracket = false;
            SkillInstance skill   = null;

            if (string.IsNullOrEmpty(txt))
            {
                return(false);
            }

            string[] lines = txt.Split('\n');
            foreach (var item in lines)
            {
                string line = item.Trim();
                if (line.StartsWith("//") || line == "")
                {
                    continue;
                }
                if (line.StartsWith("skill"))
                {
                    int start = line.IndexOf("(");
                    int end   = line.IndexOf(")");
                    if (start == -1 || end == -1)
                    {
                        throw new Exception(string.Format("ParseScript Error, start == -1 || end == -1  {0}", line));
                    }
                    int len = end - start - 1;
                    if (len <= 0)
                    {
                        throw new Exception(string.Format("ParseScript Error, length <= 1, {0}", line));
                    }
                    string args    = line.Substring(start + 1, len);
                    int    skillID = (int)Convert.ChangeType(args, typeof(int));
                    skill = new SkillInstance(skillID);
                    AddSkillInstanceToPool(skillID, skill);
                }
                else if (line.StartsWith("{"))
                {
                    bracket = true;
                }
                else if (line.StartsWith("}"))
                {
                    bracket = false;
//                     skill.m_SkillTriggers.Sort((left, right) =>
//                         {
//                             float time1 = left.GetStartTime();
//                             float time2 = right.GetStartTime();
//                             if (time1 > time2) return -1;
//                             else if (time1 == time2) return 0;
//                             else return 1;
//
//                         });
                }
                else
                {
                    if (skill != null && bracket)
                    {
                        int start = line.IndexOf("(");
                        int end   = line.IndexOf(")");
                        if (start == -1 || end == -1)
                        {
                            throw new Exception(string.Format("ParseScript Error, start == -1 || end == -1  {0}", line));
                        }
                        int len = end - start - 1;
                        if (len <= 0)
                        {
                            throw new Exception(string.Format("ParseScript Error, length <= 1, {0}", line));
                        }
                        string type = line.Substring(0, start);
                        string args = line.Substring(start + 1, len);
                        args = args.Replace(" ", "");
                        ISkillTrigger trigger = SkillTriggerMgr.Instance.CreateTrigger(type, args);
                        if (trigger != null)
                        {
                            skill.m_SkillTriggers.Add(trigger);
                        }
                        else
                        {
                            throw new Exception(string.Format("create trigger failed,type = {0}", type));
                        }
                    }
                }
            }
            return(true);
        }
Esempio n. 9
0
 public virtual void TempUseSkillTrigger(string name, ISkillTrigger trigger)
 {
     AddSkillTrigger(name, trigger);
 }
Esempio n. 10
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);
    }
Esempio n. 11
0
 virtual public bool Excute(ISkillTrigger instance, float curTime)
 {
     return(false);
 }
Esempio n. 12
0
    public override ISkillTrigger Clone()
    {
        ISkillTrigger t = (ISkillTrigger)this.MemberwiseClone();

        return(t);
    }
Esempio n. 13
0
 public virtual void SetTrigger(ISkillTrigger trigger)
 {
     this.trigger = trigger;
 }