10 files added
10 files modified
New file |
| | |
| | | %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} |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: f2e6cecab2d55754b97f3ecafba0569c |
| | | PrefabImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | 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, |
| | |
| | | |
| | | // 减少木属性强化子弹的蓄力时间 |
| | | DecreaseWoodChargeTime, |
| | | |
| | | // 增加水精灵冰冻小怪的概率,水精灵普通攻击和技能都有概率造成冰冻,小怪被冰冻后不能移动 |
| | | FrostProbabilityAdd, |
| | | |
| | | // 增加水精灵冰冻伤害,小怪被冰冻后有额外伤害 |
| | | FrostDamageAdd, |
| | | |
| | | // 增加水精灵冰冻时间 |
| | | FrostTimeAdd, |
| | | } |
| | | } |
| | |
| | | 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) |
| | | { |
| | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | /// </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> |
| | | /// 中毒粒子特效 |
| | |
| | | public ParticleSystem SlowDownParticle; |
| | | |
| | | /// <summary> |
| | | /// 冰冻特效 |
| | | /// </summary> |
| | | public ParticleSystem FrostParticle; |
| | | |
| | | /// <summary> |
| | | /// 被火技能攻击特效 |
| | | /// </summary> |
| | | public ParticleSystem FireSkillParticle; |
| | | |
| | | |
| | | /// <summary> |
| | | /// 降低移动速度. |
| | |
| | | protected virtual void SetAgentStopBuff(buffinfo binfo) |
| | | { |
| | | MoveStopTime = binfo.last / 1000; |
| | | |
| | | if (!isFrost) |
| | | { |
| | | isFrost = true; |
| | | |
| | | if (FrostParticle != null) |
| | | FrostParticle.Play(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | poisonAttid = 0; |
| | | poisonTimes = 0; |
| | | timeToPoisonHurt = 0; |
| | | isFrost = false; |
| | | IsFrost = false; |
| | | bInDeathAct = false; |
| | | ChangeState(AgentActionState.Move); |
| | | configuration.ClearShieldWall(); |
| | | |
| | | StopFrostParticle(); |
| | | |
| | | if (WoodAimCount > 0) |
| | | WoodAimCount = 0; |
| | |
| | | // 停止DoTween动画. |
| | | transform.DOKill(); |
| | | Destroy(gameObject); |
| | | } |
| | | |
| | | private void StopFrostParticle() |
| | | { |
| | | if (FrostParticle != null) |
| | | FrostParticle.Stop(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | 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: |
| | |
| | | /// <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; |
| | |
| | | { |
| | | UpdateAction(); |
| | | HandleShieldWall(); |
| | | HandleFrost(); |
| | | |
| | | // 处理死亡状态了,不必再移动: |
| | | if (bInDeathAct || !CanMove) return; |
| | |
| | | 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() |
| | | { |
| | | |
| | |
| | | new FireRateAdd(), |
| | | new SkillLevelUp(), |
| | | new DecreaseWoodChargeTime(), |
| | | new FrostProbabilityAdd(), |
| | | new FrostDamageAdd(), |
| | | new FrostTimeAdd() |
| | | }; |
| | | } |
| | | |
New file |
| | |
| | | /** |
| | | * 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; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 1989b6d565d1b4448a03c6d1990891d7 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | /** |
| | | * 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; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: d646272b865278e43940747659f5b397 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | /** |
| | | * 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; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 64857f832e43bdf43b6d7837092c3dd9 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | using ActionGameFramework.Health; |
| | | using System; |
| | | using TowerDefense.Agents; |
| | | using TowerDefense.UI.HUD; |
| | | using UnityEngine; |
| | | using System.Collections.Generic; |
| | | using KTGMGemClient; |
| | | |
| | | namespace TowerDefense.Towers.Projectiles |
| | |
| | | /// 判断本次伤害是否暴击 |
| | | /// </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) |
| | |
| | | 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); |
| | | |
| | |
| | | /// 获取暴击伤害增加比率 |
| | | /// </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> |
| | |
| | | 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; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | 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) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <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> |
| | |
| | | using UnityEngine.UI; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using DG.Tweening; |
| | |
| | | using TowerDefense.Agents; |
| | | using Core.Health; |
| | | using TowerDefense.UI.HUD; |
| | | using TowerDefense.Towers; |
| | | using TowerDefense.Towers.Projectiles; |
| | | |
| | | /** |
| | | * 水精灵技能-冷冻气息控制脚本 |
| | |
| | | /// </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]; |
| | |
| | | |
| | | 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); |
| | |
| | | |
| | | 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); |
| | |
| | | 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(); |
| | |
| | | public Image CritWord; |
| | | |
| | | /// <summary> |
| | | /// 冰冻飘字 |
| | | /// </summary> |
| | | public Image FrostWord; |
| | | |
| | | /// <summary> |
| | | /// 购买塔防按钮上的Text. |
| | | /// </summary> |
| | | protected TextMeshProUGUI towerPriceText; |
| | |
| | | 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() |
| | | { |
| | | // 获取相应的放置区域。 |
| | |
| | | |
| | | public Image CritWord; |
| | | |
| | | public Image FrostWord; |
| | | |
| | | private float scaleOffect = 1.5f; |
| | | |
| | | /// <summary> |
| | |
| | | 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,和颜色,并设置颜色微透明 |
| | |
| | | [["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]] |
New file |
| | |
| | | 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: |