Esempio n. 1
0
    protected bool mIsInNotifyEnterTrigger = false;     //< 标记是否进入触发处理,防止递归调用aa
    protected void NotifyEnterTrigger(sdBehaviourTrigger kCurrentBehaviourTrigger)
    {
        if (mIsInNotifyEnterTrigger)
        {
            return;
        }

        mIsInNotifyEnterTrigger = true;

        bool bIsAllTriggered = true;

        foreach (sdBehaviourTrigger kBehaviourTrigger in mBehaviourTriggerList)
        {
            if (kBehaviourTrigger.IsEnterTrigger)
            {
                if (!kBehaviourTrigger.IsTriggered)
                {
                    bIsAllTriggered = false;
                    break;
                }
            }
        }

        bool bReachMaxCount = (mMaxUseCount > 0) && (mUseCount >= mMaxUseCount);

        if (bIsAllTriggered && !bReachMaxCount)
        {
            ++mUseCount;
            EnterBehaviourEvent();
        }

        mIsInNotifyEnterTrigger = false;
    }
Esempio n. 2
0
    protected bool mIsInNotifyLeaveTrigger = false;     //< 标记是否进入触发处理,防止递归调用aa
    protected void NotifyLeaverTrigger(sdBehaviourTrigger kCurrentBehaviourTrigger)
    {
        if (mIsInNotifyLeaveTrigger)
        {
            return;
        }

        mIsInNotifyLeaveTrigger = true;

        bool bIsAllTriggered = true;

        foreach (sdBehaviourTrigger kBehaviourTrigger in mBehaviourTriggerList)
        {
            if (kBehaviourTrigger.IsLeaveTrigger)
            {
                if (!kBehaviourTrigger.IsTriggered)
                {
                    bIsAllTriggered = false;
                    break;
                }
            }
        }

        if (!bIsAllTriggered)
        {
            LeaveBehaviourEvent();
        }

        mIsInNotifyLeaveTrigger = false;
    }
Esempio n. 3
0
 // 添加触发条件aa
 public void AddBehaviourTrigger(sdBehaviourTrigger kBehaviourTrigger)
 {
     kBehaviourTrigger.ParentBehaviourEvent = this;
     kBehaviourTrigger.NotifyEnterTrigger  += NotifyEnterTrigger;
     kBehaviourTrigger.NotifyLeaveTrigger  += NotifyLeaverTrigger;
     mBehaviourTriggerList.Add(kBehaviourTrigger);
 }
Esempio n. 4
0
    // 加载事件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);
    }
Esempio n. 5
0
    // 加载触发aa
    protected sdBehaviourTrigger LoadBehaviourTrigger(XmlNode kXmlNode)
    {
        XmlElement kXmlElement = (XmlElement)kXmlNode;

        if (kXmlElement.Name != "AITrigger")
        {
            return(null);
        }

        sdBehaviourTrigger kBehaviourTrigger = null;
        int iID    = int.Parse(kXmlElement.GetAttribute("id"));
        int iUsage = int.Parse(kXmlElement.GetAttribute("usage"));

        if (iID == (int)EBehaviourTriggerType.enBTT_LiveState)
        {
            kBehaviourTrigger         = new sdLiveBehaviourTriggerState();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_BattleState)
        {
            kBehaviourTrigger         = new sdBattleBehaviourTriggerState();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_HPState)
        {
            sdHPBehaviourTriggerState kHPBehaviourTriggerState = new sdHPBehaviourTriggerState();
            kHPBehaviourTriggerState.BTUType             = (EBehaviourTriggerUsageType)iUsage;
            kHPBehaviourTriggerState.MinConditionPercent = int.Parse(kXmlElement.GetAttribute("param1")) / 10000.0f;
            kHPBehaviourTriggerState.MaxConditionPercent = int.Parse(kXmlElement.GetAttribute("param2")) / 10000.0f;

            kBehaviourTrigger = kHPBehaviourTriggerState;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_IdleState)
        {
            kBehaviourTrigger         = new sdIdleBehaviourTriggerState();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_TimeState)
        {
            sdTimeBehaviourTriggerState kTimeBehaviourTriggerState = new sdTimeBehaviourTriggerState();
            kTimeBehaviourTriggerState.BTUType      = (EBehaviourTriggerUsageType)iUsage;
            kTimeBehaviourTriggerState.DelayTime    = int.Parse(kXmlElement.GetAttribute("param1")) / 1000.0f;
            kTimeBehaviourTriggerState.IntervalTime = int.Parse(kXmlElement.GetAttribute("param2")) / 1000.0f;
            kTimeBehaviourTriggerState.ElapseTime   = int.Parse(kXmlElement.GetAttribute("param3")) / 1000.0f;

            kBehaviourTrigger = kTimeBehaviourTriggerState;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_Summoned)
        {
            kBehaviourTrigger         = new sdSummonedBehaviourTrigger();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_Killed)
        {
            kBehaviourTrigger         = new sdKilledBehaviourTrigger();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_ChangeTarget)
        {
            kBehaviourTrigger         = new sdChangeTargetBehaviourTrigger();
            kBehaviourTrigger.BTUType = (EBehaviourTriggerUsageType)iUsage;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_HP)
        {
            sdHPBehaviourTrigger kHPBehaviourTrigger = new sdHPBehaviourTrigger();
            kHPBehaviourTrigger.BTUType          = (EBehaviourTriggerUsageType)iUsage;
            kHPBehaviourTrigger.BHPBTCType       = (EHPBehaviourTriggerCompareType)(int.Parse(kXmlElement.GetAttribute("param1")));
            kHPBehaviourTrigger.ConditionPercent = int.Parse(kXmlElement.GetAttribute("param2")) / 10000.0f;

            kBehaviourTrigger = kHPBehaviourTrigger;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_HurtHP)
        {
            sdHurtHPBehaviourTrigger kHurtHPBehaviourTrigger = new sdHurtHPBehaviourTrigger();
            kHurtHPBehaviourTrigger.BTUType          = (EBehaviourTriggerUsageType)iUsage;
            kHurtHPBehaviourTrigger.ConditionPercent = int.Parse(kXmlElement.GetAttribute("param1")) / 10000.0f;

            kBehaviourTrigger = kHurtHPBehaviourTrigger;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_AccumHurtHP)
        {
            sdAccumHurtHPBehaviourTrigger kAccumHurtHPBehaviourTrigger = new sdAccumHurtHPBehaviourTrigger();
            kAccumHurtHPBehaviourTrigger.BTUType          = (EBehaviourTriggerUsageType)iUsage;
            kAccumHurtHPBehaviourTrigger.ConditionPercent = int.Parse(kXmlElement.GetAttribute("param1")) / 10000.0f;

            kBehaviourTrigger = kAccumHurtHPBehaviourTrigger;
        }
        else if (iID == (int)EBehaviourTriggerType.enBTT_Buff)
        {
            sdBuffBehaviourTrigger kBuffBehaviourTrigger = new sdBuffBehaviourTrigger();
            kBuffBehaviourTrigger.BTUType   = (EBehaviourTriggerUsageType)iUsage;
            kBuffBehaviourTrigger.BuffState = (HeaderProto.ECreatureActionState)(int.Parse(kXmlElement.GetAttribute("param1")));

            kBehaviourTrigger = kBuffBehaviourTrigger;
        }

        return(kBehaviourTrigger);
    }