// 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));
            }
示例#3
0
            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;
 }
示例#5
0
 public SetWeightFunction(Environment environment, AiTools aiTools, TerrainReasoning.WeightFunction function) : base(environment, aiTools)
 {
     this.function = function;
 }
 public StartShooting(Environment environment, AiTools aiTools) : base(environment, aiTools)
 {
 }
示例#7
0
 public Attack(AiTools aiTools) :
     base(aiTools)
 {
 }
 public IsDestinationExistsAndValid(Environment environment, AiTools aiTools) : base(environment, aiTools)
 {
 }
示例#9
0
 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)
 {
 }
示例#12
0
 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)
 {
 }
示例#15
0
 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)
 {
 }
示例#18
0
 public IsTargetVisible(Environment environment, AiTools aiTools) : base(environment, aiTools)
 {
 }
 public DefenceStrategy(AiTools aiTools) : base(aiTools)
 {
 }
 public SearchEnemyStrategy(AiTools aiTools) : base(aiTools)
 {
 }
示例#21
0
 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;
 }