// returns initial state private State InitStates() { aiTools = GetComponent <AiTools>(); aiTools.Init(); SearchEnemy searchEnemyState = new SearchEnemy(aiTools); SearchHealthPack searchHealthPackState = new SearchHealthPack(aiTools); Attack attackState = new Attack(aiTools); Defence defenceState = new Defence(aiTools); searchEnemyState.AddTransition( new Transition( () => aiTools.agentState.isEnemyVisible, attackState ) ); searchEnemyState.AddTransition( new Transition( () => (aiTools.world.healthPacksAvailable > 0) && (aiTools.agentState.health <= GameDefines.LOW_HP), searchHealthPackState ) ); attackState.AddTransition( new Transition( () => (aiTools.agentState.health <= GameDefines.MEDIUM_HP), defenceState ) ); attackState.AddTransition( new Transition( () => (aiTools.agentState.health > GameDefines.MEDIUM_HP) && !aiTools.agentState.isEnemyVisible, searchEnemyState ) ); defenceState.AddTransition( new Transition( () => (aiTools.world.healthPacksAvailable > 0) && ((aiTools.agentState.health <= GameDefines.LOW_HP) || !aiTools.agentState.isEnemyVisible), searchHealthPackState ) ); defenceState.AddTransition( new Transition( () => (!aiTools.agentState.isEnemyVisible && ((aiTools.world.healthPacksAvailable == 0) || aiTools.agentState.health > GameDefines.LOW_HP)), searchEnemyState ) ); searchHealthPackState.AddTransition( new Transition( () => (aiTools.agentState.health > GameDefines.LOW_HP) || (aiTools.world.healthPacksAvailable == 0), searchEnemyState ) ); return(searchEnemyState); }
void Start() { aiTools = GetComponent <AiTools>(); controller = GetComponent <SoldierController>(); aiTools.Init(); aiTools.terrain.SetWeightsNormalizationEnabled(true); Init(); Dispatcher.GetInstance().SendEvent(new ControllerInited(aiTools.agentState.side, GameDefines.ControllerType.FuzzyLogic)); }
private void Start() { aiTools = GetComponent <AiTools>(); controller = GetComponent <SoldierController>(); aiTools.Init(); InitStrategies(); InitNetwork(); List <LearningRecord> learningSet, testingSet; ReadLearningData(out learningSet, out testingSet); Learn(learningSet); Test(testingSet); Dispatcher.GetInstance().SendEvent(new ControllerInited(aiTools.agentState.side, GameDefines.ControllerType.NeuralNetwork)); }
public SoldierState(AiTools aiTools) { this.aiTools = aiTools; }
public SetWeightFunction(Environment environment, AiTools aiTools, TerrainReasoning.WeightFunction function) : base(environment, aiTools) { this.function = function; }
public StartShooting(Environment environment, AiTools aiTools) : base(environment, aiTools) { }
public Attack(AiTools aiTools) : base(aiTools) { }
public IsDestinationExistsAndValid(Environment environment, AiTools aiTools) : base(environment, aiTools) { }
public Defence(AiTools aiTools) : base(aiTools) { }
public SelectDestinationPoint(Environment environment, AiTools aiTools, string searchRadiusVariable, string minWeightVariable, string resultVariable) : base(environment, aiTools) { this.searchRadiusVariable = searchRadiusVariable; this.minWeightVariable = minWeightVariable; this.resultVariable = resultVariable; }
public SearchHealthPack(AiTools aiTools) : base(aiTools) { }
public SearchEnemy(AiTools aiTools) : base(aiTools) { }
private void InitTree() { Environment environment = new Environment(); aiTools = GetComponent <AiTools>(); aiTools.Init(); root = new Sequence(environment); // shooting branch root.AddChild( new Selector(environment) .AddChild( new Sequence(environment) .AddChild(new IsTargetVisible(environment, aiTools)) .AddChild(new StartShooting(environment, aiTools)) ) .AddChild(new StopShooting(environment, aiTools)) ); // weight function branch root.AddChild( new Selector(environment) .AddChild( new Sequence(environment) .AddChild(new IsTargetVisible(environment, aiTools)) .AddChild( new Selector(environment) .AddChild( // attack state new Sequence(environment) .AddChild(new IsHealthMoreThan(environment, aiTools, GameDefines.MEDIUM_HP)) .AddChild(new SetWeightFunction(environment, aiTools, TerrainReasoning.AGGRESSIVE_WEIGHT_FUNCTION)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_RADIUS_VARIABLE, 5.0f)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_MIN_WEIGHT_VARIABLE, 0.75f)) ) .AddChild( // defence state new Sequence(environment) .AddChild(new IsHealthMoreThan(environment, aiTools, GameDefines.LOW_HP)) .AddChild(new SetWeightFunction(environment, aiTools, TerrainReasoning.DEFENSIVE_WEIGHT_FUNCTION)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_RADIUS_VARIABLE, 5.0f)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_MIN_WEIGHT_VARIABLE, 0.75f)) ) ) ) .AddChild( new Selector(environment) .AddChild( // patrol state new Sequence(environment) .AddChild(new IsHealthMoreThan(environment, aiTools, GameDefines.LOW_HP)) .AddChild(new SetWeightFunction(environment, aiTools, TerrainReasoning.PATROL_WEIGHT_FUNCTION)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_RADIUS_VARIABLE, 500.0f)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_MIN_WEIGHT_VARIABLE, 0.0f)) ) .AddChild( // retreat state new Sequence(environment) .AddChild(new SetWeightFunction(environment, aiTools, TerrainReasoning.RETREAT_WEIGHT_FUNCTION)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_RADIUS_VARIABLE, 500.0f)) .AddChild(new SetEnvironmentVariable <float>(environment, DESTINATION_SEARCH_MIN_WEIGHT_VARIABLE, -1.0f)) ) ) ); // navigation branch root.AddChild( new Sequence(environment) .AddChild( new Selector(environment) .AddChild( new Sequence(environment) .AddChild(new CheckEnvironmentVariable <bool>(environment, WEIGHT_FUNCTION_CHANGED_VARIABLE, true)) .AddChild(new ClearEnvironmentVariable(environment, WEIGHT_FUNCTION_CHANGED_VARIABLE)) ) .AddChild( new Inverter(environment) .AddChild(new IsDestinationExistsAndValid(environment, aiTools)) ) .AddChild(new IsNearDestination(environment, aiTools)) ) .AddChild(new SelectDestinationPoint(environment, aiTools, DESTINATION_SEARCH_RADIUS_VARIABLE, DESTINATION_SEARCH_MIN_WEIGHT_VARIABLE, DESTINATION_POINT_VARIABLE)) .AddChild(new MoveToPoint(environment, aiTools, DESTINATION_POINT_VARIABLE)) ); }
public SearchHealthStrategy(AiTools aiTools) : base(aiTools) { }
public Strategy(AiTools aiTools) { this.aiTools = aiTools; }
public IsHealthMoreThan(Environment environment, AiTools aiTools, float healthValue) : base(environment, aiTools) { this.value = healthValue; }
public IsNearDestination(Environment environment, AiTools aiTools) : base(environment, aiTools) { }
public IsTargetVisible(Environment environment, AiTools aiTools) : base(environment, aiTools) { }
public DefenceStrategy(AiTools aiTools) : base(aiTools) { }
public SearchEnemyStrategy(AiTools aiTools) : base(aiTools) { }
public MoveToPoint(Environment environment, AiTools aiTools, string pointVariable) : base(environment, aiTools) { this.pointVariable = pointVariable; }
public AttackStrategy(AiTools aiTools) : base(aiTools) { }
public SoldierNode(Environment environment, AiTools aiTools) : base(environment) { this.aiTools = aiTools; }