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); } }
public virtual void AddSkillTrigger(string name, ISkillTrigger trigger) { if (!triggerMap.ContainsKey(name)) { triggerMap[name] = new Stack <ISkillTrigger>(); } this.triggerMap[name].Push(trigger); }
/// <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); }
/// <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; } } }
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); }
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); }
/// <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); } } }
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); }
public virtual void TempUseSkillTrigger(string name, ISkillTrigger trigger) { AddSkillTrigger(name, trigger); }
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); }
virtual public bool Excute(ISkillTrigger instance, float curTime) { return(false); }
public override ISkillTrigger Clone() { ISkillTrigger t = (ISkillTrigger)this.MemberwiseClone(); return(t); }
public virtual void SetTrigger(ISkillTrigger trigger) { this.trigger = trigger; }