Пример #1
0
    static void ResetTargePos(Character cha, ChildObject childObject, SkillContext context, excel_skill_event e)
    {
        SkillSelectCharactorType selType = (SkillSelectCharactorType)e.evnetParam1;
        Character selTarget = context.SelectCharactorByType(selType);

        if (selTarget == null)
        {
            return;
        }

        float fAngle = (float)e.evnetParam2;

        if (e.evnetParam3 > 0)
        {
            float fAngleR = (float)e.evnetParam3 * 2.0f;
            float fPct    = UnityEngine.Random.Range(0.0f, 1.0f);
            fAngle += fPct * fAngleR - fAngleR;
        }

        Quaternion q   = Quaternion.AngleAxis(fAngle, Vector3.up);
        Vector3    dir = selTarget.Direction;

        if (e.evnetParam4 > 0 && context.mOwner != selTarget)
        {
            dir   = selTarget.Position - context.mOwner.Position;
            dir.y = 0.0f;
            dir.Normalize();
        }
        dir = q * dir;
        float   dist      = (float)e.evnetParam5 * 0.001f;
        Vector3 targetPos = selTarget.Position + dir * dist;

        TargetPosTestType testType = (TargetPosTestType)e.evnetParam6;

        switch (testType)
        {
        case TargetPosTestType.None:
            break;

        case TargetPosTestType.LineTest:
        {
            uint layer = NavigationSystem.GetLayer(context.mOwner.Position);
            if (NavigationSystem.LineCast(context.mOwner.Position, targetPos, layer, out targetPos))
            {
                break;
            }
            break;
        }

        case TargetPosTestType.TargetInNav:
        {
            if (!NavigationSystem.IsInNavigation(targetPos))
            {
                targetPos = selTarget.Position;
            }
            break;
        }
        }
        context.TargetPos = targetPos;
    }
Пример #2
0
    public Character SelectCharactorByType(SkillSelectCharactorType selType)
    {
        switch (selType)
        {
        case SkillSelectCharactorType.Self:
            return(mOwner);

        case SkillSelectCharactorType.FightTarget:
        {
            return(mOwner.GetTarget());
        }

        case SkillSelectCharactorType.HitTarget:
            return(mHitTarget);

        case SkillSelectCharactorType.SkillTarget:
            return(SkillTarget);
        }
        return(null);
    }
    static void ResetTargePos(excel_skill_event e)
    {
        int[]    values = Enum.GetValues(typeof(SkillSelectCharactorType)) as int[];
        string[] texts  = new string[values.Length];
        for (int i = 0; i < values.Length; ++i)
        {
            SkillSelectCharactorType t = (SkillSelectCharactorType)values[i];
            texts[i] = t.ToDescription();
        }
        e.evnetParam1 = EditorGUILayout.IntPopup("目标", e.evnetParam1, texts, values);

        texts         = new string[] { "技能施放者到目标的方向", "目标正前方" };
        values        = new int[] { 0, 1 };
        e.evnetParam4 = EditorGUILayout.IntPopup("偏移朝向", e.evnetParam4, texts, values);
        e.evnetParam2 = EditorGUILayout.IntSlider("偏移朝向附加角度", e.evnetParam2, 0, 180);
        e.evnetParam3 = EditorGUILayout.IntSlider("偏移朝向附加角度随机范围", e.evnetParam3, 0, 180);

        float dist = (float)e.evnetParam5 * 0.001f;

        dist          = EditorGUILayout.FloatField("偏移距离", dist);
        e.evnetParam5 = (int)(dist * 1000.0f);

        texts = new string[]
        {
            "无",
            "边界检测",
            "是否在导航上"
        };
        values = new int[]
        {
            (int)TargetPosTestType.None,
            (int)TargetPosTestType.LineTest,
            (int)TargetPosTestType.TargetInNav
        };
        e.evnetParam6 = EditorGUILayout.IntPopup("导航检测", e.evnetParam6, texts, values);
    }