chenxin
2020-12-05 5bfd1103410659fbb523ad25f0e34413fe032ed2
水精灵概率触发冰冻
10 files added
10 files modified
646 ■■■■ changed files
Assets/Prefabs/UI/FrostWord.prefab 94 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/UI/FrostWord.prefab.meta 7 ●●●●● patch | view | raw | blame | history
Assets/Scenes/Levels/Battle/Endless2D.unity 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBuffEffectType.cs 9 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs 20 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/Agent.cs 124 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs 3 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostDamageAdd.cs 29 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostDamageAdd.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostProbabilityAdd.cs 29 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostProbabilityAdd.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostTimeAdd.cs 34 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostTimeAdd.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs 66 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/FreezeBreath.cs 40 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs 17 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs 19 ●●●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_buff.json 2 ●●● patch | view | raw | blame | history
Assets/UI/Frost.png patch | view | raw | blame | history
Assets/UI/Frost.png.meta 118 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/UI/FrostWord.prefab
New file
@@ -0,0 +1,94 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3257525538472116254
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 3059469595041567074}
  - component: {fileID: 598523906858100597}
  - component: {fileID: 8715720225615642531}
  - component: {fileID: 8223785166565473932}
  m_Layer: 5
  m_Name: FrostWord
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!224 &3059469595041567074
RectTransform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 3257525538472116254}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
  m_AnchoredPosition: {x: 0, y: 0}
  m_SizeDelta: {x: 102, y: 42}
  m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &598523906858100597
CanvasRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 3257525538472116254}
  m_CullTransparentMesh: 0
--- !u!114 &8715720225615642531
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 3257525538472116254}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  m_Material: {fileID: 0}
  m_Color: {r: 1, g: 1, b: 1, a: 1}
  m_RaycastTarget: 1
  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
  m_Maskable: 1
  m_OnCullStateChanged:
    m_PersistentCalls:
      m_Calls: []
  m_Sprite: {fileID: 21300000, guid: 074adf71b94a0ce44aaee741a68eca58, type: 3}
  m_Type: 0
  m_PreserveAspect: 0
  m_FillCenter: 1
  m_FillMethod: 4
  m_FillAmount: 1
  m_FillClockwise: 1
  m_FillOrigin: 0
  m_UseSpriteMesh: 0
  m_PixelsPerUnitMultiplier: 1
--- !u!114 &8223785166565473932
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 3257525538472116254}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: f34b2e8d82a07c541958be6bda6fd604, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  bloodText: {fileID: 0}
  SlowDownWord: {fileID: 0}
  CritWord: {fileID: 0}
  FrostWord: {fileID: 8715720225615642531}
Assets/Prefabs/UI/FrostWord.prefab.meta
New file
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f2e6cecab2d55754b97f3ecafba0569c
PrefabImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scenes/Levels/Battle/Endless2D.unity
@@ -6846,6 +6846,8 @@
    type: 3}
  CritWord: {fileID: 8715720225615642531, guid: d50687f6a62a08745981a9e471357e9c,
    type: 3}
  FrostWord: {fileID: 8715720225615642531, guid: f2e6cecab2d55754b97f3ecafba0569c,
    type: 3}
  TowerUpgradeEffectPrefab: {fileID: 6847503030253729540, guid: f8ec855cfd7e13a4ebb2f2cbb8bbc480,
    type: 3}
  TowerAppearEffectPrefab: {fileID: 1600692593755992933, guid: 3ac90252c12eda44094c4979e1677cbf,
Assets/Scripts/Enum/EndlessBuffEffectType.cs
@@ -39,5 +39,14 @@
        // 减少木属性强化子弹的蓄力时间
        DecreaseWoodChargeTime,
        // 增加水精灵冰冻小怪的概率,水精灵普通攻击和技能都有概率造成冰冻,小怪被冰冻后不能移动
        FrostProbabilityAdd,
        // 增加水精灵冰冻伤害,小怪被冰冻后有额外伤害
        FrostDamageAdd,
        // 增加水精灵冰冻时间
        FrostTimeAdd,
    }
}
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
@@ -456,22 +456,6 @@
            if (towerPtr && towerPtr.FreezeBreathCtrl)
            {
                Damager damager = projectile.gameObject.GetComponent<Damager>();
                float finalDamage = damager.damage;
                List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.AttackAdd, towerPtr.ElfId);
                float ratio = 0;
                float add = 0;
                if (list.Count > 0)
                {
                    for (int i = 0; i < list.Count; ++i)
                    {
                        ratio += list[i].Config.buff_effect[1];
                        add += list[i].Config.buff_effect[2];
                    }
                }
                finalDamage += (ratio / 100f) * finalDamage + add;
                if (inFreezeBreath <= 0)
                {
@@ -488,7 +472,7 @@
                        towerPtr.PlayFreezeBreathEffect(true);
                        towerPtr.FreezeBreathCtrl.ReleaseCount = 1;
                        towerPtr.FreezeBreathCtrl.PlayFreezeEffect(waveLineID);
                        towerPtr.FreezeBreathCtrl.ReleaseFreeze(waveLineID, finalDamage, damager.alignmentProvider);
                        towerPtr.FreezeBreathCtrl.ReleaseFreeze(waveLineID, towerPtr, damager.alignmentProvider);
                    }
                }
                else
