Ejemplo n.º 1
0
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);

        if (m_Target == null)
        {
            m_Target = animator.GetComponentInParent <TargetCmpt>();
        }

        if (m_Target == null || m_Target.GetAttackEnemy() == null)
        {
            return;
        }

        if (m_IKs == null)
        {
            GetIKs(m_Target.transform);
        }

        if (m_IKs == null || m_IKs.Length <= 0)
        {
            return;
        }

        for (int i = 0; i < m_IKs.Length; i++)
        {
            m_IKs[i].solver.target = m_Target.GetAttackEnemy().CenterBone;
        }
    }
Ejemplo n.º 2
0
    public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        base.OnStateEnter(animator, stateInfo, layerIndex);

        if (m_IKs == null)
        {
            GetIKs(animator.transform);
        }

        if (m_Target == null)
        {
            m_Target = animator.GetComponentInParent <TargetCmpt>();
        }

        if (m_Target == null || m_Target.GetAttackEnemy() == null)
        {
            return;
        }

        if (m_IKs == null || m_IKs.Length <= 0)
        {
            return;
        }

        m_Pos = m_Target.GetAttackEnemy().centerPos;
    }
Ejemplo n.º 3
0
        //Only Npc
        IWeapon SwitchWeapon(Enemy e)
        {
            IWeapon tmpWeapon = null;

            if (!Enemy.IsNullOrInvalid(e) && entity.motionEquipment != null)
            {
                float minDis = Mathf.Infinity;

                List <IWeapon> weapons = entity.motionEquipment.GetCanUseWeaponList(entity);

                for (int i = 0; i < weapons.Count; i++)
                {
                    if (!entity.motionEquipment.WeaponCanUse(weapons[i]))                     //|| !(Match(weapons[i], e)
                    {
                        continue;
                    }

                    float tmpMinDis = Mathf.Infinity;

                    AttackMode[] modes = weapons[i].GetAttackMode();

                    bool isBreak = false;

                    for (int j = 0; j < modes.Length; j++)
                    {
                        //目标没有攻击目标或者攻击目标不是自己的时候用远程攻击!
                        if (modes[j].type == AttackType.Ranged)
                        {
                            TargetCmpt targetCmpt = e.entityTarget.target;
                            if (targetCmpt != null)
                            {
                                PeEntity targetEntity = targetCmpt.enemy != null ? targetCmpt.enemy.entityTarget : null;
                                if (targetEntity == null || !targetEntity.Equals(entity))
                                {
                                    tmpWeapon = weapons[i];
                                    isBreak   = true;
                                    break;
                                }
                            }
                        }

                        tmpMinDis = Mathf.Min(Mathf.Abs(e.DistanceXZ - modes[j].minRange), Mathf.Abs(e.DistanceXZ - modes[j].maxRange));
                    }

                    if (isBreak && tmpWeapon != null)
                    {
                        break;
                    }

                    if (tmpMinDis < minDis)
                    {
                        minDis    = tmpMinDis;
                        tmpWeapon = weapons[i];
                    }
                }
            }

            return(tmpWeapon);
        }
Ejemplo n.º 4
0
    void Start()
    {
        //m_Entity = PEUtil.GetComponent<PeEntity>(gameObject);

        m_Animator   = GetComponent <Animator>();
        m_Scanner    = GetComponent <TargetCmpt>();
        m_IKDataList = new List <IKData>();
    }
Ejemplo n.º 5
0
 void InitAttacks()
 {
     if (m_BehaveID > 0)
     {
         TargetCmpt target = GetComponent <TargetCmpt>();
         if (target != null)
         {
             target.SetActions(BTLauncher.Instance.GetAgent(m_BehaveID).GetActions());
         }
     }
 }
