Beispiel #1
0
        private IEnumerator CloseTargetCoroutine(CharacterEntity target, float delay)
        {
            if (delay > 0)
            {
                delay /= Game.GameSetting.instance.speed;
                float time        = Time.realtimeSinceStartup;
                float currentTime = time;
                while (Time.realtimeSinceStartup - time < delay)
                {
                    yield return(null);

                    if (TimeController.instance.playerPause)
                    {
                        time += (Time.realtimeSinceStartup - currentTime);
                    }
                    currentTime = Time.realtimeSinceStartup;
                }
            }
            Vector3 offset    = Vector3.zero;
            Vector3 centerPos = Vector3.zero;

            if (target.isPlayer)
            {
                centerPos = PositionData.GetPos((uint)FormationPosition.Player_Position_2);
            }
            else
            {
                centerPos = PositionData.GetPos((uint)FormationPosition.Enemy_Position_2);
            }
            offset.z  = target.pos.z - centerPos.z;
            offset.z += _offset;
            Vector3 target1 = new Vector3(target.pos.x, _originalMainCameraPos.y, _originalMainCameraPos.z) + offset;
            Vector3 end     = Vector3.Lerp(target1, target.pos, lerp);
            LTDescr ltDescr = LeanTween.move(mainCamera.gameObject, end, 0.3f);

            ltDescr.tweenType = LeanTweenType.easeInOutSine;
            ltDescr.setIgnoreTimeScale(true);
        }
Beispiel #2
0
        private void PlayAOEEffects(float lastDelay, int layer)
        {
            #region aoe
            MechanicsData mechanicsData = null;
            List <float>  timelineKeys  = skillInfo.skillData.timeline.GetKeys();
            Dictionary <CharacterEntity, int> judgeTypeDic = new Dictionary <CharacterEntity, int>();
            for (int j = 0, count = timelineList.Count; j < count; j++)
            {
                Dictionary <uint, List <KeyValuePair <uint, uint> > > mechanicsDic = timelineList[j];
                List <uint> mechanicsKeys = mechanicsDic.GetKeys();
                List <Triple <float, float, float> > mechanicsValues = skillInfo.skillData.mechanicsValues[j];
                uint effectId = 0;
                if (skillInfo.skillData.aoeEffects.Length > j)
                {
                    effectId = skillInfo.skillData.aoeEffects[j];
                }
                for (int k = 0, kCount = mechanicsKeys.Count; k < kCount; k++)
                {
                    uint mechanicsId = mechanicsKeys[k];
                    mechanicsData = MechanicsData.GetMechanicsDataById(mechanicsId);
                    List <KeyValuePair <uint, uint> > tids;
                    if (mechanicsData.mechanicsType == MechanicsType.Reborn)
                    {
                        tids = CharacterUtil.FindDeadTargets(mechanicsData.rangeType, mechanicsData.targetType, isPlayer);
                        if (mechanicsData.rangeType == RangeType.All || mechanicsData.rangeType == RangeType.AllAbsolutely)
                        {
                            tids.AddRange(CharacterUtil.FindAllTargets(mechanicsData.targetType, isPlayer));
                        }
                    }
                    else
                    {
                        if (mechanicsData.rangeType == RangeType.All || mechanicsData.rangeType == RangeType.AllAbsolutely)
                        {
                            tids = CharacterUtil.FindAllTargets(mechanicsData.targetType, isPlayer);
                        }
                        else
                        {
                            tids = mechanicsDic[mechanicsId];
                        }
                    }
                    Triple <float, float, float> mechanicsValue = mechanicsValues[k];
                    float delay = timelineKeys[j] + lastDelay;
                    if (GameSetting.instance.effectable)
                    {
                        EffectInfo effectInfo = new EffectInfo(effectId);
                        if (effectInfo.effectData != null)
                        {
                            effectInfo.character      = character;
                            effectInfo.target         = character;
                            effectInfo.skillInfo      = skillInfo;
                            effectInfo.delay          = delay + effectInfo.effectData.delay;
                            effectInfo.mechanicsData  = mechanicsData;
                            effectInfo.mechanicsValue = mechanicsValue;

                            switch (effectInfo.effectData.effectType)
                            {
                            case EffectType.TargetArea:    //根据范围信息取位置
                                uint positionId = GetTargetAreaPositionId(mechanicsData, tids, isPlayer);
                                effectInfo.pos = PositionData.GetPos(positionId);
                                delay         += effectInfo.effectData.delay;
                                break;
                            }
                            EffectController.instance.PlayEffect(effectInfo, layer);
                        }
                    }
                    bool isLastTarget = false;
                    if (FightController.instance.fightStatus == FightStatus.Normal)//矫正因暂停导致时间线推迟
                    {
                        delay -= skillInfo.skillData.pauseTime;
                    }
                    for (int i = 0, iCount = tids.Count; i < iCount; i++)
                    {
                        if (i == iCount - 1)
                        {
                            isLastTarget = true;
                        }
                        CharacterEntity target1 = CharacterUtil.FindTarget(mechanicsData.mechanicsType, mechanicsData.targetType, isPlayer, tids[i].Key);
                        CharacterEntity target2 = CharacterUtil.FindTarget(mechanicsData.mechanicsType, mechanicsData.targetType, isPlayer, tids[i].Value);
                        if (!target1)
                        {
                            continue;
                        }
                        int judgeType = 0;
                        if (!judgeTypeDic.ContainsKey(target1))
                        {
                            judgeType             = JudgeUtil.GetJudgeResult(character, target1, target2, (int)skillInfo.skillData.skillId);
                            judgeTypeDic[target1] = judgeType;
                            if (judgeType == 0)
                            {
                                EffectController.instance.RemoveEffectByPrefabName(EffectController.SPEED_LINE);
                            }
                        }
                        else
                        {
                            judgeType = judgeTypeDic[target1];
                        }
                        if (isPlayer)
                        {
                            MechanicsController.instance.PlayerMechanics(skillInfo, mechanicsData, character, target1, target2, mechanicsValue, delay, judgeType, isLastTarget);
                        }
                        else
                        {
                            MechanicsController.instance.EnemyMechanics(skillInfo, mechanicsData, character, target1, target2, mechanicsValue, delay, judgeType, isLastTarget);
                        }
                    }
                }
            }
            judgeTypeDic.Clear();
            judgeTypeDic = null;
            #endregion
        }
