Exemplo n.º 1
0
        private bool DamageCrossObjects(GameObject obj, SkillInstance instance, UnityEngine.Vector3 pos)
        {
            bool is_damaged_somebody          = false;
            SkillDamageManager damage_manager = instance.CustomDatas.GetData <SkillDamageManager>();

            if (damage_manager == null)
            {
                damage_manager = new SkillDamageManager(obj);
                instance.CustomDatas.AddData <SkillDamageManager>(damage_manager);
            }
            List <GameObject> hit_objes = TriggerUtil.GetRayHitObjects(TriggerUtil.CHARACTER_LAYER, pos);
            List <GameObject> enimies   = TriggerUtil.FiltEnimy(obj, hit_objes);
            int        final_skill_id   = -1;
            GameObject source_obj       = TriggerUtil.GetFinalOwner(obj, final_skill_id, out final_skill_id);
            long       hit_count_id     = TriggerUtil.NextHitCountId();

            for (int i = 0; i < enimies.Count; i++)
            {
                if (!SkillDamageManager.IsEnemy(obj, enimies[i].gameObject))
                {
                    continue;
                }
                if (IsObjectCanDamage(enimies[i]))
                {
                    damage_manager.SendImpactToObject(source_obj, enimies[i], m_StateImpacts, final_skill_id, hit_count_id);
                    DamageObjectInfo a = new DamageObjectInfo();
                    a.obj            = enimies[i];
                    a.remainDamageCD = m_DamageInterval / 1000.0f;
                    m_DamageCDObjects.Add(a);
                    is_damaged_somebody = true;
                }
            }

            /*
             * foreach (GameObject hit_obj in enimies) {
             * if (!SkillDamageManager.IsEnemy(obj, hit_obj.gameObject)) {
             *  continue;
             * }
             * if (IsObjectCanDamage(hit_obj)) {
             *  damage_manager.SendImpactToObject(source_obj, hit_obj, m_StateImpacts, final_skill_id, hit_count_id);
             *  DamageObjectInfo a = new DamageObjectInfo();
             *  a.obj = hit_obj;
             *  a.remainDamageCD = m_DamageInterval / 1000.0f;
             *  m_DamageCDObjects.Add(a);
             *  is_damaged_somebody = true;
             * }
             * }*/
            if (is_damaged_somebody)
            {
                damage_manager.IsDamagedEnemy = true;
                instance.SendMessage("oncollide");
            }
            return(is_damaged_somebody);
        }
Exemplo n.º 2
0
        private void UpdateDamgedObjectCD(long delta)
        {
            float seconds = TriggerUtil.ConvertToSecond(delta);

            for (int i = m_DamageCDObjects.Count - 1; i >= 0; i--)
            {
                DamageObjectInfo info = m_DamageCDObjects[i];
                info.remainDamageCD -= seconds;
                if (info.remainDamageCD < 0)
                {
                    m_DamageCDObjects.RemoveAt(i);
                }
            }
        }