/// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 9
0
        /// <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);
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 14
0
        /// <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);
        }
Esempio n. 16
0
        /// <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);
        }
Esempio n. 18
0
        /// <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);
        }
Esempio n. 19
0
        /// <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);
        }
Esempio n. 20
0
        /// <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);
        }
Esempio n. 25
0
        /// <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);
        }
Esempio n. 27
0
        /// <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);
        }
Esempio n. 29
0
        /// <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);
        }