示例#1
0
    /// <summary>
    /// 范围伤害(矩形)
    /// </summary>
    /// <param name="attacker">攻击者数据</param>
    /// <param name="effectKey">范围特效</param>
    /// <param name="targetPos">目标位置</param>
    /// <param name="width">宽度</param>
    /// <param name="height">高度</param>
    /// <param name="rotate">旋转角度(0度为z轴正方向)</param>
    /// <param name="durTime">持续时间</param>
    /// <param name="callback">结束回调</param>
    /// <param name="callbackForEveryOne">每个受击单位的回调</param>
    /// <returns></returns>
    public IGeneralAttack GetPositionRectScopeGeneralAttack(PositionObject attacker,
                                                            string effectKey,
                                                            Vector3 targetPos,
                                                            float width,
                                                            float height,
                                                            float rotate,
                                                            float durTime,
                                                            Action callback,
                                                            Action <GameObject> callbackForEveryOne = null)
    {
        IGeneralAttack result = null;

        // 创建图形 加入偏移 效果为目标前方一条直线
        var graphics = new RectGraphics(new Vector2(targetPos.x, targetPos.z), width, height, rotate);

        result = new PositionScopeGeneralAttack(attacker,
                                                effectKey,
                                                targetPos,
                                                graphics,
                                                durTime,
                                                callback,
                                                callbackForEveryOne);

        return(result);
    }
示例#2
0
    /// <summary>
    /// 范围伤害(矩形带正方向偏移)
    /// </summary>
    /// <param name="attacker">攻击者数据</param>
    /// <param name="effectKey">范围特效</param>
    /// <param name="targetPos">目标位置</param>
    /// <param name="width">宽度</param>
    /// <param name="height">高度</param>
    /// <param name="rotate">旋转角度(0度为z轴正方向)</param>
    /// <param name="offset">正方向偏移值</param>
    /// <param name="durTime">持续时间</param>
    /// <param name="callback">结束回调</param>
    /// <param name="callbackForEveryOne">每个受击单位的回调</param>
    /// <returns></returns>
    public IGeneralAttack GetPositionRectScopeGeneralAttack(PositionObject attacker,
                                                            string effectKey,
                                                            Vector3 targetPos,
                                                            float width,
                                                            float height,
                                                            float rotate,
                                                            float offset,
                                                            float durTime,
                                                            Action callback,
                                                            Action <GameObject> callbackForEveryOne = null)
    {
        IGeneralAttack result = null;

        // 创建图形 加入偏移 效果为目标前方一条直线
        // 将图形像攻击者前方推移offset的距离
        var offsetV2    = new Vector2(attacker.X, attacker.Y);
        var targetPosV2 = offsetV2 + new Vector2(attacker.MapCellObj.transform.forward.x, attacker.MapCellObj.transform.forward.z) * offset;
        var graphics    = new RectGraphics(targetPosV2, width, height, rotate);

        result = new PositionScopeGeneralAttack(attacker,
                                                effectKey,
                                                targetPos,
                                                graphics,
                                                durTime,
                                                callback,
                                                callbackForEveryOne);

        return(result);
    }
