예제 #1
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);
            }
        }