public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_PlaySound buff_PlaySound = (Buff_PlaySound)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        foreach (var v in targetUnits.targets)
        {
            if (v.UnitData.unitLayer == UnitLayer.Default)
            {
                continue;
            }
            if (buffHandlerVar.GetBufferValue(out BufferValue_AttackSuccess attackSuccess))
            {
                if (attackSuccess.successDic.ContainsKey(v.Id))
                {
                    if (!attackSuccess.successDic[v.Id])
                    {
                        continue;
                    }
                }
            }
            PlayAudio(buff_PlaySound, v, buffHandlerVar.playSpeed, buffHandlerVar.skillId);
        }
    }
示例#2
0
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_HitEffect buff = (Buff_HitEffect)buffHandlerVar.data;

        if (buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targets))
        {
            foreach (var v in targets.targets)
            {
                //未造成伤害就不给予效果
                if (buffHandlerVar.GetBufferValue(out BufferValue_AttackSuccess attackSuccess))
                {
                    if (attackSuccess.successDic.ContainsKey(v.Id))
                    {
                        if (!attackSuccess.successDic[v.Id])
                        {
                            continue;
                        }
                    }
                }
                HitEffect(buff, v.Position, buffHandlerVar.skillId);
            }
            return;
        }
        if (!buffHandlerVar.GetBufferValue(out BufferValue_Pos value_Pos))
        {
            return;
        }
        HitEffect(buff, value_Pos.aimPos, buffHandlerVar.skillId);
    }
示例#3
0
    public void Remove(BuffHandlerVar buffHandlerVar)
    {
        Buff_GiveSpecialDebuff buff = (Buff_GiveSpecialDebuff)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }
        //if (buff.currStackNum < buff.aimStackNum) return;//叠加层数没达到

        foreach (var v in targetUnits.targets)
        {
            CharacterStateComponent unitState = v.GetComponent <CharacterStateComponent>();
            //从一个特殊效果配置中,拿到对应效果的BuffGroup,添加到角色的BuffMgrComponent中
            switch (buff.restrictionType)
            {
            case RestrictionType.击退:
                unitState.Set(SpecialStateType.NotInControl, false);
                break;

            case RestrictionType.眩晕:
                unitState.Set(SpecialStateType.CantDoAction, false);
                break;
            }
        }
    }
示例#4
0
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        Buff_AddBuff addBuff = (Buff_AddBuff)buffHandlerVar.data;

        addBuff.buffGroup.sourceUnitId = buffHandlerVar.source.Id;
        foreach (var v in targetUnits.targets)
        {
            //未造成伤害就不给予效果
            if (buffHandlerVar.GetBufferValue(out BufferValue_AttackSuccess attackSuccess))
            {
                if (attackSuccess.successDic.ContainsKey(v.Id))
                {
                    if (!attackSuccess.successDic[v.Id])
                    {
                        continue;
                    }
                }
            }
            BuffMgrComponent buffMgr = v.GetComponent <BuffMgrComponent>();
            buffMgr.AddBuffGroup(addBuff.buffGroup.BuffGroupId, addBuff.buffGroup);
        }
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
#if !SERVER
        Buff_PlayEffect buff = (Buff_PlayEffect)buffHandlerVar.data;
        if (buff.lockToTarget)
        {
            if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
            {
                return;
            }
            foreach (var v in targetUnits.targets)
            {
                PlayEffect_LockToTarget(v, buff, buffHandlerVar);
            }
        }
        else
        {
            if (!buffHandlerVar.GetBufferValue(out BufferValue_Pos pos))
            {
                Log.Debug("找不到位置");
                return;
            }
            PlayEffect(pos.aimPos, buff, buffHandlerVar);
        }
#endif
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_GiveRecover buff = (Buff_GiveRecover)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        foreach (var v in targetUnits.targets)
        {
            NumericComponent numericComponent = v.GetComponent <NumericComponent>();
            if (buff.hpValue > 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.HP, v.Id, buff.hpValue);
            }
            if (buff.hpPct > 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.HP, v.Id, numericComponent.GetAsFloat(NumericType.HPMax_Final) * buff.hpPct);
            }
            if (buff.mpValue > 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.MP, v.Id, buff.mpValue);
            }
            if (buff.mpPct > 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.MP, v.Id, numericComponent.GetAsFloat(NumericType.MPMax_Final) * buff.mpPct);
            }
        }
    }
