攻击改瞬时
This commit is contained in:
parent
214abcbac6
commit
cbf5d3c36e
@ -14,7 +14,7 @@ namespace Logic
|
||||
{
|
||||
void MoveTo(MapData mapData, UnitData unitData, GridData gridData, MoveType moveType);
|
||||
//unit[uid]移动到grid[pos]
|
||||
bool Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB, out float duration, bool isMoment=false);
|
||||
void Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB, out float duration, bool isMoment=false);
|
||||
//unit[A]攻击unit[B]
|
||||
void Upgrade(MapData mapData, UnitData unitData);
|
||||
//unit[uid]升级
|
||||
|
||||
@ -259,16 +259,16 @@ namespace Logic
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2, out float duration, bool isMoment=false)
|
||||
public void Attack(MapData mapData, UnitData unit1, UnitData unit2, out float duration, bool isMoment=false)
|
||||
{
|
||||
duration = 0;
|
||||
if (!mapData.GetPlayerDataByUnitId(unit1.Id, out var player1)) return false;
|
||||
if (!mapData.GetPlayerDataByUnitId(unit2.Id, out var player2)) return false;
|
||||
if (!mapData.GetCityDataByUnitId(unit1.Id, out var city1)) return false;
|
||||
if (!mapData.GetCityDataByUnitId(unit2.Id, out var city2)) return false;
|
||||
if (!mapData.GetGridDataByUnitId(unit1.Id, out var grid1)) return false;
|
||||
if (!mapData.GetGridDataByUnitId(unit2.Id, out var grid2)) return false;
|
||||
if (unit1.IsLimitSelfAttack(mapData)) return false;
|
||||
if (!mapData.GetPlayerDataByUnitId(unit1.Id, out var player1)) return;
|
||||
if (!mapData.GetPlayerDataByUnitId(unit2.Id, out var player2)) return;
|
||||
if (!mapData.GetCityDataByUnitId(unit1.Id, out var city1)) return;
|
||||
if (!mapData.GetCityDataByUnitId(unit2.Id, out var city2)) return;
|
||||
if (!mapData.GetGridDataByUnitId(unit1.Id, out var grid1)) return;
|
||||
if (!mapData.GetGridDataByUnitId(unit2.Id, out var grid2)) return;
|
||||
if (unit1.IsLimitSelfAttack(mapData)) return;
|
||||
|
||||
foreach (var skill in unit1.Skills) skill.BeforeSelfActiveAttack(mapData, unit1, unit2);
|
||||
// 计算攻击伤害
|
||||
@ -330,74 +330,23 @@ namespace Logic
|
||||
float counterAttackWait = attackBack + Table.Instance.AnimDataAssets.GetAttackTimeByAttackRange(unit2.GetAttackRange())
|
||||
+ Table.Instance.AnimDataAssets.BetweenAttackCounterAnimTime;
|
||||
//第一次攻击到对方后返回+对方反击打到我+对方返回的时刻
|
||||
float counterAttackBack = counterAttackWait +
|
||||
Table.Instance.AnimDataAssets.GetAttackReturnTimeByAttackRange(
|
||||
unit2.GetAttackRange());
|
||||
var attackReturnTime = Table.Instance.AnimDataAssets.GetAttackReturnTimeByAttackRange(unit2.GetAttackRange());
|
||||
float counterAttackBack = counterAttackWait + attackReturnTime;
|
||||
|
||||
if (TestKillUnit(mapData,unit1,unit2,dmg1)) //如果伤害直接够杀死对方
|
||||
var info1 = Main.UnitLogic.DamageSettlement(mapData, unit1, unit2, dmg1, DamageType.ActiveAttack);
|
||||
if (info1.IsKill)
|
||||
{
|
||||
|
||||
//攻击+移动:如果是近战且目标位置可以移动过去
|
||||
if (unit1.GetAttackRange() == 1 && CheckUnitCanMoveToGrid(mapData,player1,unit1,grid2))
|
||||
if (unit1.GetAttackRange() == 1 && CheckUnitCanMoveToGrid(mapData, player1, unit1, grid2))
|
||||
{
|
||||
unit1.AttackRenderMark = false;
|
||||
var fragment = new MoveKill();
|
||||
fragment.Map = mapData;
|
||||
fragment.Duration = Table.Instance.AnimDataAssets.MoveAnimTime;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg = dmg1;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
duration = fragment.Duration;
|
||||
if (isMoment) fragment.Excute();
|
||||
else TimelineManager.Instance.AddFragment(fragment);
|
||||
}
|
||||
else
|
||||
{
|
||||
var fragment = new NotMoveKill();
|
||||
fragment.Map = mapData;
|
||||
fragment.Duration = attackBack;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg = dmg1;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
fragment.AttackTime = attackWait;
|
||||
fragment.AttackBackTime = attackBack;
|
||||
duration = fragment.Duration;
|
||||
if (isMoment) fragment.Excute();
|
||||
else TimelineManager.Instance.AddFragment(fragment);
|
||||
Main.UnitLogic.MoveTo(mapData, unit1, grid2, MoveType.AttackMove);
|
||||
}
|
||||
}
|
||||
//如果杀不死对方
|
||||
else
|
||||
{
|
||||
var fragment = new AttackAndCounter();
|
||||
fragment.Map = mapData;
|
||||
fragment.Duration = counterAttackBack;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg1 = dmg1;
|
||||
fragment.Dmg2 = dmg2;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
fragment.CanCounter = canCounter;
|
||||
fragment.AttackAnimTime = Table.Instance.AnimDataAssets.AttackAnimTime;
|
||||
fragment.CounterAttackStart = counterAttackStart;
|
||||
fragment.CounterAttackWait = counterAttackWait;
|
||||
fragment.CounterAttackBack = counterAttackBack;
|
||||
duration = fragment.Duration;
|
||||
if (isMoment) fragment.Excute();
|
||||
else TimelineManager.Instance.AddFragment(fragment);
|
||||
if (unit1.Health == 0 && unit2.Health == 0) return;
|
||||
if (mapData.SameUnionByUnitId(unit1.Id, unit2.Id)) return;
|
||||
Main.UnitLogic.DamageSettlement(mapData, unit2, unit1, dmg2, DamageType.CounterAttack);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 伤害新结算方法,所有的掉血都要走此方法,不允许直接修改UnitData.Health
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user