public void Defend(BaseUnit unit, bool isCustomMoveLegion = true) { if (unit == null) { return; } var castle = unit as TCastle; if (castle == null) { CLog.Error("Defend:castle == null)"); return; } if (IsInDefend()) { return; } if (!SelfUnit.IsSelf(castle)) { return; } if (castle.CastleStationedMgr.IsHaveDefender()) { return; } PreDefendCastle = DefendCastle; DefendCastle = castle; castle.CastleStationedMgr.OnBeDefend(SelfUnit); OnDefend(castle, isCustomMoveLegion); Callback_OnDefendChanged?.Invoke(PreDefendCastle, DefendCastle); }
public void MoveoutLegion() { var inBlockerUnits = AStarMgr.GetBlockerUnits(SelfUnit, false); foreach (var item in inBlockerUnits) { if (SelfUnit.IsSelf(item)) { continue; } if (item is TLegion legion) { legion.LegionStationedMgr.LeaveBlocker(SelfUnit); } } if (IsHaveDefender()) { Defender.LegionStationedMgr.LeaveDefend(true); } if (IsInSiege()) { Attackers.ForSafe(x => { x.LegionStationedMgr.LeaveSiege(true); }); } }