protected void CalculateHitParticleType(SkillDamageRange.Rect rect, out EHitParticleType hitType, out Vector3 hitPos) { hitType = EHitParticleType.HIT_PARTICLE_PRIMARY; hitPos = Vector3.zero; Rect checkRect = new Rect(); checkRect.xMin = rect.left; checkRect.yMin = rect.bottom; checkRect.xMax = rect.right; checkRect.yMax = rect.top; GUIBattleMain battle = Globals.Instance.MGUIManager.GetGUIWindow <GUIBattleMain>(); if (null == battle) { return; } // Calculate the real damage rect if (skillDataSlot.MSkillData.BasicData.SkillType != ESkillType.GROUP_NIVOSE) { FightCellSlot target = battle.GetFightCellSlot(skillDataSlot._primaryTargetID); if (null == target) { return; } Vector3 attachPosition = target.transform.position; checkRect.xMin += attachPosition.x; checkRect.yMin += attachPosition.z; checkRect.xMax += attachPosition.x; checkRect.yMax += attachPosition.z; } // Add the be attacked target effect on the target foreach (SkillDataSlot.AttackTargetData attackTargetData in skillDataSlot._attackTargetDataList.Values) { FightCellSlot target = battle.GetFightCellSlot(attackTargetData._targetID); Vector3 attachPosition = target.transform.position; bool isContains = checkRect.Contains(new Vector2(attachPosition.x, attachPosition.z)); if (isContains && attackTargetData._isPrimaryTarget) { hitType = EHitParticleType.HIT_PARTICLE_PRIMARY; hitPos = attachPosition; return; } else if (isContains) { hitType = EHitParticleType.HIT_PARTICLE_ASSISTANT; hitPos = attachPosition; return; } } // End foreach hitType = EHitParticleType.HIT_PARTICLE_WATER_SURFACE; hitPos.x = checkRect.center.x; hitPos.y = 0.0f; hitPos.z = checkRect.center.y; }
protected void CalculateHitParticleType(SkillDamageRange.Rect rect, out EHitParticleType hitType, out Vector3 hitPos) { hitType = EHitParticleType.HIT_PARTICLE_PRIMARY; hitPos = Vector3.zero; // // Left-Bottom // Vector3 leftBottomPos = HelpUtil.GetGridPosition(rect.left, rect.bottom); // // Left-Top // Vector3 leftTopPos = HelpUtil.GetGridPosition(rect.left, rect.top); // // // Right-Bottom // Vector3 rightBottomPos = HelpUtil.GetGridPosition(rect.right, rect.bottom); // // Right-Top // Vector3 rightTopPos = HelpUtil.GetGridPosition(rect.right, rect.top); Rect checkRect = new Rect(); checkRect.xMin = rect.left; checkRect.yMin = rect.bottom; checkRect.xMax = rect.right; checkRect.yMax = rect.top; // Calculate the real damage rect if (_mSkillDataSlot.MSkillData.BasicData.SkillType != ESkillType.GROUP_NIVOSE) { WarshipL target = Globals.Instance.MPlayerManager.GetWarship(_mSkillDataSlot._primaryTargetID); Vector3 attachPosition = target.U3DGameObject.transform.position; checkRect.xMin += attachPosition.x; checkRect.yMin += attachPosition.z; checkRect.xMax += attachPosition.x; checkRect.yMax += attachPosition.z; } // Add the be attacked target effect on the target foreach (SkillDataSlot.AttackTargetData attackTargetData in _mSkillDataSlot._attackTargetDataList.Values) { WarshipL target = Globals.Instance.MPlayerManager.GetWarship(attackTargetData._targetID); Vector3 attachPosition = target.U3DGameObject.transform.position; bool isContains = checkRect.Contains(new Vector2(attachPosition.x, attachPosition.z)); if (isContains && attackTargetData._isPrimaryTarget) { hitType = EHitParticleType.HIT_PARTICLE_PRIMARY; hitPos = attachPosition; return; } else if (isContains) { hitType = EHitParticleType.HIT_PARTICLE_ASSISTANT; hitPos = attachPosition; return; } } // End foreach // hitType = EHitParticleType.HIT_PARTICLE_WATER_SURFACE; hitPos.x = checkRect.center.x; hitPos.y = 0.0f; hitPos.z = checkRect.center.y; }