using System.Linq;
using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero;
using UnityEngine;
using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
namespace GameLogic.Combat.Skill
{
///
/// 火烧
///
public class S30001 : SkillBasic
{
protected float _harm;
protected float _maxTime;
protected float _currTime;
// private BetterList _currTrigger = new BetterList();
protected TimeLineEventLogicGroupBasic loopGroupBasic;
protected TimeLineEventLogicGroupBasic currMyLoopGroupBasic;
protected bool _isUpdate;
protected float _currAllTime;
private BetterList _diffusionBuff = new BetterList();
private BetterList _triggerDiffusion = new BetterList();
protected override void ProInitSkillConfig()
{
_harm = SelfSkillConfig.effectValue[0];
_maxTime = SelfSkillConfig.effectValue[1];
}
protected override void ProInitSkill()
{
SkillBasic skillBasic = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic(30004);
if (skillBasic != null)
{
_maxTime += skillBasic.SelfSkillConfig.effectValue[0];
}
}
// protected override ILifetCycleHitPoint[] ProGetTineLineTargetEntity(
// TimeLineEventLogicBasic timeLineEventLogicBasic)
// {
// ILifetCycleHitPoint[] allHero = new ILifetCycleHitPoint[_enterAlertTarget.Count];
// for (int i = 0; i < _enterAlertTarget.Count; i++)
// {
// allHero[i] = _enterAlertTarget[i].GetMainHotPoin();
// }
//
// return allHero;
// }
protected override void ProUseSkill()
{
_finishTimeLineGroupName = "-1";
currMyLoopGroupBasic = ActivationTimeLineData("sk1");
_isUpdate = true;
_currTime = 0;
_currAllTime = 0;
_triggerDiffusion.Clear();
_diffusionBuff.Clear();
}
protected override void ProBreakSkill()
{
Finish();
}
protected void Finish()
{
currMyLoopGroupBasic?.BreakTimeLine(CombatHeroEntity);
if (loopGroupBasic != null)
{
loopGroupBasic.BreakTimeLine(CombatHeroEntity);
}
loopGroupBasic = null;
_isUpdate = false;
SpecialDotInfo specialDotInfo = CombatHeroEntity.GetMainHotPoin(true)
.GetSpecialDotInfo("sk1_trigger");
specialDotInfo.targetTran.gameObject.SetActive(false);
}
protected override void ProSkillPlayFinish()
{
Finish();
}
protected override void ProCombatUpdate(float time)
{
if (!_isUpdate)
{
return;
}
if (CombatHeroEntity.CombatAIBasic.currFocusTarget != null
&& !CombatHeroEntity.isDie)
{
Vector3 nextPos = CombatHeroEntity.CombatAIBasic.currFocusTarget.dotPos;
Vector3 p = nextPos - CombatHeroEntity.dotPos;
if (p.sqrMagnitude > 0.00001)
{
CombatHeroEntity.combatHeroGameObject.rotation = Quaternion.Lerp(
CombatHeroEntity.combatHeroGameObject.rotation, Quaternion.LookRotation(p.normalized), 0.02f);
}
}
_currTime += time;
_currAllTime += time;
if (_currTime > 0.2f)
{
_currTime -= 0.2f;
long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(
CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
_harm);
if (loopGroupBasic != null)
{
loopGroupBasic.BreakTimeLine(CombatHeroEntity);
}
// _currTrigger.Clear();
for (int i = 0; i < _enterAlertTarget.Count; i++)
{
ILifetCycleHitPoint targetEntity = _enterAlertTarget[i].GetMainHotPoin();
// _currTrigger.Add(targetEntity);
HarmReturnInfo harmReturnInfo = Harm(CombatHeroEntity, targetEntity as CombatHeroHitPoint,
v, AttType.Skill, triggerData);
DiffusionBuff(targetEntity);
}
for (int i = 0; i < _diffusionBuff.Count; i++)
{
DiffusionBuff(_diffusionBuff[i]);
}
// "sk1_hit"
// string hitName = "sk1_hit_lv4";
// loopGroupBasic = ActivationTimeLineData(hitName, _currTrigger);
}
if (_currAllTime > _maxTime)
{
SkillPlayFinish();
}
}
protected void DiffusionBuff(ILifetCycleHitPoint diffusion)
{
if (diffusion == null)
{
return;
}
CombatHeroEntity diffusionCombatHeroEntity = diffusion.IfLifeCycle as CombatHeroEntity;
if (diffusionCombatHeroEntity.isDie||!diffusionCombatHeroEntity.isActive)
{
_diffusionBuff.Remove(diffusion);
return;
}
if (!_diffusionBuff.Contains(diffusion))
{
BuffInfo buffInfo = BuffInfo.GetBuffInfo(100101, 0.5f, 1);
diffusionCombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
_diffusionBuff.Add(diffusion);
}
if (_triggerDiffusion.Contains(diffusion))
{
return;
}
_triggerDiffusion.Add(diffusion);
ILifetCycleHitPoint[] allHitPoints =
CombatController.currActiveCombat.CombatHeroController.GetHeroHitPoint(true);
for (int i = 0; i < allHitPoints.Length; i++)
{
ILifetCycleHitPoint cycleHitPoint = allHitPoints[i];
if (_diffusionBuff.Contains(cycleHitPoint))
{
continue;
}
if (Vector3.SqrMagnitude(cycleHitPoint.Position - diffusion.Position) < 4)
{
BuffInfo buffInfo = BuffInfo.GetBuffInfo(1001, -1, 1);
CombatHeroEntity combatHeroEntity = cycleHitPoint.IfLifeCycle as CombatHeroEntity;
combatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
_diffusionBuff.Add(diffusion);
}
}
}
}
}