示例#7
0
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_DirectDamage buff = (Buff_DirectDamage)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        GameCalNumericTool.DamageData damageData = new GameCalNumericTool.DamageData();


        damageData.damageType  = buff.damageType;
        damageData.damageValue = buff.damageValue;
        if (buffHandlerVar.bufferValues.TryGetValue(typeof(BufferValue_DamageAddPct), out var damageAddPct))
        {
            damageData.damageValue = Mathf.RoundToInt((1 + ((BufferValue_DamageAddPct)damageAddPct).damageAddPct) * damageData.damageValue);
        }
        damageData.isCritical = false;
        SkillEffectComponent skillEffectComponent = buffHandlerVar.source.GetComponent <SkillEffectComponent>();
        var effectData = skillEffectComponent.GetEffectData(buffHandlerVar.skillId);

        if (effectData != null)
        {
            damageData.damageValue = Mathf.RoundToInt((1 + effectData.coefficientAddPct) * damageData.damageValue);
            damageData.isCritical  = effectData.critical;
        }

        if (!SkillHelper.tempData.ContainsKey((buffHandlerVar.source, buff.buffSignal)))
        {
            SkillHelper.tempData[(buffHandlerVar.source, buff.buffSignal)] = new Dictionary <Type, IBufferValue>();
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_DOT         buff             = (Buff_DOT)buffHandlerVar.data;
        NumericComponent numericComponent = buffHandlerVar.source.GetComponent <NumericComponent>();

        //这里只是计算一下DOT的伤害(快照机制),实际DOT的处理是在BuffMgr中管理的

        BuffHandlerVar.cacheDatas_int[(buffHandlerVar.source.Id, buff.buffSignal)] = Mathf.RoundToInt(numericComponent.GetAsFloat(buff.numericType) * buff.baseCoff * numericComponent.GetAsFloat(NumericType.FinalDamage_AddPct));
示例#9
0
 public void Remove(BuffHandlerVar buffHandlerVar)
 {
     UnityEngine.Debug.Log("移除强力buff");
     buffHandlerVar.source.GetUnitComponent <CharacterStateComponent>().Set(SpecialStateType.PowerAttack, false);
     if (Effect != null)
     {
         GameEntry.Entity.HideEntity(Effect);
     }
 }
示例#10
0
        public void AddHandle(BuffHandlerVar buffHandlerVar)
        {
            BuffHandlerVar = buffHandlerVar;

            UnityEngine.Debug.Log("增加强力buff");

            buffHandlerVar.source.GetUnitComponent <CharacterStateComponent>().Set(SpecialStateType.PowerAttack, true);
            GameEntry.Entity.ShowBuffEffect("buff_atk_add", buffHandlerVar.source.Id, "S_GC/Top", this);
        }
示例#11
0
    public async void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
#if !SERVER
        if (Game.Scene.GetComponent <GlobalConfigComponent>().networkPlayMode)
        {
            //联网模式是服务器发消息,才执行
            return;
        }
#endif
        try
        {
            Buff_Move buff_Move = (Buff_Move)buffHandlerVar.data;
            if (!buffHandlerVar.GetBufferValue(out BufferValue_Pos bufferValue_Pos))
            {
                Log.Error("给移动的Buff提供的参数不包含目标位置!  " + buffHandlerVar.skillId);
                return;
            }
            if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits bufferValue_TargetUnits))
            {
                Log.Error("给移动的Buff提供的参数不包含移动的目标!  " + buffHandlerVar.skillId);
                return;
            }

            foreach (var v in bufferValue_TargetUnits.targets)
            {
                if (buff_Move.resetDir)
                {
                    v.Rotation = Quaternion.LookRotation(bufferValue_Pos.aimPos - v.Position, Vector3.up);
                }
                Vector3 aimPos = bufferValue_Pos.aimPos;

                //TODO: 下面的移动都不严谨, 要做位移的合法性检查

                if (buff_Move.flash || buff_Move.moveDuration == 0)
                {
                    //需要检查目标位置是否能瞬移过去,然后瞬移不过去的时候,找到最合理的一个点瞬移过去
                    //瞬移
                    v.Position = aimPos;
                }
                else
                {
                    //需要检查目标位置是否能移动过去,如果不行的话,就不位移了
                    CharacterMoveComponent characterMoveComponent = buffHandlerVar.source.GetComponent <CharacterMoveComponent>();
                    float moveSpeed = Vector3.Distance(v.Position, aimPos) / buff_Move.moveDuration;
                    await characterMoveComponent.MoveTo(aimPos, moveSpeed);
                }
            }
        }
        catch (Exception e)
        {
            Log.Error(e.ToString());
        }
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_GiveNumeric buff = (Buff_GiveNumeric)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        foreach (var v in targetUnits.targets)
        {
            Game.EventSystem.Run(EventIdType.NumbericChange, buff.numericType, v.Id, buff.value);
        }
    }
