Example #1
0
        public override void Apply(CAIController from, CAIController to)
        {
            //Debug.Log("buff apply to target");
            base.Apply(from, to);

            //不是己方给与的效果, 那么我们就人物是伤害了
            //TODO 可能有坑
            if (m_owner != null && !m_owner.SameTeam(m_from))
            {
                m_owner.Pawn.Instigator = m_from;
            }

            if (MBuffMeta.Duration > 0)
            {
                m_durationReg = new CTimeRegulator(MBuffMeta.Duration);
                //Debug.Log("create duration time is " + m_meta.Duration);
            }

            if (MBuffMeta.Period > 0)
            {
                m_dotReg = new CTimeRegulator(MBuffMeta.Period);
                OnPeriod();
            }

            ApplyModification();
            ApplyState();
        }
Example #2
0
 /// <summary>
 /// TODO 目前没有调用
 /// 完善技能系统后再说
 /// </summary>
 /// <param name="owner"></param>
 /// <param name="target"></param>
 public void Attack(CAIController owner, CController target)
 {
     /*if (m_effect == null){
      *      m_effect = CEffectHelper.CreateCEffect(m_meta.Effect, gameObject);
      * }
      * if(m_effect != null)m_effect.Apply(owner, target);*/
 }
Example #3
0
    private AIStateType ReturnTransition(CAIController pAI)
    {
        if (pAI.m_bArrivedReturnPos)
        {
            return(AIStateType.AIST_Idle);
        }

        return(AIStateType.AIST_Return);
    }
Example #4
0
    //-----------------------------------------------------------------------------------------
    // 退出本行为
    //-----------------------------------------------------------------------------------------
    public override void Update(CAIController pAI)
    {
        if (pAI.m_pOwner != null)
        {
            pAI.UpdatePatrol();
        }

        pAI.UpdateLookForEnemy();
    }
Example #5
0
    //-----------------------------------------------------------------------------------------
    // 进入本行为
    //-----------------------------------------------------------------------------------------
    public override void Enter(CAIController pAI)
    {
        // 清楚所有仇恨
        pAI.m_pTarget = null;

        pAI.ClearAllEnmity( );

        // 重置巡逻和锁敌的时间
        pAI.ReSetPatrolRestTime( );
        pAI.ReSetLookForTargetTime( );
    }
Example #6
0
    //-----------------------------------------------------------------------------------------
    // 退出本行为
    //-----------------------------------------------------------------------------------------
    public override void Update(CAIController pAI)
    {
        if (pAI.m_pOwner == null)
        {
            return;
        }

        if (pAI.m_pTarget != null)
        {
            pAI.UpdatePursue();
        }
    }
Example #7
0
    //-----------------------------------------------------------------------------------------
    // 进入本行为
    //-----------------------------------------------------------------------------------------
    public override void Enter(CAIController pAI)
    {
        if (pAI.m_pOwner == null)
        {
            return;
        }

        if (pAI.m_pTarget != null)
        {
            pAI.StartPursue();
        }
    }
Example #8
0
    public void InitEntity(uint dwTypeID)
    {
        InitEnemy(dwTypeID, false);
        m_FSM          = new CreatureFSM(this);
        m_AIController = new CAIController(this);
        m_pMoveCtrl    = new CMoveController(this);

        /// 初始化完毕后进入空闲状态
        if (m_FSM != null)
        {
            m_FSM.Change2IdleBeHavior();
        }
    }
Example #9
0
    private AIStateType AttackTransition(CAIController pAI)
    {
        if (pAI.m_pTarget == null)
        {
            return(AIStateType.AIST_Return);
        }

        if (!pAI.IsInAttackDistance())
        {
            return(AIStateType.AIST_Pursue);
        }

        return(AIStateType.AIST_Attack);
    }
Example #10
0
    public override void Update(CAIController pAI)
    {
        if (pAI.m_pTarget == null)
        {
            return;
        }

        CreatureFSM pFSM = pAI.m_pOwner.m_FSM;

        if (pFSM != null)
        {
            pAI.AttackTarget();
        }
    }
Example #11
0
    //-----------------------------------------------------------------------------------------
    // 进入本行为
    //-----------------------------------------------------------------------------------------
    public override void Enter(CAIController pAI)
    {
        CNPCEntity pOwner = pAI.m_pOwner;

        if (pOwner == null)
        {
            return;
        }

        pAI.StartReturn();

        pAI.ClearAllEnmity();
        pAI.m_pTarget = null;
        pOwner.SetState(EState.ES_Invincible);
    }
Example #12
0
    //-----------------------------------------------------------------------------------------
    // 退出本行为
    //-----------------------------------------------------------------------------------------
    public override void Exit(CAIController pAI)
    {
        CNPCEntity pOwner = pAI.m_pOwner;

        if (pOwner == null)
        {
            return;
        }

        // 回满蓝和血
        pOwner.SetAttValue(ERoleAttribute.ERA_HP, pOwner.GetAttValue(ERoleAttribute.ERA_HP), false);
        pOwner.SetAttValue(ERoleAttribute.ERA_MP, pOwner.GetAttValue(ERoleAttribute.ERA_MP), false);

        pOwner.UnSetState(EState.ES_Invincible);
    }
