Example #1
0
        public FPSAgentKebabiste()
        {
            selector = new Selector();

            // Si vie inférieur à un montant, va se cacher
            SequenceAction    wantToHide            = new SequenceAction(() => SetIntent(Action.Hide));
            SequenceCondition sequenceConditionHide = new SequenceCondition(CheckLowLife, wantToHide);

            selector.AddNode(sequenceConditionHide);

            // Si ammo inférieur à un montant, va recharger
            SequenceAction    wantToReload            = new SequenceAction(() => SetIntent(Action.Reload), EndReload);
            SequenceCondition sequenceConditionReload = new SequenceCondition(CheckAmmo, wantToReload);

            selector.AddNode(sequenceConditionReload);

            // Si Ok
            Selector       findOrShootSelector = new Selector();
            NodeAlwaysTrue shootOrMove         = new NodeAlwaysTrue(findOrShootSelector);

            // Si cible en vue, tire
            SequenceAction    shootOpponent             = new SequenceAction(() => SetIntent(Action.Shoot));
            SequenceCondition sequenceConditionCanShoot = new SequenceCondition(CanShootOpponent, shootOpponent);

            findOrShootSelector.AddNode(sequenceConditionCanShoot);

            // Si cible non en vu, se déplacer
            SequenceAction goNearAction     = new SequenceAction(() => SetIntent(Action.GoNear));
            NodeAlwaysTrue alwaysTrueGoNear = new NodeAlwaysTrue(goNearAction);

            findOrShootSelector.AddNode(alwaysTrueGoNear);

            selector.AddNode(shootOrMove);
        }
Example #2
0
        static void Main(string[] args)
        {
            // SequenceCondition + AmountDiscountPolicy
            SequenceCondition    sc1 = new SequenceCondition(1);
            SequenceCondition    sc2 = new SequenceCondition(2);
            AmountDiscountPolicy adp = new AmountDiscountPolicy(Money.Wons(10000), sc1, sc2);

            Movie GodzillaVSKong = new Movie("고질라VS.콩", TimeSpan.FromMinutes(113), Money.Wons(18000), adp);

            Screening   screening   = new Screening(GodzillaVSKong, 1, new DateTime(2021, 4, 3));
            Reservation reservation = screening.Reserve(new Customer(), 1);

            Console.WriteLine(reservation);

            // ---

            // PeriodCondition + PercentDiscountPolicy
            PeriodCondition       pc1 = new PeriodCondition(DayOfWeek.Saturday, TimeSpan.FromHours(9), TimeSpan.FromHours(13));
            PeriodCondition       pc2 = new PeriodCondition(DayOfWeek.Sunday, TimeSpan.FromHours(9), TimeSpan.FromHours(13));
            PeriodCondition       pc3 = new PeriodCondition(DayOfWeek.Monday, TimeSpan.FromHours(18), TimeSpan.FromHours(24));
            PercentDiscountPolicy pdp = new PercentDiscountPolicy(0.1, pc1, pc2, pc3);

            Movie theBookOfFish = new Movie("자산어보", TimeSpan.FromMinutes(126), Money.Wons(12000), pdp);

            Screening   screening2   = new Screening(theBookOfFish, 3, new DateTime(2021, 4, 4, 11, 50, 00));
            Reservation reservation2 = screening2.Reserve(new Customer()
            {
                Name = "jongfeel"
            }, 1);

            Console.WriteLine(reservation2);
        }
Example #3
0
        public AgentKebabiste()
        {
            selector = new Selector();

            // Init different sequences

            // Si le stress est trop haut
            SequenceAction sequenceTakeBreak = new SequenceAction(() =>
                                                                  SetIntent(new KebabisteIntent {
                action = Action.TakeBreak
            })
                                                                  );
            SequenceCondition sequenceCheckStress = new SequenceCondition(CheckStressCondition, sequenceTakeBreak);

            selector.AddNode(sequenceCheckStress);

            // Si il manque des ingrédients pour la recette
            CreateSequenceForRecipe();

            // Si l'adversaire à un niveau de stress élevé ou il est trop en avance
            SequenceAction sequenceAttackOpponent = new SequenceAction(() =>
            {
                Action attackAction = Random.Range(0, 2) == 0 ? Action.FakeClient : Action.Corrupt;
                SetIntent(new KebabisteIntent
                {
                    action = attackAction
                });
            });
            SequenceCondition sequenceOpponentCondition =
                new SequenceCondition(CheckOpponentStressCondition, sequenceAttackOpponent);

            selector.AddNode(sequenceOpponentCondition);

            // Si le seuil d'ingredient préparé est trop bas
            CreateSequencePrepareIngredient();

            // Si un plat est attendu et peut être préparé
            SequenceAction sequencePrepareRecipe = new SequenceAction(() =>
                                                                      SetIntent(new KebabisteIntent {
                action = Action.CreateDish
            })
                                                                      );
            SequenceCondition sequenceRecipeCanBeMade =
                new SequenceCondition(CheckRecipeCanBeMade, sequencePrepareRecipe);

            selector.AddNode(sequenceRecipeCanBeMade);

            // action par defaut;
            NodeAlwaysTrue defaultSequence = new NodeAlwaysTrue();

            selector.AddNode(defaultSequence);
        }
Example #4
0
        private void CreateSequencePrepareIngredient()
        {
            foreach (Ingredient ing in Enum.GetValues(typeof(Ingredient)))
            {
                SequenceAction sequencePrepareIngredient = new SequenceAction(() =>
                                                                              SetIntent(new KebabisteIntent {
                    action     = Action.PrepareIngredient,
                    ingredient = ing
                })
                                                                              );
                SequenceCondition sequenceMissingPrepareIngredients =
                    new SequenceCondition(() => CheckMissingPrepareIngredient(ing), sequencePrepareIngredient);

                selector.AddNode(sequenceMissingPrepareIngredients);
            }
        }
Example #5
0
    public void ReserveTest()
    {
        // Arrange & Action
        Customer        jongfeel        = new Customer("jongfeel", "1");
        PeriodCondition periodCondition = new PeriodCondition(
            DayOfWeek.Wednesday,
            new DateTime(2022, 3, 23, 12, 0, 0),
            new DateTime(2022, 3, 23, 22, 0, 0)
            );

        SequenceCondition sequenceCondition = new SequenceCondition(1);

        Movie theBatman = new AmountDiscountMovie("The Batman", TimeSpan.FromMinutes(176), Money.Wons(14000), Money.Wons(2000),
                                                  new DiscountCondition[] { periodCondition, sequenceCondition });

        Reservation reservation = new Screening()
        {
            Movie = theBatman
        }.Reserve(jongfeel, 1);

        // Assert
        Assert.AreEqual(reservation.AudienceCount, 1);
        Assert.AreEqual(reservation.Customer, jongfeel);
    }