技能优先级
This commit is contained in:
parent
be119b2738
commit
aaa3dd8ebb
@ -500,31 +500,70 @@ namespace RuntimeData
|
||||
// 全局通知调用
|
||||
public void OnTurnStart(MapData map)
|
||||
{
|
||||
if (IsFrozen()) return;
|
||||
OnSkillsTurnStart(map);
|
||||
}
|
||||
|
||||
public void OnAfterTurnStart(MapData map)
|
||||
{
|
||||
if (IsFrozen()) return;
|
||||
OnSkillsAfterTurnStart(map);
|
||||
}
|
||||
|
||||
public void OnTurnEnd(MapData map)
|
||||
{
|
||||
if (!IsFrozen()) OnSkillsTurnEnd(map);
|
||||
OnSkillsTurnEnd(map);
|
||||
AP = 0;
|
||||
CP = 0;
|
||||
MP = 0;
|
||||
}
|
||||
|
||||
protected override void OnSkillsTurnStart(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeTurnStart();
|
||||
if (skill.IsFinished())
|
||||
{
|
||||
skill.OnFinished(this, map);
|
||||
Skills.Remove(skill);
|
||||
continue;
|
||||
}
|
||||
skill.OnTurnStart(this, map);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnSkillsAfterTurnStart(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnAfterTurnStart(this, map);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnSkillsTurnEnd(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnTurnEnd(this, map);
|
||||
}
|
||||
}
|
||||
|
||||
//返回该unit的视野半径(考虑unit站在map的实机位置下的视野半径)
|
||||
public int GetSightRange(MapData map)
|
||||
{
|
||||
int v = 1;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
v += skill.GetExtraSight(this,map);
|
||||
}
|
||||
if (map.GetGridDataByUnitId(this.Id, out var grid) && grid.Feature == TerrainFeature.Mountain)
|
||||
@ -536,9 +575,10 @@ namespace RuntimeData
|
||||
public int GetSightRange(MapData map,GridData grid)
|
||||
{
|
||||
int v = 1;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
v += skill.GetExtraSight(this,map);
|
||||
}
|
||||
if (grid.Feature == TerrainFeature.Mountain)
|
||||
@ -549,9 +589,10 @@ namespace RuntimeData
|
||||
public int GetAttackRange(MapData mapData)
|
||||
{
|
||||
var attackRange = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
attackRange += skill.GetExtraAttackRange(mapData,this);
|
||||
}
|
||||
|
||||
@ -566,9 +607,10 @@ namespace RuntimeData
|
||||
//最终移动能力。 目前仅用于Kanako Sitting的情况(拥有移动力,但是无法移动)
|
||||
public int FinalMoveRange(MapData mapData)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (!skill.GetFinalMoveRange(this, out var finalMoveRange)) continue;
|
||||
return finalMoveRange;
|
||||
}
|
||||
@ -583,9 +625,10 @@ namespace RuntimeData
|
||||
if (!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(UnitFullType, out var info))
|
||||
return 0;
|
||||
var moveRange = info.MoveRange;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
moveRange += skill.GetExtraMoveRange(mapData,this);
|
||||
}
|
||||
|
||||
@ -596,9 +639,10 @@ namespace RuntimeData
|
||||
public bool CheckIsStaticExp(MapData map)
|
||||
{
|
||||
var isStaticExp = false;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitSelfExp(this, map)) isStaticExp = true;
|
||||
}
|
||||
|
||||
@ -624,9 +668,10 @@ namespace RuntimeData
|
||||
public float GetSpecialSkillBonus(MapData mapData, SkillType skillType)
|
||||
{
|
||||
var value = 1f;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
value *= skill.GetSpecialSkillBonus(mapData, this, skillType);
|
||||
}
|
||||
return value;
|
||||
@ -667,9 +712,10 @@ namespace RuntimeData
|
||||
public float GetAttackAdditionParam(MapData map, UnitData target = null)
|
||||
{
|
||||
var value = 0f;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
value += skill.GetAttackAdditionParam(map, this, target);
|
||||
}
|
||||
return value;
|
||||
@ -679,9 +725,10 @@ namespace RuntimeData
|
||||
public float GetAttackMultiplicationParam(MapData map, UnitData target = null)
|
||||
{
|
||||
var value = 1f;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
value *= skill.GetAttackMultiplicationParam(map, this, target);
|
||||
}
|
||||
return value;
|
||||
@ -706,9 +753,10 @@ namespace RuntimeData
|
||||
? info.MoveRange
|
||||
: 0;
|
||||
var add = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
add += skill.GetExtraMoveRange(mapData,this);
|
||||
}
|
||||
//var mul = GetDefenseMultiplicationParam(map);
|
||||
@ -732,9 +780,10 @@ namespace RuntimeData
|
||||
? info.AttackRange
|
||||
: 0;
|
||||
var add = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
add += skill.GetExtraAttackRange(mapData,this);
|
||||
}
|
||||
//var mul = GetDefenseMultiplicationParam(map);
|
||||
@ -766,9 +815,10 @@ namespace RuntimeData
|
||||
public float GetDefenseAdditionParam(MapData map, UnitData target = null)
|
||||
{
|
||||
var value = 0f;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
value += skill.GetDefenseAdditionParam(map, this, target);
|
||||
}
|
||||
return value;
|
||||
@ -781,9 +831,10 @@ namespace RuntimeData
|
||||
var debuffMult = 1f; // 减益效果(<1)累乘
|
||||
var isZero = 1f;
|
||||
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
var t = skill.GetDefenseMultiplicationParam(map, this, target);
|
||||
isZero *= t;
|
||||
|
||||
@ -814,9 +865,10 @@ namespace RuntimeData
|
||||
var debuffMult = 1f; // 减益效果(<1)累乘
|
||||
var isZero = 1f;
|
||||
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
var t = skill.GetDefenseMultiplicationParam(map, this, target);
|
||||
isZero *= t;
|
||||
|
||||
@ -862,9 +914,10 @@ namespace RuntimeData
|
||||
public float GetCriticalHitRate(MapData map)
|
||||
{
|
||||
var criticalHitRate = 0f;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
criticalHitRate += skill.GetCriticalHitRate(this, map);
|
||||
}
|
||||
return criticalHitRate;
|
||||
@ -877,9 +930,10 @@ namespace RuntimeData
|
||||
public int GetOfficerHealth()
|
||||
{
|
||||
int ret = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
ret += skill.GetOfficerHealth();
|
||||
}
|
||||
return ret;
|
||||
@ -888,9 +942,10 @@ namespace RuntimeData
|
||||
//判断当前是不是officer
|
||||
public bool IsOfficer()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsOfficer()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -898,9 +953,10 @@ namespace RuntimeData
|
||||
|
||||
public bool IsPrepareOfficer()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsPrepareOfficer()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -909,9 +965,10 @@ namespace RuntimeData
|
||||
|
||||
public bool IsCanBeOfficer()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanBeOfficer()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -920,9 +977,10 @@ namespace RuntimeData
|
||||
// 是否能移动到伟人身周
|
||||
public bool IsCanMoveGiantNearbyGrid(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanMoveGiantNearbyGrid(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -945,9 +1003,10 @@ namespace RuntimeData
|
||||
// 是否能移动无人城市
|
||||
public bool IsCanMoveNoUnitSelfCity(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanMoveToNoUnitSelfCity(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -956,9 +1015,10 @@ namespace RuntimeData
|
||||
// 是否可以死亡
|
||||
public bool CanBeKilled(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (!skill.IsCanBeKill(this, map)) return false;
|
||||
}
|
||||
return true;
|
||||
@ -967,9 +1027,10 @@ namespace RuntimeData
|
||||
// 是否可以被伤害结算
|
||||
public bool CanBeDamaged(MapData map, int dmg)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanBeDamaged(this, map, dmg)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -978,9 +1039,10 @@ namespace RuntimeData
|
||||
// 是否经验锁定
|
||||
public bool IsExpLock(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitSelfExp(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -995,9 +1057,10 @@ namespace RuntimeData
|
||||
if (terrainType == TerrainType.ShallowSea && (landType == LandType.WaterAndAshore || landType == LandType.WaterOnly || landType == LandType.LandAndWater || landType == LandType.Fly))
|
||||
return true;
|
||||
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanMoveOnTerrain(this, map, terrainType)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1008,9 +1071,10 @@ namespace RuntimeData
|
||||
{
|
||||
if (featureType != TerrainFeature.Mountain)
|
||||
return true;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanMoveOnFeature(this, map,featureType)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1019,9 +1083,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能攻击所有人
|
||||
public bool CanAttackAll(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.CanAttackAll(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1030,9 +1095,10 @@ namespace RuntimeData
|
||||
//返回该unit是否隐身
|
||||
public bool IsHideState(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsHideState()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1041,9 +1107,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能攻击
|
||||
public bool IsLimitSelfAttack(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitSelfAttack(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1052,9 +1119,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能移动
|
||||
public bool IsLimitSelfMove(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitSelfMove(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1063,9 +1131,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能攻击ground
|
||||
public bool IsCanAttackTargetGrid(MapData map, GridData target)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanAttackTargetGrid(map,this,target)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1074,9 +1143,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能攻击Ally
|
||||
public bool IsCanAttackAlly()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanAttackAlly()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1085,9 +1155,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能攻击ground
|
||||
public bool IsCanAttackTargetAlly(MapData map, UnitData target)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (!skill.IsCanAttackTargetAlly(map,this,target)) return false;
|
||||
}
|
||||
return true;
|
||||
@ -1096,9 +1167,10 @@ namespace RuntimeData
|
||||
//返回该unit是否能反击
|
||||
public bool IsLimitSelfCounterAttack(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitSelfCounterAttack(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1107,9 +1179,10 @@ namespace RuntimeData
|
||||
//返回目标 unit 是否能反击
|
||||
public bool IsLimitTargetCounterAttack(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitTargetCounterAttack(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1117,9 +1190,10 @@ namespace RuntimeData
|
||||
|
||||
public bool IsCanTransport()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsCanTransport()) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1128,9 +1202,10 @@ namespace RuntimeData
|
||||
// 移动是否会失败(并不限制移动)
|
||||
public bool IsActiveMoveFailed(MapData map, GridData target, MoveType moveType, List<Vector2Int> path = null)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.ActiveMoveFailed(this, target, map, moveType, path)) return true;
|
||||
}
|
||||
|
||||
@ -1140,10 +1215,11 @@ namespace RuntimeData
|
||||
// 移动后的变化
|
||||
public void BeforeMove(MapData map, GridData target, MoveType moveType, List<Vector2Int> path = null)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeMove(this, target, map, moveType, path);
|
||||
}
|
||||
}
|
||||
@ -1151,10 +1227,11 @@ namespace RuntimeData
|
||||
// 移动后
|
||||
public void OnMove(MapData map, GridData target, MoveType moveType, List<Vector2Int> path = null)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnMove(this, target, map,moveType, path);
|
||||
}
|
||||
//赋予格子特殊效果
|
||||
@ -1168,10 +1245,11 @@ namespace RuntimeData
|
||||
// 成为移动目标时
|
||||
public void OnBeMoveTarget(MapData map, UnitData origin, GridData target, MoveType moveType)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnBeMoveTarget(origin, this, target, map, moveType);
|
||||
}
|
||||
}
|
||||
@ -1179,10 +1257,11 @@ namespace RuntimeData
|
||||
// 伤害结算前
|
||||
public void BeforeDamagedSupportStage(MapData map, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeDamagedSupportStage(map, info);
|
||||
}
|
||||
}
|
||||
@ -1190,10 +1269,11 @@ namespace RuntimeData
|
||||
// 伤害结算前
|
||||
public void BeforeDamagedTransformStage(MapData map, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeDamagedTransformStage(map, info);
|
||||
}
|
||||
}
|
||||
@ -1202,10 +1282,11 @@ namespace RuntimeData
|
||||
public void BeforeActiveAttackOther(MapData mapData, UnitData origin, UnitData target,out int addDmg)
|
||||
{
|
||||
addDmg = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeActiveAttackOther(mapData, origin, target, out var tmpAddDmg);
|
||||
addDmg += tmpAddDmg;
|
||||
}
|
||||
@ -1214,10 +1295,11 @@ namespace RuntimeData
|
||||
// 对他人攻击后
|
||||
public void AfterActiveAttackOther(MapData mapData, UnitData origin, UnitData target)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.AfterActiveAttackOther(mapData, origin, target);
|
||||
}
|
||||
}
|
||||
@ -1225,10 +1307,11 @@ namespace RuntimeData
|
||||
// 受他人攻击后
|
||||
public void AfterActiveAttacked(MapData mapData, UnitData origin, UnitData target)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.AfterActiveAttacked(mapData, origin, target);
|
||||
}
|
||||
}
|
||||
@ -1236,10 +1319,11 @@ namespace RuntimeData
|
||||
// 对他人伤害结算前
|
||||
public void BeforeDamageOther(MapData map, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.BeforeDamageOther(map, info);
|
||||
}
|
||||
}
|
||||
@ -1247,10 +1331,11 @@ namespace RuntimeData
|
||||
// 伤害结算时
|
||||
public void OnDamaged(MapData mapData, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnDamaged(mapData, info);
|
||||
}
|
||||
}
|
||||
@ -1258,10 +1343,11 @@ namespace RuntimeData
|
||||
// 对他人伤害结算时
|
||||
public void OnDamageOther(MapData mapData, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnDamageOther(mapData, info);
|
||||
}
|
||||
}
|
||||
@ -1269,10 +1355,11 @@ namespace RuntimeData
|
||||
// 对他人伤害结算后
|
||||
public void AfterDamageOther(MapData mapData, SettlementInfo info)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.AfterDamageOther(mapData, info);
|
||||
}
|
||||
}
|
||||
@ -1280,10 +1367,11 @@ namespace RuntimeData
|
||||
// 对他人治疗结算时
|
||||
public void OnHealOther(MapData mapData, UnitData target,HealType healType)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnHealOther(mapData,this,target, healType);
|
||||
}
|
||||
//HeroTask(mapData)?.OnDamageOther(mapData, info);
|
||||
@ -1294,12 +1382,12 @@ namespace RuntimeData
|
||||
//获取抵达某格所需要的movecostinfo下限,目前仅用于momijiHUnter,也就是说moveinfo>该值才
|
||||
public float GetGridMoveFloor(MapData mapData, UnitData originUnit,GridData targetGrid)
|
||||
{
|
||||
|
||||
var isFrozen = IsFrozen();
|
||||
var copy = new List<SkillBase>(Skills);
|
||||
float ret = 0f;
|
||||
foreach (var skill in copy)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
ret = Mathf.Max(ret,skill.GetGridMoveFloor(mapData,originUnit,targetGrid));
|
||||
}
|
||||
return ret;
|
||||
@ -1316,9 +1404,10 @@ namespace RuntimeData
|
||||
public int GetKillCount()
|
||||
{
|
||||
int ret = 0;
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
ret += skill.GetKillCount();
|
||||
}
|
||||
return ret;
|
||||
@ -1336,9 +1425,10 @@ namespace RuntimeData
|
||||
if (UnitFullType.UnitType == UnitType.Giant) return true;
|
||||
if (CarryUnitFullType.UnitType == UnitType.Giant) return true;
|
||||
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsTreatAsHero(map, this,unit)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1347,9 +1437,10 @@ namespace RuntimeData
|
||||
// 判断是否只能在我方领土内移动
|
||||
public bool IsLimitMoveToSelfTerrain(MapData map)
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
if (skill.IsLimitMoveToSelfTerrain(this, map)) return true;
|
||||
}
|
||||
return false;
|
||||
@ -1375,9 +1466,10 @@ namespace RuntimeData
|
||||
public void SetFullAPCPMP_AllSkillRefresh()
|
||||
{
|
||||
SetFullAPCPMP();
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.OnRefresh();
|
||||
}
|
||||
}
|
||||
@ -1391,9 +1483,10 @@ namespace RuntimeData
|
||||
|
||||
public void SetOfficer()
|
||||
{
|
||||
var isFrozen = IsFrozen();
|
||||
foreach (var skill in Skills)
|
||||
{
|
||||
if (IsFrozen()) continue;
|
||||
if (isFrozen && skill.SkillPriority == SkillPriority.Normal) continue;
|
||||
skill.SetOfficer();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using RuntimeData;
|
||||
@ -6,6 +6,7 @@ using Logic.Multilingual;
|
||||
using Logic.Skill;
|
||||
using TH1_Core.Managers;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine.UI;
|
||||
|
||||
|
||||
@ -18,7 +19,15 @@ public enum SkillViewType
|
||||
Positive,
|
||||
Max
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum SkillPriority
|
||||
{
|
||||
Normal,
|
||||
Origin,
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
public struct SkillViewTypeColor
|
||||
{
|
||||
@ -164,9 +173,9 @@ public class SkillDataAssets : ScriptableObject
|
||||
return t.Color;
|
||||
return Color.black;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
public class SkillInfo
|
||||
{
|
||||
@ -182,8 +191,10 @@ public class SkillInfo
|
||||
//根据不同的unittype对象,呈现不同的图标&说明
|
||||
public bool HasShowList;
|
||||
public List<SkillInfoShowPack> SkillShowList;
|
||||
public SkillPriority skillPriority;
|
||||
}
|
||||
|
||||
|
||||
[Serializable]
|
||||
public class SkillInfoShowPack
|
||||
{
|
||||
|
||||
@ -562,6 +562,8 @@ namespace Logic.Skill
|
||||
//如果是叠层且0层的时候会不会自动消失
|
||||
[MemoryPackInclude]
|
||||
protected bool _autoDisappear;
|
||||
[MemoryPackInclude]
|
||||
protected SkillPriority _skillPriority;
|
||||
|
||||
public virtual int Level => _level;
|
||||
public bool HasLevel => IsLevelSkill;
|
||||
@ -571,6 +573,7 @@ namespace Logic.Skill
|
||||
public bool ShowSkillLevel => IsLevelSkill && !NoShow;
|
||||
|
||||
public bool ShowSkill => !IsLevelSkill || ShowSkillLevel;
|
||||
public SkillPriority SkillPriority => _skillPriority;
|
||||
|
||||
|
||||
[MemoryPackConstructor]
|
||||
@ -584,6 +587,11 @@ namespace Logic.Skill
|
||||
|
||||
public abstract SkillType GetSkillType();
|
||||
|
||||
public void SetSkillPriority(SkillPriority priority)
|
||||
{
|
||||
_skillPriority = priority;
|
||||
}
|
||||
|
||||
public virtual bool IsAllSkillBan()
|
||||
{
|
||||
return false;
|
||||
|
||||
@ -38,7 +38,12 @@ namespace Logic.Skill
|
||||
|
||||
if (_skillDict.TryGetValue(skillType, out var skillClass))
|
||||
{
|
||||
return Activator.CreateInstance(skillClass) as SkillBase;
|
||||
var skillObj = Activator.CreateInstance(skillClass) as SkillBase;
|
||||
if (skillObj != null && Table.Instance.SkillDataAssets.GetSkillInfo(skillType, out var skillInfo))
|
||||
{
|
||||
skillObj.SetSkillPriority(skillInfo.skillPriority);
|
||||
}
|
||||
return skillObj;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user