Ejemplo n.º 1
0
    private void ComputeScoresByFIDSI()
    {
        IWorldPositionEvaluationAIHelper service = AIScheduler.Services.GetService <IWorldPositionEvaluationAIHelper>();

        Diagnostics.Assert(service != null);
        IPersonalityAIHelper service2 = AIScheduler.Services.GetService <IPersonalityAIHelper>();

        Diagnostics.Assert(service2 != null);
        WorldPositionScore[] worldPositionCreepingNodeImprovementScore = service.GetWorldPositionCreepingNodeImprovementScore(base.AIEntity.Empire, this.aiEntityCity.City, this.availableNodes);
        string regitryPath   = "AI/MajorEmpire/AIEntity_Empire/AILayer_Research/ElementEvaluatorContextMultiplier/AIEmpireGrowth";
        float  registryValue = service2.GetRegistryValue <float>(base.AIEntity.Empire, regitryPath, 1f);

        regitryPath = "AI/MajorEmpire/AIEntity_Empire/AILayer_Research/ElementEvaluatorContextMultiplier/AIEmpireProduction";
        float registryValue2 = service2.GetRegistryValue <float>(base.AIEntity.Empire, regitryPath, 1f);

        regitryPath = "AI/MajorEmpire/AIEntity_Empire/AILayer_Research/ElementEvaluatorContextMultiplier/AIEmpireResearch";
        float registryValue3 = service2.GetRegistryValue <float>(base.AIEntity.Empire, regitryPath, 1f);

        regitryPath = "AI/MajorEmpire/AIEntity_Empire/AILayer_Research/ElementEvaluatorContextMultiplier/AIEmpireMoney";
        float registryValue4 = service2.GetRegistryValue <float>(base.AIEntity.Empire, regitryPath, 1f);

        regitryPath = "AI/MajorEmpire/AIEntity_Empire/AILayer_Research/ElementEvaluatorContextMultiplier/AIEmpireEmpirePoint";
        float        registryValue5 = service2.GetRegistryValue <float>(base.AIEntity.Empire, regitryPath, 1f);
        List <float> list           = new List <float>();

        foreach (WorldPositionScore worldPositionScore in worldPositionCreepingNodeImprovementScore)
        {
            float num  = worldPositionScore.Scores[0].Value * registryValue;
            float num2 = worldPositionScore.Scores[1].Value * registryValue2;
            float num3 = worldPositionScore.Scores[2].Value * registryValue3;
            float num4 = worldPositionScore.Scores[3].Value * registryValue4;
            float num5 = worldPositionScore.Scores[4].Value * registryValue5;
            float item = num + num2 + num3 + num4 + num5;
            list.Add(item);
        }
        if (list.Count > 0)
        {
            float num6 = list.Min();
            float num7 = list.Max();
            for (int j = 0; j < list.Count; j++)
            {
                float num8        = (num6 == num7) ? this.NormalizationFailSafeValue : Mathf.InverseLerp(num6, num7, list[j]);
                float score       = this.availableNodes[j].score;
                float boostFactor = num8 * this.FIDSIWeight;
                this.availableNodes[j].score = AILayer.Boost(score, boostFactor);
            }
        }
    }
Ejemplo n.º 2
0
    public override void Initialize()
    {
        base.Initialize();
        IWorldPositionEvaluationAIHelper service = AIScheduler.Services.GetService <IWorldPositionEvaluationAIHelper>();

        Diagnostics.Assert(service != null);
        this.decisionMakerPosition = new SimulationDecisionMaker <WorldPositionScore>(service, service.GetEmpireCityProxy(base.Empire));
        this.decisionMakerPosition.ParameterContextModifierDelegate = new Func <WorldPositionScore, StaticString, float>(this.DecisionParameterContextModifierPosition);
        this.decisionMakerPosition.ScoreTransferFunctionDelegate    = new Func <WorldPositionScore, float, float>(this.DecisionScoreTransferFunctionPosition);
        IGameService service2 = Services.GetService <IGameService>();

        Diagnostics.Assert(service2 != null);
        this.worldPositionningService = service2.Game.Services.GetService <IWorldPositionningService>();
        Diagnostics.Assert(this.worldPositionningService != null);
        this.costalColonizationBoost = new HeuristicValue(0f);
    }
Ejemplo n.º 3
0
    protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
    {
        Army army;

        if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
        {
            return(State.Failure);
        }
        if (!aiBehaviorTree.Variables.ContainsKey(this.DestinationVarName))
        {
            return(State.Failure);
        }
        WorldPosition worldPosition = (WorldPosition)aiBehaviorTree.Variables[this.DestinationVarName];

        if (!worldPosition.IsValid)
        {
            aiBehaviorTree.ErrorCode = 2;
            return(State.Failure);
        }
        IWorldPositionEvaluationAIHelper service = AIScheduler.Services.GetService <IWorldPositionEvaluationAIHelper>();

        Diagnostics.Assert(service != null);
        switch (this.TypeOfCheck)
        {
        case AIBehaviorTreeNode_Decorator_DestinationReached.DestinationReachAlgorithm.Regular:
            if (army.WorldPosition == worldPosition)
            {
                return(State.Success);
            }
            break;

        case AIBehaviorTreeNode_Decorator_DestinationReached.DestinationReachAlgorithm.InVisionRangeDestination:
            if (service.IsPositionInRange(army.WorldPosition, worldPosition, army.LineOfSightVisionRange))
            {
                return(State.Success);
            }
            break;

        case AIBehaviorTreeNode_Decorator_DestinationReached.DestinationReachAlgorithm.Attack:
            if (service.IsPositionInRange(army.WorldPosition, worldPosition, 1) && !army.Sails)
            {
                if (this.pathfindingService == null)
                {
                    IGameService service2 = Services.GetService <IGameService>();
                    this.pathfindingService = service2.Game.Services.GetService <IPathfindingService>();
                }
                if (this.pathfindingService.IsTransitionPassable(army.WorldPosition, worldPosition, army, PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreOtherEmpireDistrict | PathfindingFlags.IgnoreDiplomacy | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreZoneOfControl | PathfindingFlags.IgnorePOI | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons, null))
                {
                    return(State.Success);
                }
                if (army.WorldPosition == worldPosition)
                {
                    return(State.Success);
                }
            }
            break;

        case AIBehaviorTreeNode_Decorator_DestinationReached.DestinationReachAlgorithm.InRange:
            if (service.IsPositionInRange(army.WorldPosition, worldPosition, this.Range))
            {
                return(State.Success);
            }
            break;
        }
        if (army.GetPropertyValue(SimulationProperties.Movement) < 0.001f)
        {
            aiBehaviorTree.ErrorCode = 24;
        }
        else
        {
            aiBehaviorTree.ErrorCode = 5;
        }
        return(State.Failure);
    }