示例#3
0
    /// <summary>
    /// 范围伤害(扇形)
    /// </summary>
    /// <param name="attacker">攻击者数据</param>
    /// <param name="effectKey">范围特效</param>
    /// <param name="targetPos">目标位置</param>
    /// <param name="scopeRaduis">范围半径</param>
    /// <param name="openAngle">扇形角度</param>
    /// <param name="rotate">旋转角度(0度为z轴正方向)</param>
    /// <param name="durTime">持续时间</param>
    /// <param name="callback">结束回调</param>
    /// <param name="callbackForEveryOne">每个受击单位的回调</param>
    /// <returns></returns>
    public IGeneralAttack GetPositionSectorScopeGeneralAttack(PositionObject attacker,
                                                              string effectKey,
                                                              Vector3 targetPos,
                                                              float scopeRaduis,
                                                              float openAngle,
                                                              float rotate,
                                                              float durTime,
                                                              Action callback,
                                                              Action <GameObject> callbackForEveryOne = null)
    {
        IGeneralAttack result = null;

        // 创建图形
        var graphics = new SectorGraphics(new Vector2(targetPos.x, targetPos.z), rotate, scopeRaduis, openAngle);

        result = new PositionScopeGeneralAttack(attacker,
                                                effectKey,
                                                targetPos,
                                                graphics,
                                                durTime,
                                                callback,
                                                callbackForEveryOne);

        return(result);
    }
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="attacker">攻击者数据</param>
    /// <param name="effectKey">子弹预设key(或path)</param>
    /// <param name="releasePos">子弹飞行起点</param>
    /// <param name="targetObj">子弹目标单位</param>
    /// <param name="scopeRaduis">范围半径</param>
    /// <param name="speed">子弹飞行速度</param>
    /// <param name="durTime">范围特效持续时间</param>
    /// <param name="taType">子弹飞行轨迹</param>
    /// <param name="callback">攻击结束回调</param>
    /// <param name="callbackForEveryOne">每个单位被击回调</param>
    public PointToObjScopeGeneralAttack(PositionObject attacker,
                                        string[] effectKey,
                                        Vector3 releasePos,
                                        GameObject targetObj,
                                        float scopeRaduis,
                                        float speed,
                                        float durTime,
                                        TrajectoryAlgorithmType taType,
                                        Action callback,
                                        Action <GameObject> callbackForEveryOne = null)
    {
        if (attacker == null)
        {
            //throw new Exception("攻击者集群数据为空");
            return;
        }
        var key1 = effectKey[0];
        var key2 = effectKey[1];
        // 范围伤害
        Action scopeDemage = () =>
        {
            var positionScopeAttack = new PositionScopeGeneralAttack(attacker, key2, targetObj.transform.position, scopeRaduis,
                                                                     durTime, callback, callbackForEveryOne);
            positionScopeAttack.Begin();
        };

        var effectData    = attacker.AllData.EffectData;
        var muzzleEffect  = effectData.MuzzleFlashEffect;
        var muzzleDurTime = effectData.MuzzleFlashEffectTime;

        if (muzzleDurTime > 0)
        {
            // 对每个单位播受击特效
            var muzzleAngle = Utils.GetAngleWithZ(attacker.MapCellObj.transform.forward);
            // TODO 使用挂点
            EffectsFactory.Single.CreatePointEffect(muzzleEffect,
                                                    ParentManager.Single.GetParent(ParentManager.BallisticParent).transform,
                                                    attacker.MapCellObj.transform.position,
                                                    new Vector3(1, 1, 1),
                                                    muzzleDurTime,
                                                    0,
                                                    null,
                                                    Utils.EffectLayer,
                                                    new Vector2(0, muzzleAngle)).Begin();
        }

        // 飞行轨迹
        effect = EffectsFactory.Single.CreatePointToObjEffect(key1,
                                                              ParentManager.Single.GetParent(ParentManager.BallisticParent).transform,
                                                              releasePos,
                                                              targetObj,
                                                              new Vector3(1, 1, 1),
                                                              speed,
                                                              taType,
                                                              scopeDemage,
                                                              Utils.EffectLayer);
    }
示例#5
0
    /// <summary>
    /// 范围伤害(任意图形)
    /// </summary>
    /// <param name="attacker">攻击者数据</param>
    /// <param name="effectKey">范围特效</param>
    /// <param name="targetPos">目标点位置</param>
    /// <param name="graphics">范围检测图形</param>
    /// <param name="durTime">持续时间</param>
    /// <param name="callback">结束回调</param>
    /// <param name="callbackForEveryOne">每个受击单位的回调</param>
    /// <returns></returns>
    public IGeneralAttack GetPositionScopeGeneralAttack(PositionObject attacker,
                                                        string effectKey,
                                                        Vector3 targetPos,
                                                        ICollisionGraphics graphics,
                                                        float durTime,
                                                        Action callback,
                                                        Action <GameObject> callbackForEveryOne = null)
    {
        IGeneralAttack result = null;

        result = new PositionScopeGeneralAttack(attacker,
                                                effectKey,
                                                targetPos,
                                                graphics,
                                                durTime,
                                                callback,
                                                callbackForEveryOne);

        return(result);
    }