Esempio 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);
        }
Esempio n. 2
0
        public void SendImpactToObject(GameObject source, GameObject target, int impactid, int remaintime, int skillid, long hit_count_id)
        {
            if (IsUserStandUp(target))
            {
                return;
            }
            int        final_skill_id = skillid;
            GameObject damageOwner    = TriggerUtil.GetFinalOwner(source, skillid, out final_skill_id);

            LogicSystem.NotifyGfxHitTarget(damageOwner, impactid, target, 1, final_skill_id,
                                           remaintime, source.transform.position,
                                           TriggerUtil.GetObjFaceDir(source), hit_count_id);
        }
Esempio n. 3
0
        public void SendImpactToObject(GameObject source, GameObject target, Dictionary <BeHitState, StateImpact> stateimpacts, int skillid, long hit_count_id)
        {
            if (stateimpacts == null)
            {
                return;
            }
            if (IsUserStandUp(target))
            {
                return;
            }
            BeHitState  state       = GetBeHitState(target);
            StateImpact stateimpact = null;

            if (!stateimpacts.TryGetValue(state, out stateimpact))
            {
                stateimpacts.TryGetValue(BeHitState.kDefault, out stateimpact);
            }
            if (stateimpact == null)
            {
                return;
            }
            int        final_skill_id = -1;
            GameObject damageOwner    = TriggerUtil.GetFinalOwner(source, skillid, out final_skill_id);

            //Debug.Log("------------send impact to object " + target.name);
            for (int i = 0; i < stateimpact.m_Impacts.Count; i++)
            {
                LogicSystem.NotifyGfxHitTarget(damageOwner, stateimpact.m_Impacts[i].ImpactId, target, 1, final_skill_id,
                                               stateimpact.m_Impacts[i].RemainTime, source.transform.position,
                                               TriggerUtil.GetObjFaceDir(source), hit_count_id);
            }

            /*
             * foreach (ImpactData im in stateimpact.m_Impacts) {
             * LogicSystem.NotifyGfxHitTarget(damageOwner, im.ImpactId, target, 1, final_skill_id,
             *                                        im.RemainTime, source.transform.position,
             *                                        TriggerUtil.GetObjFaceDir(source), hit_count_id);
             * }*/
        }