@@ -501,7 +485,7 @@
                    if (interval == time * (towerPtr.FreezeBreathCtrl.DamageCount - towerPtr.FreezeBreathCtrl.ReleaseCount - 1) + offset && towerPtr.FreezeBreathCtrl.ReleaseCount < towerPtr.FreezeBreathCtrl.DamageCount)
                    {
                        ++towerPtr.FreezeBreathCtrl.ReleaseCount;
                        towerPtr.FreezeBreathCtrl.ReleaseFreeze(waveLineID, finalDamage, damager.alignmentProvider);
                        towerPtr.FreezeBreathCtrl.ReleaseFreeze(waveLineID, towerPtr, damager.alignmentProvider);
                    }
                    if (inFreezeBreath <= 0)
Assets/Scripts/TowerDefense/Agents/Agent.cs
@@ -222,10 +222,43 @@
        /// </summary>
        protected bool isSlowDown;
        private bool isFrost;
        /// <summary>
        /// 是否处于冰冻状态
        /// </summary>
        protected bool isFrost;
        /// <value></value>
        public bool IsFrost
        {
            get { return isFrost; }
            set
            {
                if (!isFrost)
                {
                    if (value)
                    {
                        EndlessGameUI.instance.FloatFrostWord(transform.position);
                        PlaySlowDownEffect();
                        CanMove = false;
                    }
                }
                else
                {
                    if (!value)
                    {
                        StopSlowDownEffect();
                        CanMove = true;
                    }
                }
                isFrost = value;
            }
        }
        /// <summary>
        /// 冰冻剩余时间,< 0时解除冰冻,冰冻期间不会被再次冰冻
        /// </summary>
        public float FrostRemainTime { get; set; }
        /// <summary>
        /// 中毒粒子特效
@@ -243,15 +276,9 @@
        public ParticleSystem SlowDownParticle;
        /// <summary>
        /// 冰冻特效
        /// </summary>
        public ParticleSystem FrostParticle;
        /// <summary>
        /// 被火技能攻击特效
        /// </summary>
        public ParticleSystem FireSkillParticle;
        /// <summary>
        /// 降低移动速度.
@@ -570,14 +597,6 @@
        protected virtual void SetAgentStopBuff(buffinfo binfo)
        {
            MoveStopTime = binfo.last / 1000;
            if (!isFrost)
            {
                isFrost = true;
                if (FrostParticle != null)
                    FrostParticle.Play();
            }
        }
        /// <summary>
@@ -685,12 +704,10 @@
            poisonAttid = 0;
            poisonTimes = 0;
            timeToPoisonHurt = 0;
            isFrost = false;
            IsFrost = false;
            bInDeathAct = false;
            ChangeState(AgentActionState.Move);
            configuration.ClearShieldWall();
            StopFrostParticle();
            if (WoodAimCount > 0)
                WoodAimCount = 0;
@@ -710,12 +727,6 @@
            // 停止DoTween动画.
            transform.DOKill();
            Destroy(gameObject);
        }
        private void StopFrostParticle()
        {
            if (FrostParticle != null)
                FrostParticle.Stop();
        }
        /// <summary>    
@@ -908,6 +919,21 @@
            MoveStopTime = 0.0f;
        }
        private void PlaySlowDownEffect()
        {
            if (SlowDownParticle != null)
                SlowDownParticle.Play();
        }
        private void StopSlowDownEffect()
        {
            if (SlowDownParticle != null && !isSlowDown && !IsFrost)
            {
                SlowDownParticle.Stop();
                SlowDownParticle.Clear();
            }
        }
        /// <summary>
        /// 根据帧间的时间,来更新Agent的位置信息,其它信息直接删除.
        /// 1: 
