技能优先级

This commit is contained in:
wuwenbo 2026-03-17 22:05:38 +08:00
parent be119b2738
commit aaa3dd8ebb
4 changed files with 181 additions and 64 deletions

View File

@ -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();
}
}

View File

@ -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
{

View File

@ -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;

View File

@ -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;