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); } } }
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); }
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); }