using System.Collections.Generic;
using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using Common.Combat.FxAILogic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
using UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
///
/// 霜域新生(被动,只会生效一次) 凤凰在伤害还剩10%的时候会触发此技能,
/// 凤凰身体冰冻住并有一层寒气笼罩,期间凤凰不在受到任何伤害,并慢慢回血,
/// 直到恢复满,持续5秒左右吧,恢复满后凤凰所有灵根增加{0}。冰块爆开,
/// 生成一个冲击波,对当前场上所有的弹道照成当前强度的强度攻击(强度不够的弹道会被摧毁),生成{1}枚冰锥冲向玩家,对玩家照成{2}伤害
///
public class S9013 : SkillBasic
{
protected BuffBasic BuffBasic;
private bool isActiveFuHuo;
private int count;
private float _currTime;
protected long addHp;
protected override void ProActiveSkill()
{
count = 0;
isActiveFuHuo = false;
CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
}
private void HeroInjured(IEventData data)
{
if (count > 0)
{
return;
}
HeroInjuredEventData heroInjuredEventData = data as HeroInjuredEventData;
if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
{
float bl = CombatHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /
CombatHeroEntity.MaxCombatHeroInfo.hp.Value;
if (bl * 100 < effectValue[0])
{
addHp = CombatCalculateTool.Instance.GetVlaueRatioForLong(
CombatHeroEntity.MaxCombatHeroInfo.hp.Value, 10);
BuffInfo buffInfo = BuffInfo.GetBuffInfo(10151, -1, 1);
BuffBasic = CombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
isActiveFuHuo = true;
count++;
CombatHeroEntity.CombatHeroSkillControl.This().AddCommandSkill(this);
// SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos2");
}
}
}
protected override void ProUseSkill()
{
_finishTimeLineGroupName = "-1";
ActivationTimeLineData("9013");
}
protected override void ProCombatUpdate(float time)
{
if (!isActiveFuHuo)
{
return;
}
_currTime += time;
if (_currTime > 0.5f)
{
Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin(), addHp, AttType.Skill);
if (CombatHeroEntity.CurrCombatHeroInfo.hp.Value >= CombatHeroEntity.MaxCombatHeroInfo.hp.Value)
{
CombatHeroEntity.CloseLoopFx();
ActivationTimeLineData("9013_hit");
isActiveFuHuo = false;
float v = effectValue[1];
CombatHeroEntity.CurrCombatHeroInfo.Metal += v;
CombatHeroEntity.CurrCombatHeroInfo.Wood += v;
CombatHeroEntity.CurrCombatHeroInfo.Water += v;
CombatHeroEntity.CurrCombatHeroInfo.Fire += v;
CombatHeroEntity.CurrCombatHeroInfo.Earth += v;
S9014 s9014 = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic();
if (s9014 != null)
{
s9014.isActive = true;
}
ballisticsCount = (int)effectValue[2];
for (int i = 0; i < effectValue[2]; i++)
{
CombatHeroHitPoint combatHeroHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget
.GetThis()
.GetMainHotPoin();
BetterList currTarget = new BetterList();
currTarget.Add(combatHeroHitPoint);
// SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos" + (i + 2));
float x = CombatCalculateTool.Instance.GetOdd(-2, 2);
float y = CombatCalculateTool.Instance.GetOdd(1, 3);
float z = CombatCalculateTool.Instance.GetOdd(-1, 1);
Vector3 pos = CombatHeroEntity.GameObject.transform.TransformPoint(x, y, z);
ActivationTimeLineData("9013_suipian", currTarget: currTarget,
customizePos: new Vector3[] { pos }, indexCount: i);
}
List allFxAi =
CombatController.currActiveCombat.GameTimeLineParticleFactory.GetFxAILogicBasic(
!CombatHeroEntity
.IsEnemy);
for (int i = 0; i < allFxAi.Count; i++)
{
SkillFeaturesData mySkillFeaturesData = GetSkillFeaturesData();
FxParabolaBulletLogic fxParabolaBulletLogic = allFxAi[i] as FxParabolaBulletLogic;
fxParabolaBulletLogic.PengZhuang(mySkillFeaturesData, CombatHeroEntity);
}
SkillPlayFinish();
//完成
}
}
}
protected void ProDefaultTimeLineTrigger_BaoZa(string groupName, CombatHeroHitPoint targetEntity,
ITimelineFxLogic timelineFxLogic,
TriggerData triggerData, ISkillFeatures skillFeatures)
{
float harmBl = effectValue[3];
long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
harmBl);
HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
AttType.Skill, triggerData,
wuXingType, skillFeatures,
HarmType.Default);
}
}
}