Beispiel #3
0
        public void PlayCasterEffect(int layer)
        {
            if (!GameSetting.instance.effectable)
            {
                return;
            }
            #region black screen
            if (skillInfo.animationData.blackScreen > 0)
            {
                EffectInfo effectInfo = new EffectInfo(skillInfo.animationData.blackScreen);
                if (effectInfo.effectData != null)
                {
                    effectInfo.skillInfo = skillInfo;
                    effectInfo.target    = character;
                    effectInfo.delay     = skillInfo.skillData.blackTime;
                    effectInfo.length    = skillInfo.skillData.blackLength;

                    //switch (skillInfo.animationData.animType)
                    //{
                    //    case AnimType.Root:
                    //        effectInfo.length = skillInfo.skillData.timeline.First().Key;// skillInfo.animationData.length - skillInfo.skillData.pauseTime;
                    //        break;
                    //    case AnimType.Trace:
                    //        effectInfo.length = skillInfo.animationData.moveTime + 0.3f;
                    //        break;
                    //}
                    EffectController.instance.PlayEffect(effectInfo, (int)Logic.Enums.LayerType.Scene);
                }
            }
            if (skillInfo.animationData.bgEffect > 0)
            {
                EffectInfo effectInfoBgEffect = new EffectInfo(skillInfo.animationData.bgEffect);
                if (effectInfoBgEffect.effectData != null)
                {
                    effectInfoBgEffect.skillInfo = skillInfo;
                    effectInfoBgEffect.target    = character;
                    effectInfoBgEffect.delay     = skillInfo.skillData.blackTime;
                    effectInfoBgEffect.length    = skillInfo.skillData.blackLength;
                    EffectController.instance.PlayEffect(effectInfoBgEffect, (int)Logic.Enums.LayerType.Scene);
                }
            }
            #endregion
            #region full screen
            if (skillInfo.animationData.fullScreen > 0 && isPlayer)
            {
                EffectInfo effectInfo = new EffectInfo(skillInfo.animationData.fullScreen);
                if (effectInfo.effectData != null)
                {
                    effectInfo.delay  = skillInfo.skillData.fullScreenTime;// +effectInfo.effectData.delay;
                    effectInfo.target = character;
                    Vector3 pos = PositionData.GetPos((int)FormationPosition.Player_Position_2);
                    effectInfo.pos    = pos;// effectInfo.effectData.offset + new Vector3(0, 0, pos.z);
                    effectInfo.length = skillInfo.skillData.fullScreenLength;
                    //effectInfo.length = skillInfo.animationData.closeupOverTime;
                    EffectController.instance.PlayEffect(effectInfo, layer);
                }
            }
            #endregion
            MechanicsData mechanicsData = MechanicsData.GetMechanicsDataById(timelineList.First().First().Key);//第一个作用效果
            for (int i = 0, count = skillInfo.skillData.effectIds.Length; i < count; i++)
            {
                uint       effectId   = skillInfo.skillData.effectIds[i];
                EffectInfo effectInfo = new EffectInfo(effectId);
                if (effectInfo.effectData == null)
                {
                    continue;
                }
                effectInfo.skillInfo = skillInfo;
                effectInfo.character = character;
                switch (effectInfo.effectData.effectType)
                {
                case EffectType.Root:
                {
                    effectInfo.delay = skillInfo.effectDelay + effectInfo.effectData.delay;
                    Vector3 offset = effectInfo.effectData.offset;
                    if (!isPlayer)
                    {
                        offset.x *= -1;
                    }
                    effectInfo.pos    = PositionData.GetPostionDataById(character.positionId).position + offset;
                    effectInfo.target = character;
                }
                break;

                case EffectType.LockPart:
                    effectInfo.delay     = skillInfo.effectDelay + effectInfo.effectData.delay;
                    effectInfo.lockTrans = TransformUtil.Find(effectInfo.effectData.partName, character.transform);
                    effectInfo.target    = character;
                    break;

                case EffectType.LockTarget:
                    if (effectInfo.effectData.isRotate)
                    {
                        effectInfo.rotateAngles = skillInfo.rotateAngles;
                    }
                    effectInfo.delay  = skillInfo.effectDelay + effectInfo.effectData.delay;
                    effectInfo.target = character;
                    break;

                case EffectType.TargetArea:
                    uint positionId = GetTargetAreaPositionId(mechanicsData, timelineList.First().First().Value, isPlayer);
                    effectInfo.pos    = PositionData.GetPos(positionId);
                    effectInfo.target = character;
                    effectInfo.delay  = effectInfo.effectData.delay;
                    break;

                case EffectType.MoveTargetPos:
                {
                    float moveCost  = (skillInfo.animationData.hitTime - skillInfo.animationData.moveTime);
                    float moveDelay = moveCost * positionRow * GameConfig.timePercent;
                    effectInfo.delay     = skillInfo.effectDelay + effectInfo.effectData.delay + moveDelay;
                    effectInfo.character = character;
                    effectInfo.target    = character;
                    Vector3 offset = effectInfo.effectData.offset;
                    if (!isPlayer)
                    {
                        offset.x *= -1;
                    }
                    effectInfo.pos = endPos + offset;
                }
                break;

                case EffectType.FullScreen:
                    if (!isPlayer)
                    {
                        continue;
                    }
                    effectInfo.delay  = skillInfo.effectDelay + effectInfo.effectData.delay;
                    effectInfo.target = character;
                    Vector3 pos = PositionData.GetPos((int)FormationPosition.Player_Position_2);
                    effectInfo.pos = effectInfo.effectData.offset + new Vector3(0, 0, pos.z);
                    break;

                case EffectType.BlackScreen:
                case EffectType.ShakeScreen:
                    effectInfo.delay = effectInfo.effectData.delay;
                    break;
                }
                EffectController.instance.PlayEffect(effectInfo, layer);
            }
        }