Esempio n. 1
0
    /// <summary>
    /// 以目标选择的对象(而不是资源ID)作为参数, 外界可以通过直接构造该对象, 而非从数据表读取, 从而调用该方法.
    /// </summary>
    public static ErrorCode SelectTargetAndAddSkillEffect(
        AttackerAttr attackerAttr,
        Vector3 centerPosition,
        float direction,
        TargetSelectionTableItem targetSelectionRes,
        uint skillEffectResID,
        SkillUtilities.FilterTarget filter = null
        )
    {
        ArrayList targets = SkillUtilities.SelectTargets(attackerAttr,
                                                         centerPosition, direction, targetSelectionRes);

        if (filter != null)
        {
            SkillUtilities.FilterTargetsBy(targets, filter, null);
        }

        foreach (BattleUnit t in targets)
        {
            // 设置效果的起始点.
            attackerAttr.SetEffectStartLocation(centerPosition,
                                                Utility.Vector3ToRadian(t.GetPosition() - attackerAttr.EffectStartPosition, direction)
                                                );

            ErrorHandler.Parse(
                AddSkillEffectByResource(attackerAttr, t, skillEffectResID),
                "failed to add skill effect with SelectTargetAndAddSkillEffect"
                );
        }

        return(ErrorCode.Succeeded);
    }
Esempio n. 2
0
    /// <summary>
    /// 选择目标, 并添加效果.
    /// </summary>
    /// <param name="attackerAttr">攻击者属性</param>
    /// <param name="centerPosition">在该位置进行目标选择</param>
    /// <param name= "direction">在中心位置时的朝向(如果形状是圆, 那么该参数没有作用)</param>
    /// <param name="targetSelection">目标选择参数</param>
    /// <param name="skillCommonResID">最初技能ID</param>
    /// <param name="skillEffectResID">为选择到的目标添加效果</param>
    /// <returns>对多少人添加了效果</returns>
    /// <remarks>
    /// 通过该方法产生的技能效果, 起始点和起始位置的方向会改变为技能选择中心点以及该点处的方向,
    /// 对之后的位移发起位置, 特效方向等产生影响.
    /// </remarks>
    public static ErrorCode SelectTargetAndAddSkillEffect(
        AttackerAttr attackerAttr,
        Vector3 centerPosition,
        float direction,
        uint targetSelection,
        uint skillEffectResID,
        SkillUtilities.FilterTarget filter = null
        )
    {
        if (targetSelection == uint.MaxValue && skillEffectResID == uint.MaxValue)
        {
            return(ErrorCode.Succeeded);
        }

        TargetSelectionTableItem targetSelectionRes = DataManager.TargetSelectionTable[targetSelection] as TargetSelectionTableItem;

        if (targetSelectionRes == null)
        {
            SkillUtilities.ResourceNotFound("targetselection", targetSelection);
            return(ErrorCode.ConfigError);
        }

        return(SelectTargetAndAddSkillEffect(attackerAttr, centerPosition, direction, targetSelectionRes, skillEffectResID, filter));
    }