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