示例#13
0
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_EnhanceSkillEffect buff = (Buff_EnhanceSkillEffect)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }

        foreach (var v in targetUnits.targets)
        {
            SkillEffectComponent skillEffectComponent = v.GetComponent <SkillEffectComponent>();
            skillEffectComponent.AddEffectData(buff.skillId, buff.effectData);
        }
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_UpdateNumeric buff = (Buff_UpdateNumeric)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits bufferValue_TargetUnits))
        {
            return;
        }

        NumericComponent numericComponent = buffHandlerVar.source.GetComponent <NumericComponent>();

        if (buff.addValueByNumeric)
        {
            float value = numericComponent.GetAsFloat(buff.sourceNumeric) * buff.coefficient + buff.valueAdd;

            BuffHandlerVar.cacheDatas_float[(buffHandlerVar.source.Id, buff.buffSignal)] = value;
    public void Remove(BuffHandlerVar buffHandlerVar)
    {
#if !SERVER
        Buff_PlayEffect buff = (Buff_PlayEffect)buffHandlerVar.data;
        if (buff.duration > 0)
        {
            return;
        }
        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }
        foreach (var v in targetUnits.targets)
        {
            RemoveEffect(v.Id, buff.buffSignal, buff.effectObjId);
        }
#endif
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
#if !SERVER
        if (Game.Scene.GetComponent <GlobalConfigComponent>().networkPlayMode)
        {
            //联网模式是服务器发消息,才执行
            return;
        }
#endif
        try
        {
            Buff_PushBack buff = (Buff_PushBack)buffHandlerVar.data;


            if (!buffHandlerVar.GetBufferValue(out BufferValue_Dir buffer_dir))
            {
                return;
            }
            if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits bufferValue_TargetUnits))
            {
                return;
            }

            foreach (var v in bufferValue_TargetUnits.targets)
            {
                if (buffHandlerVar.GetBufferValue(out BufferValue_AttackSuccess attackSuccess))
                {
                    if (attackSuccess.successDic.ContainsKey(v.Id))
                    {
                        if (!attackSuccess.successDic[v.Id])
                        {
                            continue;
                        }
                    }
                }
                Vector3 aimPos = v.Position + (buffer_dir.dir * buff.distance);
                PushBack(v, aimPos, buff).Coroutine();
            }
        }
        catch (Exception e)
        {
            Log.Error(e.ToString());
        }
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
#if !SERVER
        Buff_PlayAnim buff_PlayAnim = (Buff_PlayAnim)buffHandlerVar.data;

        if (buff_PlayAnim.playSpeed == 0)
        {
            buff_PlayAnim.playSpeed = 1;
        }

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits bufferValue_TargetUnits))
        {
            Log.Error("找不到对应的目标!");
            return;
        }
        foreach (var v in bufferValue_TargetUnits.targets)
        {
            //角色动画
            AnimatorComponent animatorComponent = v.GetComponent <AnimatorComponent>();
            if (!string.IsNullOrEmpty(buff_PlayAnim.anim_boolValue))
            {
                if (buff_PlayAnim.canBeInterrupted)
                {
                    buffHandlerVar.cancelToken.Register(() =>
                    {
                        animatorComponent.SetBoolValue(buff_PlayAnim.anim_boolValue, !buff_PlayAnim.boolValue);
                    });
                }
                animatorComponent.SetBoolValue(buff_PlayAnim.anim_boolValue, buff_PlayAnim.boolValue);
            }
            if (!string.IsNullOrEmpty(buff_PlayAnim.anim_triggerValue))
            {
                animatorComponent.SetTrigger(buff_PlayAnim.anim_triggerValue);
            }

            float speed = buffHandlerVar.playSpeed * buff_PlayAnim.playSpeed;

            // animatorComponent.SetAnimatorSpeed(speed);
        }