Ejemplo n.º 6
0
        public override void Start()
        {
            base.Start();
            m_SpeedState = SpeedState.None;
            m_PeTrans    = Entity.peTrans;
            m_Animator   = Entity.GetCmpt <AnimatorCmpt>();
            m_Attribute  = Entity.GetCmpt <SkAliveEntity>();
            m_target     = GetComponent <TargetCmpt>();
            //m_Limiter = new MovementLimiter(this, m_Field);

            if (m_Attribute != null)
            {
                m_Attribute.deathEvent += OnDeath;
            }
        }
Ejemplo n.º 7
0
    public bool HasEscapeEnemy()
    {
        foreach (PeEntity skEntity in m_Entities)
        {
            if (skEntity != null && !skEntity.IsDeath())
            {
                TargetCmpt targetCmpt = skEntity.GetComponent <TargetCmpt>();
                if (targetCmpt != null && targetCmpt.GetEscapeEnemy() != null)
                {
                    return(true);
                }
            }
        }

        return(false);
    }
Ejemplo n.º 8
0
        public IEnumerator SpawnProjectile()
        {
            if (projectileIDList.Length == 0)
            {
                GameObject.Destroy(gameObject);
                yield break;
            }
            Transform castTrans = GetCasterTrans();

            if (null == castTrans)
            {
                Debug.LogWarning("Can't find caster");
                GameObject.Destroy(gameObject);
                yield break;
            }

            bool immediately = projectileInterval < PETools.PEMath.Epsilon;

            TargetCmpt targetCmpt = castTrans.GetComponentInParent <TargetCmpt>();

            if (null != targetCmpt)
            {
                List <Enemy> enemies = targetCmpt.GetEnemies();

                if (null != enemies)
                {
                    for (int i = 0; i < projectileCount; i++)
                    {
                        Transform targetTrans = null;
                        if (enemies.Count > 0)
                        {
                            int targetIndex = i % enemies.Count;
                            if (null != enemies[targetIndex] || null != enemies[targetIndex].entityTarget || null != enemies[targetIndex].entityTarget.tr)
                            {
                                targetTrans = enemies[targetIndex].entityTarget.tr;
                            }
                        }
                        int castProjectileID = projectileIDList[i % projectileIDList.Length];
                        ProjectileBuilder.Instance.Register(castProjectileID, castTrans, targetTrans, i, immediately);
                        if (!immediately)
                        {
                            yield return(new WaitForSeconds(projectileInterval));
                        }
                    }
                }
            }
        }
Ejemplo n.º 9
0
    void Start()
    {
        m_Entity = GetComponentInParent <PeEntity>();

        if (m_Entity != null)
        {
            m_Entity.SetAttribute(AttribType.CampID, campid);
            m_Entity.SetAttribute(AttribType.DamageID, damageid);

            TowerCmpt tower = m_Entity.gameObject.AddComponent <TowerCmpt>();
            tower.SkillID   = skillid;
            tower.NeedVoxel = false;
            tower.OnMsg(EMsg.View_Prefab_Build, null, transform.parent.GetComponent <BiologyViewRoot>());
            m_Entity.Tower = tower;

            BehaveCmpt behaveCmpt = m_Entity.gameObject.AddComponent <BehaveCmpt>();
            behaveCmpt.SetAssetPath(behavePath);
            behaveCmpt.OnMsg(EMsg.View_Model_Build);

            if (m_Entity.netCmpt != null)
            {
                m_Entity.netCmpt.OnMsg(EMsg.Net_Instantiate, campid, damageid);

                if (m_Entity.netCmpt.IsController)
                {
                    behaveCmpt.OnMsg(EMsg.Net_Controller);
                }
                else
                {
                    behaveCmpt.OnMsg(EMsg.Net_Proxy);
                }
            }

            m_Entity.BehaveCmpt = behaveCmpt;

            TargetCmpt targetCmpt = m_Entity.gameObject.AddComponent <TargetCmpt>();
            targetCmpt.OnMsg(EMsg.View_Model_Build, null, transform.parent.GetComponent <BiologyViewRoot>());
            m_Entity.target = targetCmpt;
        }
    }