Exemple #1
0
    // 接口实现(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
        {
        }
    }
Exemple #3
0
    // 设置战斗系统配接器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);
        }
    }
Exemple #4
0
    // 加载触发行为树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);
    }
Exemple #5
0
 // 添加子节点aa
 public virtual void AddChildBehaviourEventNode(sdBehaviourEventNode kBehaviourEventNode)
 {
     kBehaviourEventNode.ParentBehaviourEventNode = this;
     mChildBehaviourEventNodeList.Add(kBehaviourEventNode);
 }