#endif
    }
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_CostHP_MP cost = (Buff_CostHP_MP)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
        {
            return;
        }
        foreach (var v in targetUnits.targets)
        {
            Unit             target           = v;
            NumericComponent numericComponent = target.GetComponent <NumericComponent>();
            float            updateHp         = -cost.costHp - cost.costHpInPct * numericComponent.GetAsFloat(NumericType.HPMax_Final);
            float            updateMp         = -cost.costMp - cost.costMpInPct * numericComponent.GetAsFloat(NumericType.MPMax_Final);
            if (updateHp != 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.HP, target.Id, updateHp);
            }
            if (updateMp != 0)
            {
                Game.EventSystem.Run(EventIdType.NumbericChange, NumericType.MP, target.Id, updateMp);
            }
        }
    }
    public IBufferValue[] ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_RangeDetection buff_RangeDetection = (Buff_RangeDetection)buffHandlerVar.data;

        if (!buffHandlerVar.GetBufferValue(out BufferValue_Pos bufferValue_Pos))
        {
            return(null);
        }
        //主要目的是返回多个群体目标对象
        BufferValue_TargetUnits bufferValue_TargetUnits = new BufferValue_TargetUnits();


        PolyshapeQueryCallback polyshapeQueryCallback = new PolyshapeQueryCallback();
        AABB ab = new AABB();

        switch (buff_RangeDetection.shapeType)
        {
        case Buff_RangeDetection.CollisionShape.Box:
            //根据传入进来的方向和位置计算做范围检测的区域



            if (!buffHandlerVar.GetBufferValue(out BufferValue_Dir bufferValue_Dir))
            {
                Log.Error("Box检测没有收到方向  " + buffHandlerVar.skillId);
                return(null);
            }

            Vector2 pos = bufferValue_Pos.aimPos.ToVector2();


            var transform = new Transform(in pos, bufferValue_Dir.dir.ToRotation2D().Angle);
            var Vertices  = new Vector2[4];

            float hx = buff_RangeDetection.shapeValue.x;
            float hy = buff_RangeDetection.shapeValue.y;
            Vertices[0].Set(-hx, -hy);
            Vertices[1].Set(hx, -hy);
            Vertices[2].Set(hx, hy);
            Vertices[3].Set(-hx, hy);

            for (var i = 0; i < 4; ++i)
            {
                Vertices[i] = MathUtils.Mul(transform, Vertices[i]);
            }
            ab.UpperBound = ab.LowerBound = Vertices[0];
            for (var i = 1; i < 4; ++i)
            {
                var v = Vertices[i];
                ab.LowerBound = Vector2.Min(ab.LowerBound, v);
                ab.UpperBound = Vector2.Max(ab.UpperBound, v);
            }
            var r = new Vector2(Settings.PolygonRadius, Settings.PolygonRadius);
            ab.LowerBound -= r;
            ab.UpperBound += r;
            break;

        case Buff_RangeDetection.CollisionShape.Circle:

            pos       = bufferValue_Pos.aimPos.ToVector2();
            transform = new Transform(in pos, 0);
            var   p      = MathUtils.Mul(transform.Rotation, transform.Position);
            float raidus = buff_RangeDetection.shapeValue.x;
            ab.LowerBound.Set(p.X - raidus, p.Y - raidus);
            ab.UpperBound.Set(p.X + raidus, p.Y + raidus);

            break;
        }
        //Log.Debug(ab.LowerBound.ToString() + ab.UpperBound.ToString());
        PhysicWorldComponent.Instance.world.QueryAABB(polyshapeQueryCallback, ab);

        if (polyshapeQueryCallback.units == null || polyshapeQueryCallback.units.Count == 0)
        {
            Log.Debug("没有检测到任何单位");
            return(null);
        }



        for (int i = polyshapeQueryCallback.units.Count - 1; i >= 0; i--)
        {
            //默认层(一般是特效,墙壁等)
            if (polyshapeQueryCallback.units[i].UnitData.groupIndex == GroupIndex.Default ||
                polyshapeQueryCallback.units[i].UnitData.unitLayer == UnitLayer.Default)
            {
                polyshapeQueryCallback.units.RemoveAt(i);
                continue;
            }

            if (buff_RangeDetection.FindFriend)
            {
                if (polyshapeQueryCallback.units[i].UnitData.groupIndex != buffHandlerVar.source.UnitData.groupIndex)
                {
                    polyshapeQueryCallback.units.RemoveAt(i);
                    continue;
                }
            }
            else
            {
                if (polyshapeQueryCallback.units[i].UnitData.groupIndex == buffHandlerVar.source.UnitData.groupIndex)
                {
                    polyshapeQueryCallback.units.RemoveAt(i);
                    continue;
                }
            }
            //高度区域检测
            if (Math.Abs((bufferValue_Pos.aimPos.y + buff_RangeDetection.halfHeight) - (polyshapeQueryCallback.units[i].Position.y + polyshapeQueryCallback.units[i].OffsetY))
                > (buff_RangeDetection.halfHeight + polyshapeQueryCallback.units[i].HalfHeight))
            {
                polyshapeQueryCallback.units.RemoveAt(i);
                Log.Debug("目前高度不在检测的范围内!");
                continue;
            }
            else
            {
                Log.Debug("目前高度在检测的范围内!");
            }
        }

        //拿到了所有检测到的Unit
        bufferValue_TargetUnits.targets = polyshapeQueryCallback.units.ToArray();


        // Log.Debug("范围检测到了  " + bufferValue_TargetUnits.targets.Length+ "  个目标");
        return(new IBufferValue[] { bufferValue_TargetUnits });
    }
