Пример #1
0
    // 更新触发行为树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;
            }
        }
    }
Пример #2
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);
    }
Пример #3
0
    // 加载行为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);
    }
Пример #4
0
 // 添加触发行为aa
 public void AddBehaviourAction(sdBehaviourAction kBehaviourAction)
 {
     mBehaviourActionList.Add(kBehaviourAction);
 }
Пример #5
0
 // 添加触发事件到延迟执行列表aa
 public void AddBehaviourActionToDelayList(sdBehaviourAction kBehaviourAction)
 {
     mDelayhaviourActionList.Add(kBehaviourAction);
 }