private static void CheckPoint(GameArea Area, List <Point> BlackAngles, Point point, Faction faction) { TerrainDetail terrainDetailByPosition = Session.Current.Scenario.GetTerrainDetailByPosition(point); if (terrainDetailByPosition != null) { if (terrainDetailByPosition.ViewThrough) { if (faction != null) { Architecture architectureByPosition = Session.Current.Scenario.GetArchitectureByPosition(point); if (!(architectureByPosition == null || architectureByPosition.Endurance <= 0 || faction.IsFriendlyWithoutTruce(architectureByPosition.BelongedFaction))) { BlackAngles.Add(point); return; } } if (!IsInBlackAngle(Area.Centre, BlackAngles, point)) { Area.AddPoint(point); } } else { BlackAngles.Add(point); } } }
private static void CheckPoint(GameArea Area, List<Point> BlackAngles, Point point, GameScenario Scenario, Faction faction) { TerrainDetail terrainDetailByPosition = Scenario.GetTerrainDetailByPosition(point); if (terrainDetailByPosition != null) { if (terrainDetailByPosition.ViewThrough) { if (faction != null) { Architecture architectureByPosition = Scenario.GetArchitectureByPosition(point); if (!(architectureByPosition == null || architectureByPosition.Endurance <= 0 || faction.IsFriendlyWithoutTruce(architectureByPosition.BelongedFaction))) { BlackAngles.Add(point); return; } } if (!IsInBlackAngle(Area.Centre, BlackAngles, point)) { Area.AddPoint(point); } } else { BlackAngles.Add(point); } } }
public static GameArea GetArea(Point Centre, int Radius, bool Oblique) { GameArea area = new GameArea(); List<float> list = new List<float>(); area.Centre = Centre; for (int i = -Radius; i <= Radius; i++) { for (int j = -Radius; j <= Radius; j++) { if (Oblique) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } else if ((Math.Abs(i) + Math.Abs(j)) <= Radius) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } } return area; }
public static GameArea GetArea(Point Centre, int Radius, bool Oblique) { GameArea area = new GameArea(); List <float> list = new List <float>(); area.Centre = Centre; for (int i = -Radius; i <= Radius; i++) { for (int j = -Radius; j <= Radius; j++) { if (Oblique) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } else if ((Math.Abs(i) + Math.Abs(j)) <= Radius) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } } return(area); }
public static GameArea GetArea(Point Centre, int Radius, bool Oblique) { GameArea area = new GameArea(); List <float> list = new List <float>(); area.Centre = Centre; if (Oblique) { for (int i = Centre.X - Radius; i <= Centre.X + Radius; i++) { for (int j = Centre.Y - Radius; j <= Centre.Y + Radius; j++) { area.AddPoint(new Point(i, j)); } } } else { for (int i = -Radius; i <= Radius; i++) { if (i <= 0) { for (int j = -Radius - i; j <= i + Radius; j++) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } else { for (int j = i - Radius; j <= Radius - i; j++) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } } } return(area); }
public GameArea GetDayArea(Troop troop, int Days) { GameArea area = new GameArea(); openDictionary.Clear(); openList.Clear(); closeDictionary.Clear(); closeList.Clear(); GameSquare square = new GameSquare(); square.Position = troop.Position; this.AddToCloseList(square); int num = troop.Movability * Days; int movabilityLeft = troop.MovabilityLeft; //int num3 = troop.RealMovability * Days; troop.MovabilityLeft = num; MilitaryKind kind = troop.Army.Kind; do { CheckAdjacentSquares(square, troop.Position, false, kind); if (this.openList.Count == 0) { break; } square = this.AddToCloseList(); if (square == null) { break; } if (num >= square.G) { if (!troop.Scenario.PositionIsTroop(square.Position)) { area.AddPoint(square.Position); } } else { break; } if (closeList.Count > 2500 || closeDictionary.Count > 2500) break; } while (true); troop.MovabilityLeft = movabilityLeft; saveLastPath(); openDictionary.Clear(); openList.Clear(); closeDictionary.Clear(); closeList.Clear(); return area; }
public static GameArea GetArea(Point Centre, int Radius, bool Oblique) { GameArea area = new GameArea(); List<float> list = new List<float>(); area.Centre = Centre; if (Oblique) { for (int i = Centre.X - Radius; i <= Centre.X + Radius; i++) { for (int j = Centre.Y - Radius; j <= Centre.Y + Radius; j++) { area.AddPoint(new Point(i, j)); } } } else { for (int i = -Radius; i <= Radius; i++) { if (i <= 0) { for (int j = -Radius - i; j <= i + Radius; j++) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } else { for (int j = i - Radius; j <= Radius - i; j++) { area.AddPoint(new Point(Centre.X + i, Centre.Y + j)); } } } } return area; }
public GameArea GetSpyArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if ((architecture.BelongedFaction != null) && (architecture.BelongedFaction != this.BelongedFaction)) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetRealTroopEnterableArea(Troop troop) { GameArea area = new GameArea(); foreach (Point point in this.GetTroopEnterableArea(troop).Area) { //if (!base.Scenario.PositionIsTroop(point)) //{ area.AddPoint(point); //} } return area; }
public GameArea GetJailBreakArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if (architecture.BelongedFaction != null && !this.IsFriendly(architecture.BelongedFaction) && architecture.HasFactionCaptive(this.BelongedFaction)) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetGossipArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if ((((architecture.BelongedFaction != null) && !this.IsFriendly(architecture.BelongedFaction)) && architecture.HasPerson()) && this.BelongedFaction.IsArchitectureKnown(architecture)) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetConvincePersonArchitectureArea() { GameArea area = new GameArea(); //Label_0121: foreach (Architecture architecture in base.Scenario.Architectures) { if (architecture.BelongedFaction == this.BelongedFaction) { if (!architecture.HasCaptive() && !architecture.HasNoFactionPerson()) { //goto Label_0121; continue; } foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } else { if ((!architecture.HasPerson() && !architecture.HasNoFactionPerson()) || !this.BelongedFaction.IsArchitectureKnown(architecture)) { continue; } foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetAllContactArea() { GameArea area = new GameArea(); foreach (Point point in this.ContactArea.Area) { area.AddPoint(point); } foreach (Point point in this.ArchitectureArea.Area) { area.AddPoint(point); } return area; }
public GameArea GetAIRoutewayEndPoints(Architecture a, bool nowater) { GameArea area = new GameArea(); if (!this.IsFriendly(a.BelongedFaction)) { foreach (Point point in this.ContactArea.Area) { if (a.IsRoutewayPossible(point) && (!nowater || (base.Scenario.GetTerrainKindByPosition(point) != TerrainKind.水域))) { area.AddPoint(point); } } } if (area.Count == 0) { foreach (Point point in this.GetRoutewayStartArea().Area) { if (a.IsRoutewayPossible(point) && (!nowater || (base.Scenario.GetTerrainKindByPosition(point) != TerrainKind.水域))) { area.AddPoint(point); } } } if (area.Count == 0) { foreach (Point point in this.LongViewArea.Area) { if (a.IsRoutewayPossible(point)) { area.AddPoint(point); } } } return area; }
private GameArea GetLandTroopMovableArea() { GameArea a = new GameArea(); foreach (Point i in this.ArchitectureArea.Area) { if (base.Scenario.GetTerrainDetailByPositionNoCheck(i).ID != 6) { a.AddPoint(i); } else { TerrainKind t1 = base.Scenario.GetTerrainKindByPosition(new Point(i.X - 1, i.Y)); TerrainKind t2 = base.Scenario.GetTerrainKindByPosition(new Point(i.X + 1, i.Y)); TerrainKind t3 = base.Scenario.GetTerrainKindByPosition(new Point(i.X, i.Y - 1)); TerrainKind t4 = base.Scenario.GetTerrainKindByPosition(new Point(i.X, i.Y + 1)); if (t1 != TerrainKind.水域 && t1 != TerrainKind.无) { a.AddPoint(i); } else if (t2 != TerrainKind.水域 && t2 != TerrainKind.无) { a.AddPoint(i); } else if (t3 != TerrainKind.水域 && t3 != TerrainKind.无) { a.AddPoint(i); } else if (t4 != TerrainKind.水域 && t4 != TerrainKind.无) { a.AddPoint(i); } } } return a; }
public GameArea GetContactArea(bool oblique, GameScenario scen, bool waterOnly, bool landOnly) { GameArea area = new GameArea(); Dictionary<Point, object> dictionary = new Dictionary<Point, object>(); foreach (Point point2 in this.Area) { bool ok = true; if (waterOnly && scen.GetTerrainDetailByPositionNoCheck(point2).ID != 6) { ok = false; } if (landOnly && scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6) { ok = false; } if (ok) { dictionary.Add(point2, null); } } foreach (Point point2 in this.Area) { Point key = new Point(point2.X - 1, point2.Y); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } if (oblique) { key = new Point(point2.X - 1, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X - 1, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } } } return area; }
public GameArea GetAllAvailableArea(bool Square) { GameArea area = new GameArea(); foreach (Point point in this.ContactArea.Area) { if (base.Scenario.IsPositionEmpty(point)) { area.AddPoint(point); } } foreach (Point point in this.ArchitectureArea.Area) { if (!base.Scenario.PositionIsTroop(point)) { area.AddPoint(point); } } return area; }
public static GameArea GetViewArea(Point Centre, int Radius, bool Oblique, GameScenario Scenario, Faction faction) { GameArea area = new GameArea(); List <Point> blackAngles = new List <Point>(); area.Centre = Centre; if (Radius < 0) { return(area); } if (Radius == 0) { area.AddPoint(Centre); return(area); } for (int i = 0; i <= Radius; i++) { int num2; if (i == 0) { num2 = 0; while (num2 <= Radius) { if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X, Centre.Y + num2), Scenario, faction); CheckPoint(area, blackAngles, new Point(Centre.X, Centre.Y - num2), Scenario, faction); } else { area.AddPoint(Centre); } num2++; } } else { int num3 = i; if (Oblique) { num3 = 0; } num2 = 0; while (num2 <= (Radius - num3)) { CheckPoint(area, blackAngles, new Point(Centre.X + i, Centre.Y + num2), Scenario, faction); if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X + i, Centre.Y - num2), Scenario, faction); } num2++; } for (num2 = 0; num2 <= (Radius - num3); num2++) { CheckPoint(area, blackAngles, new Point(Centre.X - i, Centre.Y + num2), Scenario, faction); if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X - i, Centre.Y - num2), Scenario, faction); } } } } return(area); }
public GameArea GetContactArea(bool oblique, GameScenario scen, bool waterOnly, bool landOnly) { GameArea area = new GameArea(); Dictionary <Point, object> dictionary = new Dictionary <Point, object>(); foreach (Point point2 in this.Area) { bool ok = true; if (waterOnly && scen.GetTerrainDetailByPositionNoCheck(point2).ID != 6) { ok = false; } if (landOnly && scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6) { ok = false; } if (ok) { dictionary.Add(point2, null); } } foreach (Point point2 in this.Area) { Point key = new Point(point2.X - 1, point2.Y); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } if (oblique) { key = new Point(point2.X - 1, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y - 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X - 1, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } key = new Point(point2.X + 1, point2.Y + 1); if (!dictionary.ContainsKey(key) && (!waterOnly || scen.GetTerrainDetailByPositionNoCheck(point2).ID == 6)) { dictionary.Add(key, null); area.AddPoint(key); } } } return(area); }
private int RoutewayPathBuilder_OnGetCost(Point position, out float consumptionRate) { GameArea singleton = new GameArea(); singleton.AddPoint(position); singleton.Centre = position; consumptionRate = 0f; if (!base.Scenario.PositionOutOfRange(position)) { int dist = (int)Math.Ceiling(Math.Min(Math.Min(base.Scenario.GetDistance(singleton, this.pathFinder.startingArchitecture.ArchitectureArea), base.Scenario.GetDistance(singleton, this.pathFinder.targetArchitecture.ArchitectureArea)), 20)); if (dist > 4) { for (int i = -dist; i <= dist; ++i) { for (int j = Math.Abs(i) - dist; j <= dist - Math.Abs(i); ++j) { Point loc = new Point(position.X + i, position.Y + j); Architecture landedArch = base.Scenario.GetArchitectureByPosition(loc); if (landedArch != null && landedArch != this.pathFinder.startingArchitecture && landedArch != this.pathFinder.targetArchitecture) { return 1000; } } } } TerrainDetail terrainDetailByPositionNoCheck = base.Scenario.GetTerrainDetailByPositionNoCheck(position); if (terrainDetailByPositionNoCheck != null) { Architecture landedArch = base.Scenario.GetArchitectureByPosition(position); if (landedArch != null && landedArch != this.pathFinder.startingArchitecture && landedArch != this.pathFinder.targetArchitecture) { return 1000; } else if (landedArch == null) { if (this.pathFinder.MultipleWaterCost && !base.Scenario.IsWaterPositionRoutewayable(position)) { return 1000; } if (this.pathFinder.MustUseWater && (terrainDetailByPositionNoCheck.ID != 6)) { return 1000; } } return 1; } } return 0x3e8; }
public static GameArea GetViewArea(Point Centre, int Radius, bool Oblique, GameScenario Scenario, Faction faction) { GameArea area = new GameArea(); List<Point> blackAngles = new List<Point>(); area.Centre = Centre; if (Radius < 0) return area; if (Radius == 0) { area.AddPoint(Centre); return area; } for (int i = 0; i <= Radius; i++) { int num2; if (i == 0) { num2 = 0; while (num2 <= Radius) { if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X, Centre.Y + num2), Scenario, faction); CheckPoint(area, blackAngles, new Point(Centre.X, Centre.Y - num2), Scenario, faction); } else { area.AddPoint(Centre); } num2++; } } else { int num3 = i; if (Oblique) { num3 = 0; } num2 = 0; while (num2 <= (Radius - num3)) { CheckPoint(area, blackAngles, new Point(Centre.X + i, Centre.Y + num2), Scenario, faction); if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X + i, Centre.Y - num2), Scenario, faction); } num2++; } for (num2 = 0; num2 <= (Radius - num3); num2++) { CheckPoint(area, blackAngles, new Point(Centre.X - i, Centre.Y + num2), Scenario, faction); if (num2 != 0) { CheckPoint(area, blackAngles, new Point(Centre.X - i, Centre.Y - num2), Scenario, faction); } } } } return area; }
public GameArea GetAllAvailableArea(bool Square) { GameArea area = new GameArea(); foreach (Point point in this.ContactArea.Area) { if (base.Scenario.IsPositionEmpty(point) && base.Scenario.GetTerrainDetailByPosition(point) != null && base.Scenario.GetTerrainDetailByPosition(point).RoutewayConsumptionRate < 1) { area.AddPoint(point); } } foreach (Point point in this.ArchitectureArea.Area) { if (!base.Scenario.PositionIsTroop(point) && base.Scenario.GetTerrainDetailByPosition(point) != null && base.Scenario.GetTerrainDetailByPosition(point).RoutewayConsumptionRate < 1) { area.AddPoint(point); } } return area; }
private bool BuildThreeTierPath(MilitaryKind kind) { bool path = false; if (!this.HasPath) { if (this.BelongedFaction != null && !base.Scenario.IsPlayer(this.BelongedFaction) && this.TargetArchitecture == null && !this.IsViewingWillArchitecture() && this.TargetTroop == null && this.BelongedLegion != null && this.BelongedLegion.Kind == LegionKind.Offensive) { MilitaryKind trueKind = this.Army.KindID == 28 ? this.Army.RealMilitaryKind : this.Army.Kind; List<Point> refPath = null; bool aapUsable = this.StartingArchitecture.GetAllContactArea().Area.Contains(this.Position); if (aapUsable && base.Scenario.pathCache.ContainsKey(new PathCacheKey(this.StartingArchitecture, this.WillArchitecture, trueKind))) { refPath = base.Scenario.pathCache[new PathCacheKey(this.StartingArchitecture, this.WillArchitecture, trueKind)]; } if (refPath != null && refPath.Count > 0 && aapUsable) { path = ConstructTruePath(refPath, kind); } else if (refPath == null && (this.StartingArchitecture != this.WillArchitecture || !aapUsable)) { Point? p1; Point? p2; // 出发建筑的点应该包括建筑邻近的点 GameArea startingArea = new GameArea(); foreach (Point p in this.StartingArchitecture.ContactArea.Area) startingArea.AddPoint(p); foreach (Point p in this.StartingArchitecture.ArchitectureArea.Area) startingArea.AddPoint(p); startingArea.Centre = this.StartingArchitecture.ArchitectureArea.Centre; GameArea willArea = new GameArea(); foreach (Point p in this.WillArchitecture.ArchitectureArea.Area) willArea.AddPoint(p); willArea.Centre = this.WillArchitecture.ArchitectureArea.Centre; base.Scenario.GetClosestPointsBetweenTwoAreas(startingArea, willArea, out p1, out p2); if (p1.HasValue && p2.HasValue) { bool ftPath = this.pathFinder.GetFirstTierPath(p1.Value, p2.Value, kind); if (ftPath) { if (this.FirstTierPath != null && this.FirstTierPath.Count > 0) { // 去除多余的点 int i = 0; while (startingArea.HasPoint(this.FirstTierPath[i])) { i++; if (i >= this.FirstTierPath.Count) { i = this.FirstTierPath.Count - 1; break; } } this.FirstTierPath.RemoveRange(0, i); i = this.FirstTierPath.Count - 1; while (willArea.HasPoint(this.FirstTierPath[i])) { i--; if (i < 0) { i = 0; break; } } this.FirstTierPath.RemoveRange(i + 1, this.FirstTierPath.Count - i - 1); if (aapUsable) { base.Scenario.pathCache[new PathCacheKey(this.StartingArchitecture, this.WillArchitecture, this.Army.Kind)] = this.FirstTierPath; } path = ConstructTruePath(this.FirstTierPath, kind); } else { if (aapUsable) { base.Scenario.pathCache[new PathCacheKey(this.StartingArchitecture, this.WillArchitecture, this.Army.Kind)] = new List<Point>(); } } } } } else if (refPath == null || (refPath.Count == 0 && this.Army.Kind.Type != MilitaryType.水军)) { this.StartingArchitecture.actuallyUnreachableArch.Add(this.WillArchitecture); this.GoBack(); return false; } } if (!path) { this.EnableOneAdaptablility = true; bool flag2 = false; if ((this.BelongedFaction != null) && !GameObject.Chance(0x21)) { flag2 = true; foreach (Troop troop in this.BelongedFaction.Troops) { if (!((troop == this) || troop.Destroyed)) { base.Scenario.SetPenalizedMapDataByPosition(troop.Position, this.RealMovability); } } } path = this.pathFinder.GetPath(this.Position, this.Destination, kind); if ((this.BelongedFaction != null) && flag2) { foreach (Troop troop in this.BelongedFaction.Troops) { if (!((troop == this) || troop.Destroyed)) { base.Scenario.ClearPenalizedMapDataByPosition(troop.Position); } } } this.EnableOneAdaptablility = false; if ((this.ThirdTierPath != null) && (this.SecondTierPath == null)) { if (!path) { path = this.pathFinder.GetSecondTierPath(this.Position, this.GetSecondTierDestinationFromThirdTier(kind), kind); } else { this.pathFinder.GetSecondTierPath(this.Position, this.GetSecondTierDestinationFromThirdTier(kind), kind); } } if ((this.SecondTierPath != null) && (this.FirstTierPath == null)) { if (!path) { path = this.pathFinder.GetFirstTierPath(this.Position, this.GetFirstTierDestinationFromSecondTier(kind), kind); } else { this.pathFinder.GetFirstTierPath(this.Position, this.GetFirstTierDestinationFromSecondTier(kind), kind); } } } if (this.FirstTierPath != null) { if (this.FirstTierPath.Count > 1) { this.HasPath = true; } cannotFindRouteRounds = 0; return path; } if (this.Status != TroopStatus.一般) { cannotFindRouteRounds = 0; return path; } if (((((this.BelongedFaction != null) && (this.BelongedLegion != null)) && ((this.BelongedLegion.Kind == LegionKind.Offensive) && (this.StartingArchitecture != null))) && (this.StartingArchitecture.BelongedFaction == this.BelongedFaction)) && this.StartingArchitecture.ViewTroop(this) && (this.BelongedLegion.Troops.Count == 1)) { Routeway existingRouteway = this.StartingArchitecture.GetExistingRouteway(this.BelongedLegion.WillArchitecture); if (existingRouteway != null) { base.Scenario.RemoveRouteway(existingRouteway); } Point key = new Point(this.StartingArchitecture.ID, this.BelongedLegion.WillArchitecture.ID); if (!this.BelongedFaction.ClosedRouteways.ContainsKey(key)) { this.BelongedFaction.ClosedRouteways.Add(key, null); } } if (this.CanEnter() && this.Army.Kind.Movability > 1) { if (base.Scenario.IsPlayer(this.BelongedFaction) && this.TargetArchitecture != null) { if (this.mingling == "入城" && this.Position == this.minglingweizhi) { this.Enter(this.TargetArchitecture); } } else { this.Enter(); } cannotFindRouteRounds = 0; return path; } if (cannotFindRouteRounds > 5) { this.GoBack(); } else { cannotFindRouteRounds++; } if (this.OnPathNotFound != null) { this.OnPathNotFound(this); } } return path; }
public GameArea GetAvailableContactArea(bool Square) { GameArea area = new GameArea(); foreach (Point point in this.ContactArea.Area) { if (base.Scenario.IsPositionEmpty(point)) { area.AddPoint(point); } } if (area.Count > 0) { return area; } return null; }
public GameArea GetHighestFightingForceArea(GameArea sourceArea) { if (sourceArea == null || sourceArea.Count == 0) { return null; } int num = -2147483648; GameArea area = new GameArea(); foreach (Point point in sourceArea.Area) { PersonList originalPersons = this.Persons; Troop troop = CreateSimulateTroop(this.Candidates, this.Army, point); int fightingForce = troop.FightingForce; troop.Destroy(true, false); if (fightingForce > num) { num = fightingForce; area.Area.Clear(); area.AddPoint(point); } else if (fightingForce == num) { area.AddPoint(point); } foreach (Person p in originalPersons) { p.LocationTroop = this; } } return area; }
public GameArea GetDestroyArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if (!this.IsFriendly(architecture.BelongedFaction)) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetruchengArea(bool friendly) { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if (this.IsFriendly(architecture.BelongedFaction) == friendly) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetInstigateArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in base.Scenario.Architectures) { if (architecture.Kind.HasDomination && !this.IsFriendly(architecture.BelongedFaction)) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } return area; }
public GameArea GetHighestFightingForceArea(GameArea sourceArea) { if (sourceArea == null) { return null; } int num = -2147483648; GameArea area = new GameArea(); foreach (Point point in sourceArea.Area) { int fightingForce = CreateSimulateTroop(this.Persons, this.Army, point).FightingForce; if (fightingForce > num) { num = fightingForce; area.Area.Clear(); area.AddPoint(point); } else if (fightingForce == num) { area.AddPoint(point); } } return area; }
public GameArea GetPersonTransferArchitectureArea() { GameArea area = new GameArea(); foreach (Architecture architecture in this.BelongedFaction.Architectures) { if (architecture == this) { continue; } foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } return area; }
private Point? GetRoutewayWaterOrientation(Routeway routeway, Architecture des) { GameArea area = new GameArea(); foreach (Point point in des.ContactArea.Area) { TerrainDetail terrainDetailByPosition = base.Scenario.GetTerrainDetailByPosition(point); if ((terrainDetailByPosition != null) && (terrainDetailByPosition.ID == 6)) { if (routeway.GetPoint(point) != null) { continue; } area.AddPoint(point); } } if (area.Count > 0) { return new Point?(base.Scenario.GetClosestPoint(area, this.Position)); } return null; }
public GameArea GetRoutewayStartPoints() { GameArea area = new GameArea(); foreach (Point point in this.GetRoutewayStartArea().Area) { if (this.IsRoutewayPossible(point)) { area.AddPoint(point); } } if (area.Count == 0) { foreach (Point point in this.ContactArea.Area) { if (this.IsRoutewayPossible(point)) { area.AddPoint(point); } } } if (area.Count == 0) { foreach (Point point in this.LongViewArea.Area) { if (this.IsRoutewayPossible(point)) { area.AddPoint(point); } } } return area; }
public GameArea GetSetFireArea() { GameArea area = new GameArea(); foreach (Point point in this.StratagemArea.Area) { if (base.Scenario.IsPositionEmpty(point) && base.Scenario.IsFireVaild(point, false, MilitaryType.步兵)) { area.AddPoint(point); } } if (area.Count > 0) { return area; } return null; }
public GameArea GetTroopEnterableArea(Troop troop) { GameArea area = new GameArea(); foreach (Point point in this.ArchitectureArea.Area) { if (base.Scenario.GetWaterPositionMapCost(troop.Army.Kind.Type, point) < 3500) { area.AddPoint(point); } } foreach (Point point in this.ContactArea.Area) { if (troop.IsMovableOnPosition(point) && (base.Scenario.GetWaterPositionMapCost(troop.Army.Kind.Type, point) < 3500)) { area.AddPoint(point); } } return area; }
public GameArea GetTargetArea(bool friendly, bool architectureTarget) { GameArea area = new GameArea(); foreach (Troop troop in base.Scenario.Troops) { if (((this.BelongedFaction == null) && this.ViewArea.HasPoint(troop.Position)) || (((this.BelongedFaction != null) && this.BelongedFaction.IsPositionKnown(troop.Position)) && (this.IsFriendly(troop.BelongedFaction) == friendly))) { area.AddPoint(troop.Position); } } if (architectureTarget) { foreach (Architecture architecture in base.Scenario.Architectures) { if (this.IsFriendly(architecture.BelongedFaction) == friendly) { foreach (Point point in architecture.ArchitectureArea.Area) { area.AddPoint(point); } } } } return area; }