示例#20
0
    public void ActionHandle(BuffHandlerVar buffHandlerVar)
    {
        Buff_EmitObj buff        = buffHandlerVar.data as Buff_EmitObj;
        UnitData     emitObjData = new UnitData();

        if (!buff.FindFriend)
        {
            emitObjData.groupIndex = buffHandlerVar.source.UnitData.groupIndex;
        }
        else
        {
            switch (buffHandlerVar.source.UnitData.groupIndex)
            {
            case GroupIndex.Default:
                emitObjData.groupIndex = GroupIndex.Default;
                break;

            case GroupIndex.Player:
                emitObjData.groupIndex = GroupIndex.Monster;
                break;

            case GroupIndex.Monster:
                emitObjData.groupIndex = GroupIndex.Player;
                break;
            }
        }
        Log.Debug(string.Format("EmitObj {0}  Source  {1}", emitObjData.groupIndex, buffHandlerVar.source.UnitData.groupIndex));
        emitObjData.unitLayer = buff.layer;
        emitObjData.layerMask = buff.layerMask;
        emitObjData.unitTag   = UnitTag.Default;
        int index = 10000;

        if (buff.lockTarget)
        {
            if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits))
            {
                return;
            }

            //每个单位都发射一个特效
            foreach (var v in targetUnits.targets)
            {
                long id = buffHandlerVar.source.Id + index; // 确保客户端/服务器发射的子弹的id都是一样的.
                index++;
#if !SERVER
                //特效
                UnityEngine.GameObject go = null;
                go = Game.Scene.GetComponent <EffectCacheComponent>().Get(buff.emitObjId);//先找到缓存的特效物体
                var effectGo = go;

                Unit unit = UnitFactory.CreateEmitObj(id, go, emitObjData);
                go.SetActive(true);
#else
                Unit unit = ETHotfix.UnitFactory.CreateEmitObj(id, emitObjData, buff.emitObjId);
#endif
                Vector3 dir            = (v.Position - buffHandlerVar.source.Position).normalized;
                Vector3 startPosOffset = buff.startPosOffset.ToV3();

                unit.Position = buffHandlerVar.source.Position + new Vector3(dir.x * startPosOffset.x, startPosOffset.y, dir.z * startPosOffset.z);
                Quaternion quaternion = Quaternion.LookRotation(dir, Vector3.up);
                unit.Rotation = quaternion;
                CollisionEvent_LockTarget(buffHandlerVar, unit, v, buff.emitSpeed).Coroutine();
            }
        }
        else
        {
            if (!buffHandlerVar.GetBufferValue(out BufferValue_Dir buffer_dir))
            {
                return;
            }
            long id = buffHandlerVar.source.Id + index; // 确保客户端/服务器发射的子弹的id都是一样的.
#if !SERVER
            UnityEngine.GameObject go = null;
            go = Game.Scene.GetComponent <EffectCacheComponent>().Get(buff.emitObjId);//先找到缓存的特效物体
            var  effectGo = go;
            Unit unit     = UnitFactory.CreateEmitObj(id, go, emitObjData);
            go.SetActive(true);
#else
            Unit unit = ETHotfix.UnitFactory.CreateEmitObj(id, emitObjData, buff.emitObjId);
#endif
            Vector3 startPosOffset = buff.startPosOffset.ToV3();
            Vector3 dir            = buffer_dir.dir.normalized;

            unit.Position = buffHandlerVar.source.Position + new Vector3(dir.x * startPosOffset.x, startPosOffset.y, dir.z * startPosOffset.z);
            //Log.Debug(string.Format("{0}使用者位置 方向{1} 初始位置偏移量{2},计算出的最终位置{3}", buffHandlerVar.source.Position, dir, startPosOffset, unit.Position));
            Log.Debug(string.Format("飞行物体的高度{0}", unit.Position.y));


            Quaternion quaternion = Quaternion.LookRotation(buffer_dir.dir, Vector3.up);
            unit.Rotation = quaternion;
            buffHandlerVar.source.Rotation = quaternion;
            Vector3 targetPos = dir * buff.emitSpeed * buff.duration + unit.Position;
            CollisionEvent(buffHandlerVar, unit, targetPos, buff.emitSpeed).Coroutine();
        }
    }
 public void PlayEffect_LockToTarget(Unit target, Buff_PlayEffect buff, BuffHandlerVar buffHandlerVar)
 {
     AddEffect(target, buff.buffSignal, buff.effectObjId, true, target.Position + buff.posOffset.ToV3(), buff.canBeInterrupted, buffHandlerVar.cancelToken, buff.duration, buffHandlerVar.skillId).Coroutine();
 }
 public void PlayEffect(Vector3 target, Buff_PlayEffect buff, BuffHandlerVar buffHandlerVar)
 {
     AddEffect(buffHandlerVar.source, buff.buffSignal, buff.effectObjId, false, target + buff.posOffset.ToV3(), buff.canBeInterrupted, buffHandlerVar.cancelToken, buff.duration, buffHandlerVar.skillId).Coroutine();
 }