@@ -915,46 +941,19 @@
        /// <param name="deltaTime"></param>
        protected void updateAgentPos(float deltaTime)
        {
            if ((!m_CurrentNode) || (!m_NextNode))
                return;
            // 是否处于停止状态.
            if (MoveStopTime > 0)
            {
                MoveStopTime -= Time.deltaTime;
                if (MoveStopTime <= 0)
                {
                    StopFrostParticle();
                    MoveStopTime = 0;
                }
                else
                    return;
            }
            if (fMoveSpeed == 0)
            {
                Debug.Log("当前的移动为零:" + fMoveSpeed);
                return;
            }
            if (!m_CurrentNode || !m_NextNode || fMoveSpeed <= 0.0001f) return;
            float finalSpeed = fMoveSpeed * (1 - speedSlowRate);
            if (speedSlowRate > 0 && !isSlowDown)
            {
                isSlowDown = true;
                if (SlowDownParticle != null)
                    SlowDownParticle.Play();
                PlaySlowDownEffect();
            }
            else if (speedSlowRate == 0 && isSlowDown)
            {
                isSlowDown = false;
                if (SlowDownParticle != null)
                {
                    SlowDownParticle.Stop();
                    SlowDownParticle.Clear();
                }
                StopSlowDownEffect();
            }
            Vector3 curPos = m_NavMeshAgent.transform.position;
@@ -1075,6 +1074,7 @@
        {
            UpdateAction();
            HandleShieldWall();
            HandleFrost();
            // 处理死亡状态了,不必再移动:
            if (bInDeathAct || !CanMove) return;
@@ -1090,6 +1090,22 @@
                updatePoison(Time.deltaTime);
        }
        private void HandleFrost()
        {
            if (IsFrost)
            {
                if (FrostRemainTime > 0f)
                {
                    FrostRemainTime -= Time.deltaTime;
                    if (FrostRemainTime <= 0f)
                        IsFrost = false;
                }
                else
                    IsFrost = false;
            }
        }
        protected virtual void Update()
        {
Assets/Scripts/TowerDefense/Level/EndlessBuff/EndlessBuffManager.cs
@@ -37,6 +37,9 @@
                new FireRateAdd(),
                new SkillLevelUp(),
                new DecreaseWoodChargeTime(),
                new FrostProbabilityAdd(),
                new FrostDamageAdd(),
                new FrostTimeAdd()
            };
        }
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostDamageAdd.cs
New file
@@ -0,0 +1,29 @@
/**
 * 13.增加水精灵冰冻伤害
 * @Author: chenxin
 * @Date: 2020-12-05 16:26:52
 */
namespace KTGMGemClient
{
    public class FrostDamageAdd : EndlessBuff
    {
        /// <summary>
        /// 获得冰冻伤害增加(千分比)
        /// </summary>
        /// <param name="elfId"></param>
        /// <returns></returns>
        public float GetFrostDamageAdd(int elfId)
        {
            float ret = 0f;
            for (int i = 0; i < BuffList.Count; ++i)
            {
                if (!IsEffective(BuffList[i], elfId)) continue;
                ret += BuffList[i].Config.buff_effect[1] / 1000f;
            }
            return ret;
        }
    }
}
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostDamageAdd.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1989b6d565d1b4448a03c6d1990891d7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostProbabilityAdd.cs
New file
@@ -0,0 +1,29 @@
/**
 * 12.增加水精灵冰冻小怪的概率
 * @Author: chenxin
 * @Date: 2020-12-05 16:26:20
 */
namespace KTGMGemClient
{
    public class FrostProbabilityAdd : EndlessBuff
    {
        /// <summary>
        /// 获得冰冻概率
        /// </summary>
        /// <param name="elfId">精灵id</param>
        /// <returns></returns>
        public float GetFrostProbaility(int elfId)
        {
            float ret = 0f;
            for (int i = 0; i < BuffList.Count; ++i)
            {
                if (!IsEffective(BuffList[i], elfId)) continue;
                ret += BuffList[i].Config.buff_effect[1] / 1000f;
            }
            return ret;
        }
    }
}
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostProbabilityAdd.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d646272b865278e43940747659f5b397
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostTimeAdd.cs
New file
@@ -0,0 +1,34 @@
/**
 * 14.增加水精灵冰冻时间
 * @Author: chenxin
 * @Date: 2020-12-05 16:27:29
 */
