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; } }
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; }
//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); }
void Start() { //m_Entity = PEUtil.GetComponent<PeEntity>(gameObject); m_Animator = GetComponent <Animator>(); m_Scanner = GetComponent <TargetCmpt>(); m_IKDataList = new List <IKData>(); }
void InitAttacks() { if (m_BehaveID > 0) { TargetCmpt target = GetComponent <TargetCmpt>(); if (target != null) { target.SetActions(BTLauncher.Instance.GetAgent(m_BehaveID).GetActions()); } } }
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; } }
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); }
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)); } } } } }
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; } }