示例#23
0
 void ExecuteCollisionResult(BuffHandlerVar buffHandlerVar, (Unit, Vector3) result, Unit emitObj)
    public static async ETTask  Execute(this Pipeline_FixedTime pipeline_fixedTime, SkillHelper.ExecuteSkillParams skillParams, BuffHandlerVar buffHandlerVar)
    {
        if (pipeline_fixedTime.delayTime > 0)
        {
            await TimerComponent.Instance.WaitAsync((long)(pipeline_fixedTime.delayTime * skillParams.playSpeed * 1000), skillParams.cancelToken.Token);
        }

        SkillHelper.HandleBuffs(pipeline_fixedTime, buffHandlerVar, skillParams).Coroutine();

        if (pipeline_fixedTime.fixedTime > 0)
        {
            await TimerComponent.Instance.WaitAsync((long)(pipeline_fixedTime.fixedTime * skillParams.playSpeed * 1000), skillParams.cancelToken.Token);
        }
    }
示例#25
0
    async ETVoid CollisionEvent(BuffHandlerVar buffHandlerVar, Unit emitObj, Vector3 targetPos, float speed)
    {
        var result = await emitObj.GetComponent <EmitObjMoveComponent>().MoveTo(targetPos, speed);

        ExecuteCollisionResult(buffHandlerVar, result, emitObj);
    }