Example #13
0
        /// <summary>
        /// 注册刺激产生者
        /// </summary>
        public void RegisterStimusSource(string stimus, CAIController src)
        {
            if (!m_stimusDict.ContainsKey(stimus))
            {
                m_stimusDict[stimus] = new List <CAIController>();
            }

            if (m_stimusDict[stimus].Contains(src))
            {
                Debug.LogError("U duplicate RegisterStimusGenerator with " + stimus + " " + src.name);
                return;
            }

            m_stimusDict[stimus].Add(src);
        }
Example #14
0
    private AIStateType IdleTransition(CAIController pAI)
    {
        if (pAI.m_pTarget == null)
        {
            return(AIStateType.AIST_Idle);
        }

        if (pAI.IsInAttackDistance())
        {
            return(AIStateType.AIST_Attack);
        }
        else
        {
            return(AIStateType.AIST_Pursue);
        }
    }
Example #15
0
        public override void Update(List <CAIController> stimusSrcList)
        {
            base.Update(stimusSrcList);

            bool isReady = m_regulator.Update();

            if (!isReady)
            {
                return;
            }

            for (int i = 0; i < stimusSrcList.Count; ++i)
            {
                CAIController enemy = stimusSrcList[i];
                if (enemy.Pawn.DeadOrDyingOrInvalid)
                {
                    continue;
                }
                bool isEnemy = Owner.Pawn.IsEnemyTeam(enemy.Pawn);
                if (!isEnemy)
                {
                    continue;
                }

                bool canSee = Owner.LineOfSightTo(enemy, Vector3.zero);
                if (!canSee)
                {
                    continue;
                }

                //如果能够看见
                CAIStimulus stimu = new CAIStimulus();
                stimu.Sense             = this;
                stimu.Source            = Owner;
                stimu.Expired           = false;
                stimu.Source            = enemy;
                stimu.TimeBecameVisible = Time.realtimeSinceStartup;
                stimu.TimeLastSensed    = Time.realtimeSinceStartup;
                stimu.StimulusLocation  = enemy.LocalPosition;
                stimu.ReceiverLocation  = Owner.LocalPosition;

                AddOrUpdateStimulu(stimu);
                return;
            }
        }
Example #16
0
        /// <summary>
        /// from是buff来源于谁--技能释放者或者飞弹之类的
        /// to是buff挂在谁身上
        /// </summary>
        public virtual void Apply(CAIController from, CAIController to)
        {
            m_from = from;
            m_to   = to;

            //理论上我们调用这个方法的时候, behavior已经挂在to的身上了
            if (m_owner != to)
            {
                Debug.LogError("buff attach to wrong target");
                return;
            }

            if (from == null)
            {
                Debug.LogError("buff has not instigator");
                return;
            }
        }
Example #17
0
    public override AIStateType Transition(CAIController pAI, AIStateType eCurState)
    {
        if (eCurState == AIStateType.AIST_Idle)
        {
            IdleTransition(pAI);
        }

        else if (eCurState == AIStateType.AIST_Pursue)
        {
            PursueTransition(pAI);
        }

        else if (eCurState == AIStateType.AIST_Attack)
        {
            AttackTransition(pAI);
        }

        else if (eCurState == AIStateType.AIST_Return)
        {
            ReturnTransition(pAI);
        }

        return(AIStateType.AIST_Idle);
    }
Example #18
0
 //-----------------------------------------------------------------------------------------
 // 退出本行为
 //-----------------------------------------------------------------------------------------
 public override void Update(CAIController pAI)
 {
 }
Example #19
0
 //-----------------------------------------------------------------------------------------
 // 退出本行为
 //-----------------------------------------------------------------------------------------
 public override void Exit(CAIController pAI)
 {
 }
Example #20
0
 //-----------------------------------------------------------------------------------------
 // 进入本行为
 //-----------------------------------------------------------------------------------------
 public override void Enter(CAIController pAI)
 {
 }
Example #21
0
 void Start()
 {
     m_owner = gameObject.GetComponent <CAIController>();
 }
Example #22
0
 /// <summary>
 /// 派发消息给target
 /// </summary>
 public static void Send(CAIController target, CAIMessage message)
 {
     target.BrainComp.HandleMessage(message);
 }
Example #23
0
 //-----------------------------------------------------------------------------------------
 // 退出本行为
 //-----------------------------------------------------------------------------------------
 public virtual void Update(CAIController pAI)
 {
 }
Example #24
0
 //-----------------------------------------------------------------------------------------
 // 退出本行为
 //-----------------------------------------------------------------------------------------
 public virtual void Exit(CAIController pAI)
 {
 }
Example #25
0
 //-----------------------------------------------------------------------------------------
 // 进入本行为
 //-----------------------------------------------------------------------------------------
 public virtual void Enter(CAIController pAI)
 {
 }
Example #26
0
 protected virtual void OnDestroy()
 {
     m_owner = null;
 }
Example #27
0
 public virtual AIStateType Transition(CAIController pAI, AIStateType eCurState)
 {
     return(AIStateType.AIST_Idle);
 }
Example #28
0
 //-----------------------------------------------------------------------------------------
 // 退出本行为
 //-----------------------------------------------------------------------------------------
 public override void Update(CAIController pAI)
 {
     pAI.UpdateReturn();
 }
Example #29
0
 protected virtual void Awake()
 {
     m_owner = gameObject.GetComponent <CAIController>();
 }