Пример #1
0
        public void Remove()
        {
            if (SingleTask != null)
            {
                Game.Log(LogLevel.INFO, BlockType.TRIGGER, "Enchant", "enqueueuing lazy removal task here!");

                // clone task here
                var clone = SingleTask.Clone();
                clone.Game       = Owner.Controller.Game;
                clone.Controller = Owner.Controller;
                clone.Source     = Owner;
                clone.Target     = Owner;

                Owner.Controller.Game.TaskQueue.Enqueue(clone);
            }
            Parent.Remove(this);
        }
Пример #2
0
        public Enchant Copy(string sourceId, Game game, int turn, List <Enchant> parent, IPlayable owner, Dictionary <GameTag, int> removeTriggers)
        {
            return(new Enchant()
            {
                Game = game,
                Parent = parent,
                Owner = owner,
                Turn = turn,

                SourceId = sourceId,
                EnableConditions = EnableConditions,
                ApplyConditions = ApplyConditions,
                SingleTask = SingleTask?.Clone(),
                RemovalTask = RemovalTask?.Clone(),
                Effects = new Dictionary <GameTag, int>(Effects),
                ValueFunc = ValueFunc,
                FixedValueFunc = FixedValueFunc,
                TurnsActive = TurnsActive,

                RemoveTriggerTags = new List <GameTag>(RemoveTriggerTags),
                RemoveTriggers = new Dictionary <GameTag, int>(removeTriggers),
            });
        }
Пример #3
0
        public void Activate(Controller controller, IPlayable source, IPlayable target = null)
        {
            // execute task straight over
            if (SingleTask != null)
            {
                // clone task here
                var clone = SingleTask.Clone();
                clone.Game       = controller.Game;
                clone.Controller = controller;
                clone.Source     = source;
                clone.Target     = target;

                controller.Game.TaskQueue.Enqueue(clone);
            }

            // only apply enchant and triggers if there is ...
            if (Enchant == null && Trigger == null)
            {
                return;
            }

            switch (Area)
            {
            case EnchantmentArea.TARGET:
                if (target != null)
                {
                    Enchant?.Activate(source.Card.Id, target.Enchants, target);
                    Trigger?.Activate(source.Card.Id, target.Triggers, target);
                }
                break;

            case EnchantmentArea.HAND:
                Enchant?.Activate(source.Card.Id, controller.Hand.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hand.Triggers, source);
                break;

            case EnchantmentArea.OP_HAND:
                Enchant?.Activate(source.Card.Id, controller.Opponent.Hand.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Hand.Triggers, source);
                break;

            case EnchantmentArea.HANDS:
                Enchant?.Activate(source.Card.Id, controller.Hand.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hand.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Hand.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Hand.Triggers, source);
                break;

            case EnchantmentArea.HAND_AND_BOARD:
                Enchant?.Activate(source.Card.Id, controller.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Board.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Hand.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hand.Triggers, source);
                break;

            case EnchantmentArea.BOARD:
                Enchant?.Activate(source.Card.Id, controller.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Board.Triggers, source);
                break;

            case EnchantmentArea.OP_BOARD:
                Enchant?.Activate(source.Card.Id, controller.Opponent.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Board.Triggers, source);
                break;

            case EnchantmentArea.OP_BOARD_AND_OP_HERO:
                Enchant?.Activate(source.Card.Id, controller.Opponent.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Board.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Hero.Triggers, source);
                break;

            case EnchantmentArea.BOARDS:
                Enchant?.Activate(source.Card.Id, controller.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Board.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Board.Triggers, source);
                break;

            case EnchantmentArea.SECRET:
                Enchant?.Activate(source.Card.Id, controller.Secrets.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Secrets.Triggers, source);
                break;

            case EnchantmentArea.HERO:
                Enchant?.Activate(source.Card.Id, controller.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hero.Triggers, source);
                break;

            case EnchantmentArea.HEROES:
                Enchant?.Activate(source.Card.Id, controller.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hero.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Hero.Triggers, source);
                break;

            case EnchantmentArea.SELF:
                Enchant?.Activate(source.Card.Id, source.Enchants, source);
                Trigger?.Activate(source.Card.Id, source.Triggers, source);
                break;

            case EnchantmentArea.CONTROLLER:
                Enchant?.Activate(source.Card.Id, controller.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Triggers, source);
                break;

            case EnchantmentArea.OP_CONTROLLER:
                Enchant?.Activate(source.Card.Id, controller.Opponent.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Triggers, source);
                break;

            case EnchantmentArea.CONTROLLERS:
                Enchant?.Activate(source.Card.Id, controller.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Triggers, source);
                break;

            case EnchantmentArea.GAME:
                Enchant?.Activate(source.Card.Id, controller.Game.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Game.Triggers, source);
                break;

            case EnchantmentArea.BOARDS_HEROES:
                Enchant?.Activate(source.Card.Id, controller.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Hero.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Hero.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Hero.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Board.Triggers, source);
                Enchant?.Activate(source.Card.Id, controller.Opponent.Board.Enchants, source);
                Trigger?.Activate(source.Card.Id, controller.Opponent.Board.Triggers, source);
                break;

            default:
                throw new NotImplementedException();
            }
        }