/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null || playerContext.RelationValues == null || playerContext.RelationValues.Current == null || playerContext.RelationValues.Current.Player == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } int playerIndex = playerContext.Player.Index; var relation = playerContext.RelationValues.Current.Player.RelationsValues.FirstOrDefault(r => r.PlayerIndex == playerIndex); if (relation == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (RelationValue > relation.RelationValue) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } BaseEnvironment envi = playerContext.EnvironmentTarget as BaseEnvironment; if (envi == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } BaseUnit existingUnit = playerContext.Player.Units.FirstOrDefault(u => u.Environment == envi && u is Builder && u.Behavior == null); playerContext.BehaviorTarget = existingUnit; if (existingUnit != null) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Gets the value. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override float GetValue(IBehaviorContext context) { context.AddLogMessage($"PlayerValue {Property}"); PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { Debug.Assert(false, "Wrong Behavior Context"); return(0); } if (string.IsNullOrEmpty(Property)) { Debug.Assert(false, "Property null or empty"); return(0); } if (info == null || info.Name != Property) { info = playerType.GetRuntimeProperty(Property); if (info == null) { Debug.Assert(false, "Wrong Property Name"); return(0); } } return(Convert.ToSingle(info.GetValue(playerContext.Player))); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } foreach (var unit in playerContext.Player.Units) { if (unit.Behavior == null || unit.Behavior.Name != BehaviorName || unit.Environment == null || unit.HasTask()) { continue; } unit.BehaviorContext.EnvironmentTarget = playerContext.EnvironmentTarget; } returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Makes the decision. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override bool MakeDecision(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { return(false); } Planet planet = playerContext.BehaviorTarget as Planet; if (planet == null) { return(false); } PlanetBehaviorContext planetContext = planet.BehaviorContext as PlanetBehaviorContext; if (planetContext == null) { return(false); } planetContext.ItemToBuild = playerContext.Player.AvailFactoryItems.FirstOrDefault(i => i.FactoryTypeName.EndsWith(UnitTypeName)); if (planetContext.ItemToBuild == null) { return(false); } planetContext.ItemBehaviorName = BehaviorName; context.AddLogMessage($"Player Unit Decision - {UnitTypeName}"); return(true); }
/// <summary> /// Gets the value. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override float GetValue(IBehaviorContext context) { context.AddLogMessage("ExplorationRatioValue"); PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; PlanetBehaviorContext planetContext = context as PlanetBehaviorContext; if (playerContext == null && planetContext == null) { Debug.Assert(false, "Wrong Behavior Context"); return(0); } Player player = null; if (playerContext != null) { player = playerContext.Player; } else if (planetContext != null) { player = planetContext.Planet.Owner; } if (player == null) { return(0); } float scoutUnits = player.Units.Count(u => u is Scout); float value = scoutUnits / ((player.GameSession.Galaxy.TotalSystems - player.TotalExploredStarSystems) / Ratio); return(value); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; if (player == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } FactoryItem existingFactoryItem = player.AvailFactoryItems.FirstOrDefault(f => f.Id == FactoryItemId); if (existingFactoryItem != null) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Unit == null || playerContext.UnitUpgrade == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } UpgradeTask task = new UpgradeTask(playerContext.Unit, playerContext.UnitUpgrade); task.Execute(); if (task.IsTaskFinished) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; foreach (var item in player.AvailFactoryItems) { if (item.RareResourceCost == null || item.RareResourceCost.Count == 0) { continue; } if (item.HasEnoughRareResource(player)) { continue; } returnCode = BehaviorReturnCode.Failure; return(returnCode); } returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } playerContext.RelationValues = playerContext.Player.RelationsValues.GetEnumerator(); if (!playerContext.RelationValues.MoveNext()) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } foreach (var relation in playerContext.Player.RelationsValues) { Player otherPlayer = playerContext.Player.GameSession.Players.FirstOrDefault(p => p.Index == relation.PlayerIndex); relation.Player = otherPlayer; } returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } PlayerRelationValue existingRelation = playerContext.Player.RelationsValues.FirstOrDefault(r => r.Level == PlayerRelationsLevel.Hostile); if (existingRelation != null) { Player relationPlayer = existingRelation.Player; if (relationPlayer == null) { relationPlayer = playerContext.Player.GameSession.Players.FirstOrDefault(p => p.Index == existingRelation.PlayerIndex); existingRelation.Player = relationPlayer; } if (relationPlayer != null && !relationPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } float maxProduction = float.MinValue; Planet bestPlanet = null; foreach (var body in playerContext.Player.StarSystemBodies) { Planet planet = body as Planet; if (planet == null) { continue; } if (DoPlanetBuildingCheck) { PlanetBehaviorContext planetContext = planet.BehaviorContext as PlanetBehaviorContext; if (planetContext != null && planetContext.ItemToBuild != null) { continue; } } if (maxProduction > planet.AvailProduction || (!string.IsNullOrEmpty(IgnoreBehaviorName) && planet.Behavior != null && planet.Behavior.Name == IgnoreBehaviorName)) { continue; } int activeTradeRoutesCount = planet.Owner.TradeRoutes.Count(tr => tr.From == planet); if (PlanetWithTradeRoute && (activeTradeRoutesCount - planet.TradeRoutesCount) == 0) { continue; } maxProduction = planet.AvailProduction; bestPlanet = planet; } if (bestPlanet != null) { playerContext.BehaviorTarget = bestPlanet; returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlanetBehaviorContext planetContext = context as PlanetBehaviorContext; PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (planetContext == null && playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player owner = null; Planet planet = null; if (planetContext != null) { owner = planetContext.Planet.Owner; planet = planetContext.Planet; } else if (playerContext != null) { owner = playerContext.Player; planet = playerContext.BehaviorTarget as Planet; } if (owner == null || planet == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } List <FactoryItem> possibleUpgrades = owner.GetPossiblePlanetUpgrades(planet, UpgradeModifier); if (possibleUpgrades.Count == 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } FactoryItem upgrade = possibleUpgrades.OrderBy(u => u.ProductionCost).First(); if (upgrade != null) { context.AddLogMessage("Upgrade found - " + upgrade.Name); if (planetContext != null) { planetContext.ItemToBuild = upgrade; } returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; float goalTechnologyId = playerContext.GoalTechnologyId.HasValue ? playerContext.GoalTechnologyId.Value : GoalTechnologyId; Technology goalTech = player.Technologies.FirstOrDefault(t => t.Data.Id == goalTechnologyId); if (goalTech == null) { context.AddLogMessage($"Goal Technology {goalTechnologyId} not found."); returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (goalTech.IsAquired) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (goalTech.IsAvailable) { goalTech.ProgressIncrement = player.ResearchProgressPool; returnCode = BehaviorReturnCode.Success; return(returnCode); } int?techId = GetTechnologyIdFromGoal(player, goalTech.Data.Parents); if (techId.HasValue) { Technology techToResearch = player.Technologies.FirstOrDefault(t => t.Data.Id == techId); if (techToResearch == null) { context.AddLogMessage($"Wrong Technology {techId} found."); returnCode = BehaviorReturnCode.Failure; return(returnCode); } techToResearch.ProgressIncrement = player.ResearchProgressPool; returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; if (player == null || relation.DeclarationCooldown != 0 || relation.PropositionState != DiplomaticActions.None || !relation.AvailableActions.HasFlag(DiplomaticAction)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player otherPlayer = relation.Player; if (otherPlayer == null || otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } bool currentState = relation.GetActionState(DiplomaticAction); if (currentState) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } bool canActivate = relation.GetDiplomaticActionEnableState(DiplomaticAction, player.GameSession.EnvironmentConfig.DiplomacyConfig); if (canActivate) { DispatcherHelper.InvokeOnMainThread(otherPlayer, new Action(() => { player.ProposeDiplomaticAction(relation, DiplomaticAction); })); returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Makes the decision. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override bool MakeDecision(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { return(false); } playerContext.GoalTechnologyId = GoalTechnologyId; context.AddLogMessage($"Research Decision - {GoalTechnologyId}"); return(true); }
/// <summary> /// Gets the value. /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override float GetValue(IBehaviorContext context) { context.AddLogMessage("ProductionAverageValue"); PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { Debug.Assert(false, "Wrong Behavior Context"); return(0); } float value = playerContext.Player.TotalProduction / playerContext.Player.TotalPlanets; return(value); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } BaseUnit unit = playerContext.BehaviorTarget as BaseUnit; if (unit == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Behavior behavior = null; if (playerContext.Behavior != null) { behavior = playerContext.Behavior; } else { if (string.IsNullOrEmpty(BehaviorName)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } behavior = BehaviorsManager.Instance.GetBehavior(BehaviorName); } if (behavior == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } context.AddLogMessage($"Unit {unit.Name} Set Behavior {behavior.Name}"); //string.Format("Unit {0} Set Behavior {1}", unit.Name, behavior.Name)); unit.Behavior = behavior; unit.BehaviorContext.EnvironmentTarget = null; returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; PlayerRelationValue relation = playerContext.RelationValues.Current; Player otherPlayer = relation.Player; if (otherPlayer == null || relation.DeclarationCooldown != 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (otherPlayer.IsEliminated) { returnCode = BehaviorReturnCode.Success; return(returnCode); } if (relation.IsAtWar) { float cost = player.GameSession.EnvironmentConfig.DiplomacyConfig.GetActionCost(DiplomaticActions.MakePeace); if (cost > player.Intelligence) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } DispatcherHelper.InvokeOnMainThread(relation.Player, new Action(() => { player.MakePeace(relation); })); returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Planet planet = playerContext.BehaviorTarget as Planet; if (planet == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Behavior behavior = null; if (playerContext.Behavior != null) { behavior = playerContext.Behavior; } else { if (string.IsNullOrEmpty(BehaviorName)) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } behavior = BehaviorsManager.Instance.GetBehavior(BehaviorName); } if (behavior == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } context.AddLogMessage("Behavior Name - " + behavior.Name); planet.Behavior = behavior; returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } float minValue = float.MaxValue; Planet bestPlanet = null; foreach (var body in playerContext.Player.StarSystemBodies) { Planet planet = body as Planet; if (planet == null) { continue; } if (planet.IsUnderSiege) { continue; } float planetValue = GetPlanetValue(planet); if (minValue < planetValue) { continue; } minValue = planetValue; bestPlanet = planet; } if (bestPlanet != null) { playerContext.BehaviorTarget = bestPlanet; returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Calculates the value. /// </summary> /// <param name="context">The context.</param> public override void CalculateValue(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { IsNodeValid = false; Debug.Assert(false, "Player Context null"); return; } BaseUnit unit = playerContext.Unit; if (unit == null) { IsNodeValid = false; Debug.Assert(false, "Unit null"); return; } if (!playerContext.Player.AvailUnitUpgrades.Contains(UpgradeId)) { IsNodeValid = false; return; } BaseUnitUpgrade upgrade = playerContext.Player.GameSession.EnvironmentConfig.UpgradesConfig.Upgrades.FirstOrDefault(u => u.Id == UpgradeId); if (upgrade == null) { IsNodeValid = false; return; } if (!upgrade.IsValidUpgrade(unit)) { IsNodeValid = false; return; } int usedCount = unit.Upgrades.Count(u => u == upgrade); IsNodeValid = true; Value = usedCount; }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } ITradeUnit tradeUnit = playerContext.BehaviorTarget as ITradeUnit; if (tradeUnit == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } var availRoutes = tradeUnit.Owner.GetAvailableTradeRoutes(tradeUnit, IncludeDomestic, IncludeGlobal); if (availRoutes == null || availRoutes.Count == 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (tradeUnit.HasAssignedTradeRoute) { tradeUnit.CancelTrade(); } // TODO: select best trade route here BaseTradeRoute route = availRoutes[0]; route.AutoRenew = AutoRenew; route.Balance = TradeBallance; route.UpdateBalance(); TradeTask task = new TradeTask(tradeUnit, route); task.Execute(); returnCode = BehaviorReturnCode.Success; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } var tradePoints = playerContext.Player.StarSystemBodies.Where(b => b is ITradePoint && ((ITradePoint)b).TradeRoutesCount > 0); if (tradePoints.Count() == 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } int buildingShipCount = 0; foreach (var body in playerContext.Player.StarSystemBodies) { Planet planet = body as Planet; if (planet == null) { continue; } buildingShipCount += planet.FactoryQueue.Count(i => i.Item.UnitConfig.Actions.HasFlag(UnitActions.EstablishTradeRoute)); } int tradeRouteSlotsCount = (int)(tradePoints.Sum(tp => ((ITradePoint)tp).TradeRoutesCount) * RouteShipRatio); int tradeShipsCount = playerContext.Player.Units.Count(u => u is ITradeUnit); int totalShipsCount = tradeShipsCount + buildingShipCount; if (tradeRouteSlotsCount > totalShipsCount && playerContext.Player.TradeShipsLimit > totalShipsCount) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Player.HasAnyUpgrade) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Player.EnergyIncome > 0) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } Player player = playerContext.Player; if (player.Units.Count == 0) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } BaseUnit unit = player.Units.FirstOrDefault(u => u is MoveableUnit && !u.CanColonize && !u.IsDead && !((MoveableUnit)u).IsInDock && !((MoveableUnit)u).IsOnOrbit); if (unit == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } DestroyTask task = new DestroyTask(unit); task.Execute(); if (task.IsTaskFinished) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Unit.GetType().Name == UnitTypeName) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Player.RelationsValues.Count != 0) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }
/// <summary> /// Executes behavior with given context /// </summary> /// <param name="context">The context.</param> /// <returns></returns> public override BehaviorReturnCode Behave(IBehaviorContext context) { PlayerBehaviorContext playerContext = context as PlayerBehaviorContext; if (playerContext == null) { returnCode = BehaviorReturnCode.Failure; return(returnCode); } if (playerContext.Player.UnitsWithoutOrder.Count > 0) { returnCode = BehaviorReturnCode.Success; return(returnCode); } returnCode = BehaviorReturnCode.Failure; return(returnCode); }