// 更新触发行为树aa public void UpdateBehaviourTree() { if (mBehaviourEventTree == null) { return; } mBehaviourEventTree.UpdateBehaviourEvent(); foreach (sdBehaviourAction kBehaviourAction in mDelayhaviourActionList) { kBehaviourAction.DoAsyncAction(); } for (int i = 0; i < mDelayhaviourActionList.Count;) { sdBehaviourAction kBehaviourAction = mDelayhaviourActionList[i]; if (kBehaviourAction.Count <= 0) { mDelayhaviourActionList.RemoveAt(i); } else { ++i; } } }
// 加载事件aa protected sdBehaviourEvent LoadBehaviourEvent(XmlNode kXmlNode) { XmlElement kXmlElement = (XmlElement)kXmlNode; if (kXmlElement.Name != "AIEvent") { return(null); } sdBehaviourEvent kBehaviourEvent = new sdBehaviourEvent(); kBehaviourEvent.ID = int.Parse(kXmlElement.GetAttribute("id")); kBehaviourEvent.MaxUseCount = int.Parse(kXmlElement.GetAttribute("maxtickcount")); XmlNodeList kXmlChildNodeList = kXmlNode.ChildNodes; foreach (XmlNode kXmlChildNode in kXmlChildNodeList) { XmlElement kXmlChildElement = (XmlElement)kXmlChildNode; if (kXmlChildElement.Name == "AITrigger") { sdBehaviourTrigger kBehaviourTrigger = LoadBehaviourTrigger(kXmlChildNode); if (kBehaviourTrigger != null) { kBehaviourEvent.AddBehaviourTrigger(kBehaviourTrigger); } } else if (kXmlChildElement.Name == "AIAction") { sdBehaviourAction kBehaviourAction = LoadBehaviourAction(kXmlChildNode); if (kBehaviourAction != null) { kBehaviourEvent.AddBehaviourAction(kBehaviourAction); } } else if (kXmlChildElement.Name == "AIState") { sdBehaviourState kBehaviourState = LoadBehaviourState(kXmlChildNode); if (kBehaviourState != null) { kBehaviourEvent.AddBehaviourState(kBehaviourState); } } } return(kBehaviourEvent); }
// 加载行为aa protected sdBehaviourAction LoadBehaviourAction(XmlNode kXmlNode) { XmlElement kXmlElement = (XmlElement)kXmlNode; if (kXmlElement.Name != "AIAction") { return(null); } sdBehaviourAction kBehaviourAction = null; int iID = int.Parse(kXmlElement.GetAttribute("id")); int iDelay = int.Parse(kXmlElement.GetAttribute("delay")); int iCount = int.Parse(kXmlElement.GetAttribute("count")); int iInterval = int.Parse(kXmlElement.GetAttribute("interval")); if (iID == (int)EBehaviourActionType.enBAT_Summon) { sdSummonBehaviourAction kSummonBehaviourAction = new sdSummonBehaviourAction(); kSummonBehaviourAction.DelayTime = iDelay / 1000.0f; kSummonBehaviourAction.IntervalTime = iInterval / 1000.0f; kSummonBehaviourAction.Count = iCount; kSummonBehaviourAction.LevelAreaName = kXmlElement.GetAttribute("param1") as string; kBehaviourAction = kSummonBehaviourAction; } else if (iID == (int)EBehaviourActionType.enBAT_Skill) { sdSkillBehaviourAction kSkillBehaviourAction = new sdSkillBehaviourAction(); kSkillBehaviourAction.DelayTime = iDelay / 1000.0f; kSkillBehaviourAction.IntervalTime = iInterval / 1000.0f; kSkillBehaviourAction.Count = iCount; kSkillBehaviourAction.SkillGroupProbility = int.Parse(kXmlElement.GetAttribute("param1")) / 10000.0f; string kSkilllIDGroup = kXmlElement.GetAttribute("param2") as string; string kSkilllProbilityGroup = kXmlElement.GetAttribute("param3") as string; string[] kSkilllIDArray = kSkilllIDGroup.Split(';'); string[] kSkilllProbilityArray = kSkilllProbilityGroup.Split(';'); for (int i = 0; i < kSkilllIDArray.Length; ++i) { int iSkillID = int.Parse(kSkilllIDArray[i]); float fSkillProbility = int.Parse(kSkilllProbilityArray[i]) / 10000.0f; kSkillBehaviourAction.AddSkill(iSkillID, fSkillProbility); } if (kXmlElement.HasAttribute("param4")) { string kDetectDistance = kXmlElement.GetAttribute("param4") as string; if (kDetectDistance != null) { kSkillBehaviourAction.DetectDistance = (int.Parse(kDetectDistance) != 0); } } kBehaviourAction = kSkillBehaviourAction; } else if (iID == (int)EBehaviourActionType.enBAT_Buff) { sdBuffBehaviourAction kBuffBehaviourAction = new sdBuffBehaviourAction(); kBuffBehaviourAction.DelayTime = iDelay / 1000.0f; kBuffBehaviourAction.IntervalTime = iInterval / 1000.0f; kBuffBehaviourAction.Count = iCount; kBuffBehaviourAction.BuffID = int.Parse(kXmlElement.GetAttribute("param1")); kBuffBehaviourAction.BuffBehaviourActionTargetType = (EBuffBehaviourActionTargetType)(int.Parse(kXmlElement.GetAttribute("param2"))); if (kXmlElement.HasAttribute("param3")) { string kBuffProbility = kXmlElement.GetAttribute("param3") as string; if (kBuffProbility != null) { kBuffBehaviourAction.BuffProbility = int.Parse(kBuffProbility) / 10000.0f; } } kBehaviourAction = kBuffBehaviourAction; } return(kBehaviourAction); }
// 添加触发行为aa public void AddBehaviourAction(sdBehaviourAction kBehaviourAction) { mBehaviourActionList.Add(kBehaviourAction); }
// 添加触发事件到延迟执行列表aa public void AddBehaviourActionToDelayList(sdBehaviourAction kBehaviourAction) { mDelayhaviourActionList.Add(kBehaviourAction); }