230 lines
8.3 KiB
C#
230 lines
8.3 KiB
C#
/*
|
||
* @Author: 白哉
|
||
* @Description:
|
||
* @Date: 2025年07月01日 星期二 14:07:05
|
||
* @Modify:
|
||
*/
|
||
|
||
|
||
using RuntimeData;
|
||
using TH1Renderer;
|
||
using UnityEngine;
|
||
|
||
namespace Logic.Timeline
|
||
{
|
||
public class MoveKill : FragmentBase
|
||
{
|
||
public MapData Map;
|
||
public UnitData Origin;
|
||
public UnitData Target;
|
||
public GridData OriginGrid;
|
||
public GridData TargetGrid;
|
||
public PlayerData OriginPlayer;
|
||
public PlayerData TargetPlayer;
|
||
public int Dmg;
|
||
|
||
public override void OnStart()
|
||
{
|
||
//立刻死亡并播放受伤动画,必须先处理死亡,再处理移动,不然gridToUnit的dict会出错
|
||
// 这里改成直接结算,包含了死亡,包含了经验增长和权利奇观记录
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||
//移动过去并更新视野
|
||
Main.UnitLogic.MoveTo(Map, Origin, TargetGrid, MoveType.AttackMove);
|
||
}
|
||
|
||
public override void OnFinished()
|
||
{
|
||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||
MapRenderer.Instance.ROGridMap[TargetGrid.Id].SetBounceAnim();
|
||
TargetGrid.VFXRenderMarkHurt = true;
|
||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||
t.Damage = Dmg;
|
||
TargetGrid.SetGridVFXRenderMark(t);
|
||
TargetGrid.VFXRenderMarkDie = true;
|
||
|
||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||
main.MapInteractionLogic.CheckContinuousAction(Map, OriginPlayer, Origin, TargetGrid);
|
||
}
|
||
|
||
public override void Excute()
|
||
{
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||
Main.UnitLogic.MoveTo(Map, Origin, TargetGrid, MoveType.AttackMove);
|
||
}
|
||
|
||
public override void OnUpdate(float progressTime)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
|
||
public class NotMoveKill : FragmentBase
|
||
{
|
||
public MapData Map;
|
||
public UnitData Origin;
|
||
public UnitData Target;
|
||
public GridData OriginGrid;
|
||
public GridData TargetGrid;
|
||
public PlayerData OriginPlayer;
|
||
public PlayerData TargetPlayer;
|
||
public int Dmg;
|
||
|
||
public float AttackTime;
|
||
public float AttackBackTime;
|
||
|
||
|
||
public override void OnStart()
|
||
{
|
||
|
||
}
|
||
|
||
public override void OnFinished()
|
||
{
|
||
|
||
}
|
||
|
||
public override void Excute()
|
||
{
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||
}
|
||
|
||
public override void OnUpdate(float progressTime)
|
||
{
|
||
if (Target == null)
|
||
return;
|
||
if (progressTime >= AttackTime)
|
||
{
|
||
AttackTime = float.MaxValue;
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||
Target.RenderMark = true;
|
||
TargetGrid.VFXRenderMarkHurt = true;
|
||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||
t.Damage = Dmg;
|
||
TargetGrid.SetGridVFXRenderMark(t);
|
||
TargetGrid.VFXRenderMarkDie = true;
|
||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||
MapRenderer.Instance.ROGridMap[TargetGrid.Id].SetBounceAnim();
|
||
}
|
||
|
||
if (progressTime >= AttackBackTime)
|
||
{
|
||
AttackBackTime = float.MaxValue;
|
||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||
if (OriginPlayer.Id != Map.PlayerMap.SelfPlayerId) return;
|
||
if (!MapRenderer.Instance.CheckUnitHasMoveAttackTarget(Origin.Id)) return;
|
||
|
||
Debug.Log("!!!!!");
|
||
main.MapInteractionLogic.OnTileClicked(Map, TargetGrid);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
public class AttackAndCounter : FragmentBase
|
||
{
|
||
public MapData Map;
|
||
public UnitData Origin;
|
||
public UnitData Target;
|
||
public GridData OriginGrid;
|
||
public GridData TargetGrid;
|
||
public PlayerData OriginPlayer;
|
||
public PlayerData TargetPlayer;
|
||
public int Dmg1;
|
||
public int Dmg2;
|
||
|
||
public bool CanCounter;
|
||
public float AttackAnimTime;
|
||
public float CounterAttackStart;
|
||
public float CounterAttackWait;
|
||
public float CounterAttackBack;
|
||
|
||
|
||
public override void OnStart()
|
||
{
|
||
|
||
}
|
||
|
||
public override void OnFinished()
|
||
{
|
||
|
||
}
|
||
|
||
public override void Excute()
|
||
{
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg1, DamageType.ActiveAttack);
|
||
Main.UnitLogic.DamageSettlement(Map, Target, Origin, Dmg2, DamageType.CounterAttack);
|
||
}
|
||
|
||
public override void OnUpdate(float progressTime)
|
||
{
|
||
if (Target == null)
|
||
return;
|
||
if (progressTime >= AttackAnimTime)
|
||
{
|
||
AttackAnimTime = float.MaxValue;
|
||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg1, DamageType.ActiveAttack);
|
||
Target.RenderMark = true;
|
||
Target.BounceRenderMark = true;
|
||
Target.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||
TargetGrid.VFXRenderMarkHurt = true;
|
||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||
t.Damage = Dmg1;
|
||
TargetGrid.SetGridVFXRenderMark(t);
|
||
}
|
||
|
||
if (CanCounter && progressTime >= CounterAttackStart)
|
||
{
|
||
CounterAttackStart = float.MaxValue;
|
||
Target.AttackRenderMark = CanCounter;
|
||
Target.AttackRenderMarkAttackAnimType = Target.GetAttackRange() switch
|
||
{
|
||
1 => AttackAnimType.Melee, 2 => AttackAnimType.Arrow, 3 => AttackAnimType.Bomb,
|
||
_ => AttackAnimType.None
|
||
};
|
||
Target.AttackRenderMarkTargetPos = Table.Instance.GridToWorld(OriginGrid,"isUnit");
|
||
Target.AttackRenderMarkNeedBack = true;
|
||
}
|
||
|
||
if (CanCounter && progressTime >= CounterAttackWait)
|
||
{
|
||
CounterAttackWait = float.MaxValue;
|
||
var settlement = Main.UnitLogic.DamageSettlement(Map, Target, Origin, Dmg2, DamageType.CounterAttack);
|
||
|
||
if (settlement.IsKill)
|
||
{
|
||
OriginGrid.VFXRenderMarkHurt = true;
|
||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||
t.Damage = Dmg2;
|
||
OriginGrid.SetGridVFXRenderMark(t);
|
||
OriginGrid.VFXRenderMarkFog = true;
|
||
OriginGrid.VFXRenderMarkDie = true;
|
||
}
|
||
else
|
||
{
|
||
Origin.RenderMark = true;
|
||
Origin.BounceRenderMark = true;
|
||
Origin.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||
OriginGrid.VFXRenderMarkHurt = true;
|
||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||
t.Damage = Dmg2;
|
||
OriginGrid.SetGridVFXRenderMark(t);
|
||
OriginGrid.VFXRenderMarkFog = true;
|
||
}
|
||
}
|
||
|
||
if (progressTime >= CounterAttackBack)
|
||
{
|
||
CounterAttackBack = float.MaxValue;
|
||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||
if (OriginPlayer.Id == Map.PlayerMap.SelfPlayerId && Origin.Alive &&
|
||
MapRenderer.Instance.CheckUnitHasMoveAttackTarget(Origin.Id))
|
||
{
|
||
main.MapInteractionLogic.OnTileClicked(Map, OriginGrid);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |