protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
 {
     foreach (var conversion in ConditionalResources)
     {
         conversion.OnExecute(player, resultingNotices);
     }
 }
示例#2
0
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var dif = 4 - ((TravelingPlayersActionTrigger)trigger).FoodTaken;

            if (dif > 0)
            {
                var resource = new ResourceCache(Resource.Food, dif);
                ActionService.AssignResource(player, resource, resultingNotices);
            }
        }
示例#3
0
    private void Start()
    {
        GameEventTrigger gameEventTrigger = base.gameObject.AddComponent <GameEventTrigger>();

        gameEventTrigger.type = 2;
        if (this.run)
        {
            gameEventTrigger.onTriggerHanlde();
        }
        UnityEngine.Object.Destroy(this);
    }
示例#4
0
 /// <summary>
 /// Compiles a list of events fired by a trigger
 /// </summary>
 /// <param name="player"></param>
 /// <param name="trigger"></param>
 /// <param name="resultingNotices"></param>
 public static void ProcessEventTrigger(AgricolaPlayer player, GameEventTrigger trigger, List <GameActionNotice> resultingNotices)
 {
     foreach (var p in ((AgricolaGame)player.Game).AgricolaPlayers)
     {
         var events = p.GetCardEventData(player, trigger);
         if (events.Count > 0)
         {
             ActionService.ExecuteEvents(p, events, resultingNotices);
         }
     }
 }
示例#5
0
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            ImmutableDictionary <string, Object> metadata;
            Object fieldData;
            int    cardCount = -1;

            if (player.TryGetCardMetadataField(card, "tutor", out metadata, out fieldData))
            {
                cardCount = (int)fieldData;
            }
            player.SetCardMetadataField(card, "tutor", cardCount + 1);
        }
    private void Start()
    {
        GameEventTrigger gameEventTrigger = base.gameObject.AddComponent <GameEventTrigger>();

        gameEventTrigger.type      = 1;
        gameEventTrigger.paramInts = new List <int>
        {
            this.monId,
            this.killingNum
        };
        UnityEngine.Object.Destroy(this);
    }
示例#7
0
    private void Start()
    {
        GameEventTrigger gameEventTrigger = base.gameObject.AddComponent <GameEventTrigger>();

        gameEventTrigger.type       = 3;
        gameEventTrigger.paramFloat = new List <float>
        {
            this.sec
        };
        if (this.run)
        {
            gameEventTrigger.onTriggerHanlde();
        }
        UnityEngine.Object.Destroy(this);
    }
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var totalConverted = 0;

            foreach (var resource in ((ResourceConversionTrigger)trigger).TriggeringResourcesConverted)
            {
                totalConverted += resource.AmountConverted;
            }

            var activations  = totalConverted / perNumConverted;
            var newResources = new Dictionary <Resource, int>();

            foreach (var resourceData in Resources)
            {
                if (((AgricolaGame)player.Game).CurrentRound >= resourceData.FromRound)
                {
                    newResources[resourceData.Resource.Type] = resourceData.Resource.Count * activations;
                }
            }

            var nonAnimals = new List <ResourceCache>();
            var animals    = new List <ResourceCache>();

            foreach (var resource in newResources)
            {
                if (resource.Key.IsAnimal())
                {
                    animals.Add(new ResourceCache(resource.Key, resource.Value));
                }
                else
                {
                    nonAnimals.Add(new ResourceCache(resource.Key, resource.Value));
                }
            }


            if (nonAnimals.Count > 0)
            {
                ActionService.AssignResources(player, nonAnimals.ToArray(), resultingNotices);
            }

            if (animals.Count > 0)
            {
                ((AgricolaGame)player.Game).AddInterrupt(new AssignAnimalsAction(player, animals.ToArray(), resultingNotices));
            }
        }
示例#9
0
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var nonAnimals = new List <ResourceCache>();
            var animals    = new List <ResourceCache>();

            foreach (var resourceData in Resources)
            {
                int executionCount = 0;
                if (card != null)
                {
                    Object fieldData;
                    ImmutableDictionary <string, object> metadata;
                    if (player.TryGetCardMetadataField(card, GameEvent.MetadataKeyExecutionCount, out metadata, out fieldData))
                    {
                        executionCount = (int)fieldData;
                    }
                }

                if (((AgricolaGame)player.Game).CurrentRound >= resourceData.FromRound &&
                    executionCount >= resourceData.FromExecution &&
                    executionCount < resourceData.UntilExecution)
                {
                    if (resourceData.Resource.Type.IsAnimal())
                    {
                        animals.Add(resourceData.Resource);
                    }
                    else
                    {
                        nonAnimals.Add(resourceData.Resource);
                    }
                }
            }

            if (nonAnimals.Count > 0)
            {
                ActionService.AssignResources(player, nonAnimals.ToArray(), resultingNotices);
            }

            if (animals.Count > 0)
            {
                ((AgricolaGame)player.Game).AddInterrupt(new AssignAnimalsAction(player, animals.ToArray(), resultingNotices));
            }
        }
示例#10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="resolvingPlayer"></param>
        /// <param name="triggeringPlayer"></param>
        /// <param name="trigger"></param>
        /// <returns></returns>
        public List <EventData> GetCardEventData(AgricolaPlayer triggeringPlayer, GameEventTrigger trigger)
        {
            var resolvingPlayer = (AgricolaPlayer)this;
            var events          = new List <EventData>();

            foreach (var card in resolvingPlayer.OwnedCards)
            {
                if (card.Events == null)
                {
                    continue;
                }

                var cardEvents = card.Events.Where(x => x.Triggers.Any(s => s.Triggered(resolvingPlayer, triggeringPlayer, trigger)));
                foreach (var cardEvent in cardEvents)
                {
                    EventData data = new EventData(trigger, cardEvent, card);
                    events.Add(data);
                }
            }

            return(events);
        }
示例#11
0
        /// <summary>
        /// Executes the event.
        /// </summary>
        /// <param name="player">The player to execute the event for.</param>
        /// <param name="resultingNotices">Outgoing informational notices caused by this event.</param>
        public void Execute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            if (card != null)
            {
                int executionCount = 0;
                ImmutableDictionary <string, Object> metadata;
                if (player.TryGetCardMetadata(card, out metadata))
                {
                    if (metadata.ContainsKey(MetadataKeyExecutionCount))
                    {
                        executionCount = (int)metadata[MetadataKeyExecutionCount];
                    }
                }
                else
                {
                    metadata = ImmutableDictionary <string, Object> .Empty;
                }
                executionCount++;
                player.SetCardMetadata(card, metadata.SetItem(MetadataKeyExecutionCount, executionCount));
            }

            OnExecute(player, trigger, card, resultingNotices);
        }
示例#12
0
 protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
 {
     return;
 }
示例#13
0
 public EventData(GameEventTrigger trigger, TriggeredEvent triggeredEvent, Card card)
 {
     Trigger        = trigger;
     TriggeredEvent = triggeredEvent;
     Card           = card;
 }
示例#14
0
 protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
 {
     ((AgricolaGame)player.Game).AddInterrupt(new FencePastureAction(player, resultingNotices));
 }
示例#15
0
 /// <summary>
 /// Event execution code goes here.
 /// </summary>
 /// <param name="player">The player to execute the event for.</param>
 /// <param name="resultingNotices">Outgoing informational notices caused by this event.</param>
 protected abstract void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices);
示例#16
0
 protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
 {
     ((AgricolaGame)player.Game).AddInterrupt(new SelectResourcesAction(player, ResourceOptions, 1, resultingNotices));
 }
示例#17
0
    //functions

    public void setOwner(GameEventTrigger gameET)
    {
        OwnerTrigger = gameET;
    }
示例#18
0
 protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
 {
     ((AgricolaGame)player.Game).StoreFutureResources(player, Resources);
 }
示例#19
0
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var resource = new ResourceCache(Resources[0].Type, Resources[0].Count * ((BakeTrigger)trigger).GrainBaked);

            ActionService.AssignResource(player, resource, resultingNotices);
        }
示例#20
0
 public GameAction(AgricolaGame game, int id, List <GameActionNotice> resultingNotices, GameEventTrigger eventTrigger)
 {
     Game               = game;
     Id                 = id;
     ResultingNotices   = resultingNotices;
     this.eventTriggers = ImmutableList <GameEventTrigger> .Empty.Add(eventTrigger);
 }
示例#21
0
 public InterruptAction(AgricolaPlayer player, int id, List <GameActionNotice> resultingNotices, GameEventTrigger eventTrigger)
     : base((AgricolaGame)player.Game, id, resultingNotices, eventTrigger)
 {
     Player = player;
 }