예제 #1
0
        public void OnTriggerEnter(Collider collider)
        {
            if (m_DamageManager == null)
            {
                return;
            }
            string message = m_ColliderInfo.GetCollideLayerMessage(collider.gameObject.layer);

            if (!string.IsNullOrEmpty(message))
            {
                m_OwnSkill.SendMessage(message);
            }
            if (!m_OwnSkill.IsDamageEnable)
            {
                return;
            }

            if (SkillDamageManager.IsUserStandUp(collider.gameObject))
            {
                return;
            }

            if (m_DamageManager.AddDamagedObject(collider.gameObject))
            {
                UpdateHitCount();
                if (m_ColliderInfo.GetAttachConfig().IsAttachEnemy)
                {
                    AddAttachObject(collider);
                }
                else
                {
                    m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(), collider.gameObject,
                                                       m_ColliderInfo.GetStateImpacts(),
                                                       m_OwnSkill.SkillId, m_CurHitCountId);
                    if (m_DamageInterval > 0)
                    {
                        //Debug.Log("----------add more times obj " + collider.gameObject.name + " time=" + m_OwnSkill.CurTime);
                        AddMoreTimeEffectObject(collider.gameObject);
                    }
                    if (m_IsAlwaysEnterDamage)
                    {
                        m_LeaveDelObjects.Add(collider.gameObject);
                    }
                    m_DamagedObjects.Add(collider.gameObject);
                }
            }
            if (m_DamageManager.IsDamagedEnemy)
            {
                m_OwnSkill.SendMessage("oncollide");
            }
        }
예제 #2
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            if (curSectionTime >= m_StartTime)
            {
                GameObject obj = sender as GameObject;
                if (null == obj)
                {
                    return(false);
                }
                if (!instance.IsDamageEnable)
                {
                    return(false);
                }

                UnityEngine.Vector3 center         = obj.transform.TransformPoint(m_RelativeCenter);
                Collider[]          hits           = Physics.OverlapSphere(center, m_Range, TriggerUtil.CHARACTER_LAYER);
                SkillDamageManager  damage_manager = instance.CustomDatas.GetData <SkillDamageManager>();
                if (damage_manager == null)
                {
                    damage_manager = new SkillDamageManager(obj);
                    instance.CustomDatas.AddData <SkillDamageManager>(damage_manager);
                }
                if (m_IsShowTip)
                {
                    GameObject circle = TriggerUtil.DrawCircle(center, m_Range, m_Color);
                    GameObject.Destroy(circle, m_ShowTime / 1000.0f);
                }
                long hit_count_id = TriggerUtil.NextHitCountId();
                for (int i = 0; i < hits.Length; i++)
                {
                    if (!SkillDamageManager.IsEnemy(obj, hits[i].gameObject))
                    {
                        continue;
                    }
                    if (SkillDamageManager.IsUserStandUp(hits[i].gameObject))
                    {
                        continue;
                    }
                    if (!damage_manager.IsContainObject(hits[i].gameObject))
                    {
                        damage_manager.IsDamagedEnemy = true;
                        damage_manager.SendImpactToObject(obj, hits[i].gameObject, m_StateImpacts, instance.SkillId, hit_count_id);
                        if (!m_IsClearWhenFinish)
                        {
                            damage_manager.AddDamagedObject(hits[i].gameObject);
                        }
                    }
                }

                /*
                 * foreach (Collider hit in hits) {
                 * if (!SkillDamageManager.IsEnemy(obj, hit.gameObject)) {
                 *  continue;
                 * }
                 * if (SkillDamageManager.IsUserStandUp(hit.gameObject)) {
                 *  continue;
                 * }
                 * if (!damage_manager.IsContainObject(hit.gameObject)) {
                 *  damage_manager.IsDamagedEnemy = true;
                 *  damage_manager.SendImpactToObject(obj, hit.gameObject, m_StateImpacts, instance.SkillId, hit_count_id);
                 *  if (!m_IsClearWhenFinish) {
                 *    damage_manager.AddDamagedObject(hit.gameObject);
                 *  }
                 * }
                 * }*/
                if (damage_manager.IsDamagedEnemy)
                {
                    instance.SendMessage("oncollide");
                }
                return(false);
            }
            else
            {
                return(true);
            }
        }