namespace KTGMGemClient
{
    public class FrostTimeAdd : EndlessBuff
    {
        /// <summary>
        /// 默认冰冻时间
        /// </summary>
        public static readonly float DefaultFrostTime = 2f;
        /// <summary>
        /// 获得冰冻时间
        /// </summary>
        /// <param name="elfId"></param>
        /// <returns></returns>
        public float GetFrostTime(int elfId)
        {
            float ret = 0f;
            for (int i = 0; i < BuffList.Count; ++i)
            {
                if (!IsEffective(BuffList[i], elfId)) continue;
                ret += BuffList[i].Config.buff_effect[1];
            }
            return ret + DefaultFrostTime;
        }
    }
}
Assets/Scripts/TowerDefense/Level/EndlessBuff/FrostTimeAdd.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 64857f832e43bdf43b6d7837092c3dd9
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -1,9 +1,7 @@
using ActionGameFramework.Health;
using System;
using TowerDefense.Agents;
using TowerDefense.UI.HUD;
using UnityEngine;
using System.Collections.Generic;
using KTGMGemClient;
namespace TowerDefense.Towers.Projectiles
@@ -81,9 +79,9 @@
        /// 判断本次伤害是否暴击
        /// </summary>
        /// <returns></returns>
        private bool IsCrit()
        public static bool IsCrit(int elfId)
        {
            elf_info info = ElfInfoData.GetDataById(TowerPtr.ElfId);
            elf_info info = ElfInfoData.GetDataById(elfId);
            float crit = 0f;
            if (info != null)
@@ -92,7 +90,7 @@
            CritProbabilityAdd critProbabilityAdd = (CritProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritProbabilityAdd);
            if (critProbabilityAdd != null)
                crit = critProbabilityAdd.GetCrit(TowerPtr.ElfId, crit);
                crit = critProbabilityAdd.GetCrit(elfId, crit);
            float random = UnityEngine.Random.Range(0, 1f);
@@ -103,11 +101,11 @@
        /// 获取暴击伤害增加比率
        /// </summary>
        /// <returns></returns>
        private float GetCritDamageRate()
        public static float GetCritDamageRate(int elfId)
        {
            CritDamageAdd critDamageAdd = (CritDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritDamageAdd);
            return critDamageAdd == null ? 0 : critDamageAdd.GetCritDamageRate(TowerPtr.ElfId);
            return critDamageAdd == null ? 0 : critDamageAdd.GetCritDamageRate(elfId);
        }
        /// <summary>
@@ -124,17 +122,19 @@
            if (EndlessBuffManager.instanceExists)
                basicDamage += EndlessBuffManager.instance.ProcessEndlessBuffAttack(basicDamage, TowerPtr.ElfId);
            bool crit = IsCrit();
            bool crit = IsCrit(TowerPtr.ElfId);
            if (crit)
            {
                float basicCritDamageRate = info != null ? info.b_critdmg / 1000f : 0f;
                basicDamage *= 1 + basicCritDamageRate + GetCritDamageRate();
                basicDamage *= 1 + basicCritDamageRate + GetCritDamageRate(TowerPtr.ElfId);
            }
            // 玉米强化子弹10倍伤害
            if (isEnhancedBullet)
                basicDamage *= 10f;
            bool needFrost = HandleWaterFrost(TowerPtr.ElfId, (enemy as Agent), ref basicDamage);
            int deathCount = 0;
@@ -170,6 +170,16 @@
                }
            }
            if (!enemy.isDead && needFrost)
            {
                (enemy as Agent).IsFrost = true;
                (enemy as Agent).FrostRemainTime = FrostTimeAdd.DefaultFrostTime;
                FrostTimeAdd frostTimeAdd = (FrostTimeAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostTimeAdd);
                if (frostTimeAdd != null)
                    (enemy as Agent).FrostRemainTime = frostTimeAdd.GetFrostTime(TowerPtr.ElfId);
            }
            // 播放受击动画:
            if (!enemy.isDead && enemy.liveID == tid)
            {
@@ -182,6 +192,44 @@
        }
        /// <summary>
        /// 处理水精灵冰冻
        /// </summary>
        /// <param name="elfId"></param>
        /// <param name="enemy"></param>
        /// <param name="basicDamage"></param>
        /// <returns>是否需要冰冻,如果直接被打死就无所谓了,也不要飘字</returns>
        public static bool HandleWaterFrost(int elfId, Agent enemy, ref float basicDamage)
        {
            bool needFrost = false;
            if (elfId != 201) return needFrost;
            // 处理冰冻状态中的额外伤害
            if (enemy.IsFrost)
            {
                FrostDamageAdd frostDamageAdd = (FrostDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostDamageAdd);
                if (frostDamageAdd != null)
                    basicDamage *= (1 + frostDamageAdd.GetFrostDamageAdd(elfId));
            }
            else
            {
                FrostProbabilityAdd frostProbabilityAdd = (FrostProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostProbabilityAdd);
                if (frostProbabilityAdd != null)
                {
                    float probaility = frostProbabilityAdd.GetFrostProbaility(elfId);
                    float random = UnityEngine.Random.Range(0, 1);
                    if (random <= probaility)
                        needFrost = true;
                }
            }
            return needFrost;
        }
        /// <summary>
        /// 处理塔位的属性攻击
        /// </summary>
        /// <param name="enemy"></param>
