// 接口实现(ICloneable的接口) public override object Clone() { sdBehaviourEventNode kBehaviourEventNode = new sdBehaviourEventNode(); foreach (sdBehaviourTrigger kBehaviourTrigger in mBehaviourTriggerList) { kBehaviourEventNode.AddBehaviourTrigger(kBehaviourTrigger.Clone() as sdBehaviourTrigger); } foreach (sdBehaviourAction kBehaviourAction in mBehaviourActionList) { kBehaviourEventNode.AddBehaviourAction(kBehaviourAction.Clone() as sdBehaviourAction); } foreach (sdBehaviourState kBehaviourState in mBehaviourStateList) { kBehaviourEventNode.AddBehaviourState(kBehaviourState.Clone() as sdBehaviourState); } foreach (sdBehaviourEvent kBehaviourEvent in mBehaviourEventList) { kBehaviourEventNode.AddBehaviourEvent(kBehaviourEvent.Clone() as sdBehaviourEvent); } foreach (sdBehaviourEventNode kChildBehaviourEventNode in mChildBehaviourEventNodeList) { kChildBehaviourEventNode.AddChildBehaviourEventNode(kChildBehaviourEventNode.Clone() as sdBehaviourEventNode); } kBehaviourEventNode.ID = this.ID; kBehaviourEventNode.MaxUseCount = this.MaxUseCount; kBehaviourEventNode.mBehaviourAdvancedState = this.mBehaviourAdvancedState; return(kBehaviourEventNode); }
// 更新触发条件(继承自BehaviourTrigger)aa public override void Update() { if (mParentBehaviourEvent == null) { return; } sdBehaviourEventNode mParentBehaviourEventNode = mParentBehaviourEvent.ParentBehaviourEventNode; if (mParentBehaviourEventNode == null) { return; } float fEventNodeStartTime = mParentBehaviourEventNode.TriggerEnterTime; float fEventNodeElapseTime = Time.time - fEventNodeStartTime; if (fEventNodeElapseTime > mDelayTime) { fEventNodeElapseTime -= mDelayTime; while (fEventNodeElapseTime > mIntervalTime + mElapseTime) { fEventNodeElapseTime -= mIntervalTime + mElapseTime; } if (fEventNodeElapseTime <= mElapseTime) { if (mIsTriggered != true) { mIsTriggered = true; if (IsEnterTrigger && NotifyEnterTrigger != null) { NotifyEnterTrigger(this); } } } else { if (mIsTriggered != false) { mIsTriggered = false; if (IsLeaveTrigger && NotifyLeaveTrigger != null) { NotifyLeaveTrigger(this); } } } } else { } }
// 设置战斗系统配接器aa public void SetMonsterAutoFight(MonsterAutoFight kMonsterAutoFight) { if (mMonsterAutoFight == kMonsterAutoFight) { return; } if (mMonsterAutoFight != null) { sdGameMonster kMonster = mMonsterAutoFight.Monster; kMonster.NotifySummoned -= NotifySummoned; kMonster.NotifyKilled -= NotifyKilled; kMonster.NotifyAddHP -= NotifyAddHP; kMonster.NotifyChangeTarget -= NotifyChangeTarget; kMonster.NotifyAddDebuffState -= NotifyAddDebuffState; } if (kMonsterAutoFight != null) { sdGameMonster kMonster = kMonsterAutoFight.Monster; kMonster.NotifySummoned += NotifySummoned; kMonster.NotifyKilled += NotifyKilled; kMonster.NotifyAddHP += NotifyAddHP; kMonster.NotifyChangeTarget += NotifyChangeTarget; kMonster.NotifyAddDebuffState += NotifyAddDebuffState; } mMonsterAutoFight = kMonsterAutoFight; int iAIID = (int)kMonsterAutoFight.Monster.Property["AIID"]; mBehaviourEventTree = sdAITable.GetSingleton().GetBehaviourEventTree(iAIID); if (mBehaviourEventTree != null) { mBehaviourEventTree.SetBehaviourAdvancedState(this); } }
// 加载触发行为树aa protected sdBehaviourEventRootNode LoadBehaviourEventRootNode(XmlNode kXmlNode) { XmlElement kXmlElement = (XmlElement)kXmlNode; if (kXmlElement.Name != "AIEventRootNode") { return(null); } sdBehaviourEventRootNode kBehaviourEventRootNode = new sdBehaviourEventRootNode(); kBehaviourEventRootNode.MaxUseCount = -1; kBehaviourEventRootNode.ID = int.Parse(kXmlElement.GetAttribute("id")); kBehaviourEventRootNode.Name = kXmlElement.GetAttribute("name"); XmlNodeList kXmlChildNodeList = kXmlNode.ChildNodes; foreach (XmlNode kXmlChildNode in kXmlChildNodeList) { XmlElement kXmlChildElement = (XmlElement)kXmlChildNode; if (kXmlChildElement.Name == "AITrigger") { sdBehaviourTrigger kBehaviourTrigger = LoadBehaviourTrigger(kXmlChildNode); if (kBehaviourTrigger != null) { kBehaviourEventRootNode.AddBehaviourTrigger(kBehaviourTrigger); } } else if (kXmlChildElement.Name == "AIAction") { sdBehaviourAction kBehaviourAction = LoadBehaviourAction(kXmlChildNode); if (kBehaviourAction != null) { kBehaviourEventRootNode.AddBehaviourAction(kBehaviourAction); } } else if (kXmlChildElement.Name == "AIState") { sdBehaviourState kBehaviourState = LoadBehaviourState(kXmlChildNode); if (kBehaviourState != null) { kBehaviourEventRootNode.AddBehaviourState(kBehaviourState); } } else if (kXmlChildElement.Name == "AIEvent") { sdBehaviourEvent kBehaviourEvent = LoadBehaviourEvent(kXmlChildNode); if (kBehaviourEvent != null) { kBehaviourEventRootNode.AddBehaviourEvent(kBehaviourEvent); } } else if (kXmlChildElement.Name == "AIEventNode") { sdBehaviourEventNode kBehaviourEventChildNode = LoadBehaviourEventNode(kXmlChildNode); if (kBehaviourEventChildNode != null) { kBehaviourEventRootNode.AddChildBehaviourEventNode(kBehaviourEventChildNode); } } } return(kBehaviourEventRootNode); }
// 添加子节点aa public virtual void AddChildBehaviourEventNode(sdBehaviourEventNode kBehaviourEventNode) { kBehaviourEventNode.ParentBehaviourEventNode = this; mChildBehaviourEventNodeList.Add(kBehaviourEventNode); }