Exemple #1
0
    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;
    }
Exemple #2
0
    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;
    }