예제 #1
0
        public void Inititalize()
        {
            _toon = new Toon();

            _ac  = new ActionCollection();
            _cc  = new ConsiderationCollection();
            _oc  = new OptionCollection(_ac, _cc);
            _bc  = new BehaviourCollection(_oc);
            _aic = new AiCollection(_bc);

            // The main AI
            _ai = new UtilityAi("ai", _aic);
            var coreBehaviour = new Behaviour("coreBehaviour", _bc);

            coreBehaviour.Selector = new MaxUtilitySelector();
            _ai.AddBehaviour(coreBehaviour.NameId);

            // Eat Option
            _eatOption         = new Option();
            _eatOption.Measure = new WeightedMetrics(1.4f);
            var eatAction           = new EatAction();
            var hungerConsideration = new HungerConsideration();

            (_eatOption as Option).SetAction(eatAction);
            _eatOption.AddConsideration(hungerConsideration);
            _eatOption.AddConsideration(new InverseBladderConsideration());
            coreBehaviour.AddConsideration(_eatOption);

            // Drink Option
            _drinkOption         = new Option();
            _drinkOption.Measure = new WeightedMetrics(3.0f);
            var drinkAction         = new DrinkAction();
            var thirstConsideration = new ThirstConsideration();

            (_drinkOption as Option).SetAction(drinkAction);
            _drinkOption.AddConsideration(thirstConsideration);
            _drinkOption.AddConsideration(new InverseBladderConsideration());

            // Toilet Option
            _toiletOption         = new Option();
            _toiletOption.Measure = new WeightedMetrics();
            var toiletAction         = new ToiletAction();
            var bladderConsideration = new BladderConsideration();

            (_toiletOption as Option).SetAction(toiletAction);
            _toiletOption.AddConsideration(bladderConsideration);

            coreBehaviour.AddConsideration(_eatOption);
            coreBehaviour.AddConsideration(_drinkOption);
            coreBehaviour.AddConsideration(_toiletOption);

            Console.WriteLine(coreBehaviour);

            _scheduler = new Scheduler();
        }