Assets/Scripts/TowerDefense/UI/FreezeBreath.cs
@@ -1,5 +1,4 @@
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
@@ -8,6 +7,8 @@
using TowerDefense.Agents;
using Core.Health;
using TowerDefense.UI.HUD;
using TowerDefense.Towers;
using TowerDefense.Towers.Projectiles;
/**
 * 水精灵技能-冷冻气息控制脚本
@@ -83,7 +84,7 @@
        /// </summary>
        /// <param name="waveLineId">哪条兵线</param>
        /// <param name="damage">伤害值</param>
        public void ReleaseFreeze(int waveLineId, float damage, IAlignmentProvider alignmentProvider)
        public void ReleaseFreeze(int waveLineId, Tower tower, IAlignmentProvider alignmentProvider)
        {
            WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList();
            WaveLineAgentInsMgr waveLineAgentInsMgr = agentInsMgrs[waveLineId];
@@ -110,6 +111,8 @@
                if (agent.AgentType == SpawnAgentType.Normal)
                {
                    float damage = GetFinalDamage(tower, agent);
                    bool needFrost = BallisticAttack.HandleWaterFrost(201, agent, ref damage);
                    agent.addSpeedSlowRate(0.15f);
                    agent.PlayOnHitImmediately();
                    EndlessGameUI.instance.FloatSlowDownWord(agent.position);
@@ -117,6 +120,15 @@
                    if (agent.isDead)
                        ++deathCount;
                    else if (needFrost)
                    {
                        agent.IsFrost = true;
                        agent.FrostRemainTime = FrostTimeAdd.DefaultFrostTime;
                        FrostTimeAdd frostTimeAdd = (FrostTimeAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostTimeAdd);
                        if (frostTimeAdd != null)
                            agent.FrostRemainTime = frostTimeAdd.GetFrostTime(201);
                    }
                }
                else if (agent.AgentType == SpawnAgentType.BubbleBomb)
                    EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (agent as BubbleBombAgent).Id);
@@ -126,6 +138,30 @@
                EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount);
        }
        private float GetFinalDamage(Tower tower, Agent agent)
        {
            if (tower == null || agent == null) return 0;
            int elfId = 201;
            // 基础伤害 = elf_info 基础攻击力 * elf_upgrade 攻击比率 / 1000f
            float basicDamage = ElfInfoData.GetBasicDamage(elfId, tower.currentLevel);
            elf_info info = ElfInfoData.GetDataById(elfId);
            // 处理PVE无尽模式,buff增加的伤害
            if (EndlessBuffManager.instanceExists)
                basicDamage += EndlessBuffManager.instance.ProcessEndlessBuffAttack(basicDamage, elfId);
            bool crit = BallisticAttack.IsCrit(elfId);
            if (crit)
            {
                float basicCritDamageRate = info != null ? info.b_critdmg / 1000f : 0f;
                basicDamage *= 1 + basicCritDamageRate + BallisticAttack.GetCritDamageRate(elfId);
            }
            return basicDamage;
        }
        public void PlayFreezeEffect(int waveLineId)
        {
            WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList();
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -133,6 +133,11 @@
        public Image CritWord;
        /// <summary>
        /// 冰冻飘字
        /// </summary>
        public Image FrostWord;
        /// <summary>
        /// 购买塔防按钮上的Text.
        /// </summary>
        protected TextMeshProUGUI towerPriceText;
@@ -2052,6 +2057,18 @@
            obj.GetComponent<TextMoveDoTween>().FloatCritWord(screenPos.x, screenPos.y);
        }
        /// <summary>
        /// 冰冻飘字
        /// </summary>
        /// <param name="worldPos"></param>
        public void FloatFrostWord(Vector3 worldPos)
        {
            Vector3 screenPos = m_Camera.WorldToScreenPoint(worldPos);
            GameObject obj = Instantiate(FrostWord.gameObject);
            obj.GetComponent<Transform>().SetParent(GameObject.Find("MainUI/TextPanel").GetComponent<Transform>(), false);
            obj.GetComponent<TextMoveDoTween>().FloatFrostWord(screenPos.x, screenPos.y);
        }
        private void Start()
        {
            // 获取相应的放置区域。
Assets/Scripts/TowerDefense/UI/TextMoveDoTween.cs
@@ -12,6 +12,8 @@
    public Image CritWord;
    public Image FrostWord;
    private float scaleOffect = 1.5f;
    /// <summary>
@@ -92,6 +94,23 @@
        sequence.AppendCallback(() => { DestroyWord(); });
    }
    public void FloatFrostWord(float x, float y)
    {
        Vector3 pos = FrostWord.transform.position;
        pos.x = x;
        pos.y = y;
        pos.z = 0;
        FrostWord.transform.position = pos;
        Sequence sequence = DOTween.Sequence();
        FrostWord.color = new Color(1f, 1f, 1f, 0.8f);
        sequence.Join(DOTween.To(() => FrostWord.transform.position, (Vector3 v) => FrostWord.transform.position = v,
            new Vector3(FrostWord.transform.position.x + 70 + UnityEngine.Random.Range(-15, 15), FrostWord.transform.position.y + 70 + UnityEngine.Random.Range(-15, 15), FrostWord.transform.position.z), 0.2f));
        sequence.Append(DOTween.To(() => FrostWord.color, (Color v) => FrostWord.color = v, new Color(1f, 1f, 1f, 1f), 0.2f).SetEase(Ease.OutQuart));
        sequence.Append(DOTween.To(() => FrostWord.color, (Color v) => FrostWord.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).SetDelay(1f));
        sequence.AppendCallback(() => { DestroyWord(); });
    }
    private void WordMove(Graphic graphic, bool crit = false)
    {
        //获得Text的rectTransform,和颜色,并设置颜色微透明
Assets/StreamingAssets/Table/endless_buff.json
@@ -1 +1 @@
[["1","低级火灵之力",[2,1],[1,10,0],"-1","增加全体火精灵10%攻击力","6","8",10001,1,"99"],["2","低级水灵之力",[2,2],[1,12,0],-1,"增加全体水精灵12%攻击力",6,8,10002,1,"99"],["3","低级木灵之力",[2,3],[1,15,0],-1,"增加全体木精灵15%攻击力",6,8,10003,1,"99"],["4","攻击力增加",[1,0],[1,8,0],"-1","增加全体8%攻击力","0",5,"10005","1","99"],["5","意外收获",[0],[2,200,0],0,"增加200金币","0","5","10007","1","99"],["6","精灵魔盒",[0],[3,2,200],0,"随机获得一个2级精灵","2","4",10006,"1","10"],["7","暴击增加",[1,0],[5,50,0],-1,"全体暴击率+5%","0","3","10021","1","3"],["8","爆伤增加",[1,0],[6,80,0],-1,"全体暴击伤害+8%","0","3","10022","1","2"],["9","火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力",9,12,10001,2,"99"],["10","水灵之力",[2,2],[1,24,0],-1,"增加全体水精灵24%攻击力",9,12,10002,2,"99"],["11","木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力",9,12,10003,2,"99"],["12","精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,"10005",2,1],["13","飞来横财",[0],[2,400,0],0,"增加400金币","6","8","10008","2","99"],["14","超级精灵魔盒",[0],[3,3,400],0,"随机获得一个3级精灵","5","7",10006,"2","10"],["15","暴击增加",[1,0],[5,100,0],-1,"全体暴击率+10%","4","7","10021","2","3"],["16","爆伤增加",[1,0],[6,150,0],-1,"全体暴击伤害+15%","4","7","10022","2","2"],["17","攻速增加",[1,0],[4,0.1,0.5],"-1","全体攻速+10%","0","5","10023","2","1"],["18","弹夹扩容",[3,301],[7,2,0],-1,"玉米精灵高能子弹+1",6,99,"10016","2","1"],["19","爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%",6,99,"10026","2","1"],["20","高级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力",13,"16","10001",3,"99"],["21","高级水灵之力",[2,2],[1,35,0],-1,"增加全体水精灵35%攻击力",13,"16","10002",3,"99"],["22","高级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力",13,"16","10003",3,"99"],["23","特级火灵之力",[2,1],[1,40,0],-1,"增加全体火精灵40%攻击力","17","99","10001","4","0"],["24","特级水灵之力",[2,2],[1,50,0],-1,"增加全体水精灵50%攻击力","17","99","10002","4","0"],["25","特级木灵之力",[2,3],[1,60,0],-1,"增加全体木精灵60%攻击力","17","99","10003","4","0"],["26","狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],["27","攻速增加_水",[2,2],[4,0.25,0.5],-1,"水精灵攻速+25%","6",99,"10019",3,"2"],["28","攻速增加_火",[2,1],[4,0.3,0.5],-1,"火精灵攻速+30%",6,99,"10013",3,"2"],["29","攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%",6,99,"10017",3,"2"],["30","暴击_木",[3,301],[5,300,0],-1,"木系精灵暴击率+30%",6,99,"10015",3,"2"],["31","暴怒_木",[3,301],[6,350,0],-1,"木系精灵暴击伤害+35%",6,99,"10014",3,"2"],["32","暴击_火",[3,101],[5,150,0],-1,"火系精灵暴击率+15%",6,99,"10012",3,"3"],["33","暴怒_火",[3,101],[6,200,0],-1,"火系精灵暴击伤害+20%",6,99,"10011",3,"2"],["34","暴击_水",[3,201],[5,300,0],-1,"水系精灵暴击率+30%",6,99,"10019",3,"2"],["35","暴怒_水",[3,201],[6,350,0],-1,"水系精灵暴击伤害+35%",6,99,"10020",3,"2"],["36","超级弹夹",[3,301],[7,3,0],-1,"玉米精灵高能子弹+2","9",99,"10016","4","1"],["37","超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","9",99,"10026","4","1"],["38","技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",6,99,"10005",3,"4"],["39","快速蓄能",[3,301],[11,0.3,0.8],-1,"玉米精灵蓄力时间-30%","7",99,"10018","4","3"],["40","中大奖",[0],[2,800,0],0,"增加800金币","9",99,"10010","3","99"],["41","特级精灵魔盒",[0],[3,4,800],0,"随机获得一个4级精灵","11","99","10006","4","2"]]
[["1","低级火灵之力",[2,1],[1,10,0],"-1","增加全体火精灵10%攻击力","6","8",10001,1,"99"],["2","低级水灵之力",[2,2],[1,12,0],-1,"增加全体水精灵12%攻击力",6,8,10002,1,"99"],["3","低级木灵之力",[2,3],[1,15,0],-1,"增加全体木精灵15%攻击力",6,8,10003,1,"99"],["4","攻击力增加",[1,0],[1,8,0],"-1","增加全体8%攻击力","0",5,"10005","1","99"],["5","意外收获",[0],[2,200,0],0,"增加200金币","0","5","10007","1","99"],["6","精灵魔盒",[0],[3,2,200],0,"随机获得一个2级精灵","2","4",10006,"1","10"],["7","暴击增加",[1,0],[5,50,0],-1,"全体暴击率+5%","0","3","10021","1","3"],["8","爆伤增加",[1,0],[6,80,0],-1,"全体暴击伤害+8%","0","3","10022","1","2"],["9","火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力",9,12,10001,2,"99"],["10","水灵之力",[2,2],[1,24,0],-1,"增加全体水精灵24%攻击力",9,12,10002,2,"99"],["11","木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力",9,12,10003,2,"99"],["12","精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,"10005",2,1],["13","飞来横财",[0],[2,400,0],0,"增加400金币","6","8","10008","2","99"],["14","超级精灵魔盒",[0],[3,3,400],0,"随机获得一个3级精灵","5","7",10006,"2","10"],["15","暴击增加",[1,0],[5,100,0],-1,"全体暴击率+10%","4","7","10021","2","3"],["16","爆伤增加",[1,0],[6,150,0],-1,"全体暴击伤害+15%","4","7","10022","2","2"],["17","攻速增加",[1,0],[4,0.1,0.5],"-1","全体攻速+10%","0","5","10023","2","1"],["18","弹夹扩容",[3,301],[7,2,0],-1,"玉米精灵高能子弹+1",6,99,"10016","2","1"],["19","爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%",6,99,"10026","2","1"],["20","高级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力",13,"16","10001",3,"99"],["21","高级水灵之力",[2,2],[1,35,0],-1,"增加全体水精灵35%攻击力",13,"16","10002",3,"99"],["22","高级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力",13,"16","10003",3,"99"],["23","特级火灵之力",[2,1],[1,40,0],-1,"增加全体火精灵40%攻击力","17","99","10001","4","0"],["24","特级水灵之力",[2,2],[1,50,0],-1,"增加全体水精灵50%攻击力","17","99","10002","4","0"],["25","特级木灵之力",[2,3],[1,60,0],-1,"增加全体木精灵60%攻击力","17","99","10003","4","0"],["26","狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],["27","攻速增加_水",[2,2],[4,0.25,0.5],-1,"水精灵攻速+25%","6",99,"10019",3,"2"],["28","攻速增加_火",[2,1],[4,0.3,0.5],-1,"火精灵攻速+30%",6,99,"10013",3,"2"],["29","攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%",6,99,"10017",3,"2"],["30","暴击_木",[3,301],[5,300,0],-1,"木系精灵暴击率+30%",6,99,"10015",3,"2"],["31","暴怒_木",[3,301],[6,350,0],-1,"木系精灵暴击伤害+35%",6,99,"10014",3,"2"],["32","暴击_火",[3,101],[5,150,0],-1,"火系精灵暴击率+15%",6,99,"10012",3,"3"],["33","暴怒_火",[3,101],[6,200,0],-1,"火系精灵暴击伤害+20%",6,99,"10011",3,"2"],["34","暴击_水",[3,201],[5,300,0],-1,"水系精灵暴击率+30%",6,99,"10019",3,"2"],["35","暴怒_水",[3,201],[6,350,0],-1,"水系精灵暴击伤害+35%",6,99,"10020",3,"2"],["36","超级弹夹",[3,301],[7,3,0],-1,"玉米精灵高能子弹+2","9",99,"10016","4","1"],["37","超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","9",99,"10026","4","1"],["38","技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",6,99,"10005",3,"4"],["39","快速蓄能",[3,301],[11,0.3,0.8],-1,"玉米精灵蓄力时间-30%","7",99,"10018","4","3"],["40","中大奖",[0],[2,800,0],0,"增加800金币","9",99,"10010","3","99"],["41","特级精灵魔盒",[0],[3,4,800],0,"随机获得一个4级精灵","11","99","10006","4","2"],[42,"寒气_水",[3,201],[12,120,0],0,"水精灵任意攻击冰冻概率+12%",4,"99","10011",3,"3"],[43,"冻伤_水",[3,201],[13,300,0],0,"水精灵对冰冻的敌人伤害+30%",6,"99","10011",3,4],[44,"冰冻延时",[3,201],[14,1,0],0,"水精灵冰冻时间+1秒",7,"99","10011",3,3]]
Assets/UI/Frost.png
Assets/UI/Frost.png.meta
New file
@@ -0,0 +1,118 @@
fileFormatVersion: 2
guid: 074adf71b94a0ce44aaee741a68eca58
TextureImporter:
  internalIDToNameTable: []
  externalObjects: {}
  serializedVersion: 11
  mipmaps:
    mipMapMode: 0
    enableMipMap: 0
    sRGBTexture: 1
    linearTexture: 0
    fadeOut: 0
    borderMipMap: 0
    mipMapsPreserveCoverage: 0
    alphaTestReferenceValue: 0.5
    mipMapFadeDistanceStart: 1
    mipMapFadeDistanceEnd: 3
  bumpmap:
    convertToNormalMap: 0
    externalNormalMap: 0
    heightScale: 0.25
    normalMapFilter: 0
  isReadable: 0
  streamingMipmaps: 0
  streamingMipmapsPriority: 0
  vTOnly: 0
  grayScaleToAlpha: 0
  generateCubemap: 6
  cubemapConvolution: 0
  seamlessCubemap: 0
  textureFormat: 1
  maxTextureSize: 2048
  textureSettings:
    serializedVersion: 2
    filterMode: -1
    aniso: -1
    mipBias: -100
    wrapU: 1
    wrapV: 1
    wrapW: -1
  nPOTScale: 0
  lightmap: 0
  compressionQuality: 50
  spriteMode: 1
  spriteExtrude: 1
  spriteMeshType: 1
  alignment: 0
  spritePivot: {x: 0.5, y: 0.5}
  spritePixelsToUnits: 100
  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
  spriteGenerateFallbackPhysicsShape: 1
  alphaUsage: 1
  alphaIsTransparency: 1
  spriteTessellationDetail: -1
  textureType: 8
  textureShape: 1
  singleChannelComponent: 0
  maxTextureSizeSet: 0
  compressionQualitySet: 0
  textureFormatSet: 0
  ignorePngGamma: 0
  applyGammaDecoding: 0
  platformSettings:
  - serializedVersion: 3
    buildTarget: DefaultTexturePlatform
    maxTextureSize: 2048
    resizeAlgorithm: 0
    textureFormat: -1
    textureCompression: 1
    compressionQuality: 50
    crunchedCompression: 0
    allowsAlphaSplitting: 0
    overridden: 0
    androidETC2FallbackOverride: 0
    forceMaximumCompressionQuality_BC6H_BC7: 0
  - serializedVersion: 3
    buildTarget: Standalone
    maxTextureSize: 2048
    resizeAlgorithm: 0
    textureFormat: -1
    textureCompression: 1
    compressionQuality: 50
    crunchedCompression: 0
    allowsAlphaSplitting: 0
    overridden: 0
    androidETC2FallbackOverride: 0
    forceMaximumCompressionQuality_BC6H_BC7: 0
  - serializedVersion: 3
    buildTarget: Android
    maxTextureSize: 2048
    resizeAlgorithm: 0
    textureFormat: 4
    textureCompression: 1
    compressionQuality: 50
    crunchedCompression: 0
    allowsAlphaSplitting: 0
    overridden: 1
    androidETC2FallbackOverride: 0
    forceMaximumCompressionQuality_BC6H_BC7: 0
  spriteSheet:
    serializedVersion: 2
    sprites: []
    outline: []
    physicsShape: []
    bones: []
    spriteID: 5e97eb03825dee720800000000000000
    internalID: 0
    vertices: []
    indices:
    edges: []
    weights: []
    secondaryTextures: []
  spritePackingTag:
  pSDRemoveMatte: 0
  pSDShowRemoveMatteOption: 0
  userData:
  assetBundleName:
  assetBundleVariant: