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); }
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); }
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); * }*/ }