Пример #1
0
		public TriggerSchema (TriggerSchema trigger)
			: base (trigger)
		{
			tableName = trigger.tableName;
			triggerType = trigger.triggerType;
			triggerFireType = trigger.triggerFireType;
			triggerEvent = trigger.triggerEvent;
			position = trigger.position;
			isActive = trigger.isActive;
			source = trigger.source;
		}
Пример #2
0
    public override void Trigger(TriggerEvent triggerEvent)
    {
        switch (triggerEvent) {
        case TriggerEvent.StartHover:
            ((SbModel)model).StartHover ();
            break;

        case TriggerEvent.StopHover:
            ((SbModel)model).StopHover ();
            break;

        case TriggerEvent.OnLeftClick:
            ((SbModel)model).OnLeftClick ();
            break;

        default:
            break;
        }
    }
Пример #3
0
    /**
     * TODO
     */
    public virtual void Trigger(TriggerEvent triggerEvent)
    {
        switch (triggerEvent) {

        case TriggerEvent.StartHover:
            model.StartHover ();
            break;

        case TriggerEvent.StopHover:
            model.StopHover ();
            break;

        case TriggerEvent.OnLeftClick:
            model.OnLeftClick ();
            break;

        case TriggerEvent.OnRightClick:
            model.OnRightClick ();
            break;

        default:
            break;
        }
    }
Пример #4
0
 public override bool Effect(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player ask_who, TriggerStruct info)
 {
     return(OnPhaseChange(room, player, info));
 }
Пример #5
0
 virtual public TriggerStruct Cost(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player ask_who, TriggerStruct info)
 {
     return(info);
 }
Пример #6
0
 public void HandleEvent(string previous, int pivot, TriggerEvent _event)
 {
     if (!contextMap.ContainsKey(previous))
         contextMap[previous] = new Dictionary<int, TriggerEvent>();
     contextMap[previous][pivot] = _event;
 }
Пример #7
0
 /// <summary>
 /// Automatically executes an action when a triggering event occurs.
 /// </summary>
 /// <param name="triggerEvent">The triggering event.</param>
 /// <param name="triggerAction">The action to execute when triggered.</param>
 /// <exception cref="ArgumentNullException">Thrown if <paramref name="triggerAction"/> is null.</exception>
 public void AutoExecute(TriggerEvent triggerEvent, Action triggerAction)
 {
     AutoExecute(triggerEvent, triggerAction, null);
 }
Пример #8
0
        /// <summary>
        /// Automatically embeds a screenshot when a trigger event occurs.
        /// </summary>
        /// <remarks>
        /// <para>
        /// If screenshots cannot be captured, the method will embed a warning message to that effect.
        /// </para>
        /// </remarks>
        /// <param name="triggerEvent">The trigger event.</param>
        /// <param name="attachmentName">The name to give to the image attachment, or null to assign one automatically.</param>
        /// <param name="parameters">The capture parameters.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="parameters"/> is null.</exception>
        /// <seealso cref="TestContext.AutoExecute(TriggerEvent, Action)"/>
        public static void AutoEmbedScreenshot(TriggerEvent triggerEvent, string attachmentName, CaptureParameters parameters)
        {
            if (parameters == null)
                throw new ArgumentNullException("parameters");

            TestContext context = TestContext.CurrentContext;
            if (context != null)
            {
                context.AutoExecute(triggerEvent, () =>
                {
                    try
                    {
                        Bitmap bitmap = Screenshot(parameters);
                        context.LogWriter.Default.EmbedImage(attachmentName, bitmap);
                    }
                    catch (ScreenshotNotAvailableException ex)
                    {
                        context.LogWriter.Default.WriteException(ex, "Screenshot not available.");
                    }
                });
            }
        }
Пример #9
0
 public void unregister(TriggerEvent aEnter, TriggerEvent aStay, TriggerEvent aExit)
 {
     m_Enter -= aEnter;
     m_Stay -= aStay;
     m_Exit -= aExit;
 }
Пример #10
0
        public void Execute(TriggerEvent triggerEvent)
        {
            var txAutotrophConsts = environmentSettings[0].txAutotrophConsts;
            var eA = triggerEvent.Entities.EntityA;
            var eB = triggerEvent.Entities.EntityB;

            Entity e;
            Entity eOther;

            if (txAutotrophPhenotype.Exists(eA))
            {
                var swap = translations[eA].Value.y + txAutotrophPhenotype[eA].height > translations[eB].Value.y
                           + txAutotrophPhenotype[eB].height;
                if (swap)
                {
                    e      = eB;
                    eOther = eA;
                }
                else
                {
                    e      = eA;
                    eOther = eB;
                }

                var l0 = math.max(txAutotrophConsts.minShadeRadius,
                                  txAutotrophPhenotype[e].leaf) * txAutotrophConsts.leafShadeRadiusMultiplier;
                var l1 = math.max(txAutotrophConsts.minShadeRadius,
                                  txAutotrophPhenotype[eOther].leaf) * txAutotrophConsts.leafShadeRadiusMultiplier;
                var dSqr = math.distancesq(translations[e].Value, translations[eOther].Value);
                var r0   = math.max(l0, l1);
                var r1   = math.min(l0, l1);
                var rSub = r0 - r1;
                var minD = rSub * rSub;
                var num  = dSqr - minD;
                if (!shadeDict.ContainsKey(e))
                {
                    if (num <= 0)
                    {
                        shadeDict[e] = r1;
                    }
                    else
                    {
                        var rAdd = r0 + r1;
                        var maxD = rAdd * rAdd - minD;
                        shadeDict[e] = (1 - ((maxD - num) / maxD)) * r1;
                    }
                }
                else
                {
                    if (num <= 0)
                    {
                        shadeDict[e] += r1;
                    }
                    else
                    {
                        var rAdd = r0 + r1;
                        var maxD = rAdd * rAdd - minD;
                        shadeDict[e] += (1 - ((maxD - num) / maxD)) * r1;
                    }
                }
            }
        }
Пример #11
0
 public void Execute(TriggerEvent triggerEvent) => TriggerEvents.Add(new StatefulTriggerEvent(triggerEvent));
Пример #12
0
 public void Execute(TriggerEvent triggerEvent)
 {
     TriggerEvents.Add(new StatefulTriggerEvent(
                           triggerEvent.EntityA, triggerEvent.EntityB, triggerEvent.BodyIndexA, triggerEvent.BodyIndexB,
                           triggerEvent.ColliderKeyA, triggerEvent.ColliderKeyB));
 }
 public void Parse(GameBitBuffer buffer)
 {
     Field0 = buffer.ReadInt(32);
     Field1 = new TriggerEvent();
     Field1.Parse(buffer);
 }
Пример #14
0
 public void HandleEvent(string previous, TriggerEvent _event)
 {
     if (!contextMap.ContainsKey(previous))
         contextMap[previous] = new Dictionary<int, TriggerEvent>();
     contextMap[previous][EventHelper.NO_PIVOT] = _event;
 }
Пример #15
0
 public override int GetHashCode()
 {
     return(MessageType.GetHashCode() + TriggerEvent.GetHashCode() + ProcessingId.GetHashCode() + Version.GetHashCode());
 }
Пример #16
0
 public EventTrigger(Action function, TriggerEvent @event)
 {
     Function = function;
     Event    = @event;
 }
Пример #17
0
 public virtual void OnEvent(TrustedAI ai, TriggerEvent triggerEvent, Player player, object data)
 {
 }
Пример #18
0
 public Trigger(TriggerEvent triggerEvent, TriggerTime triggerTime)
 {
     TriggerTime  = triggerTime;
     TriggerEvent = triggerEvent;
 }
Пример #19
0
 public void Execute(TriggerEvent triggerEvent)
 {
     TestEntityTrigger(triggerEvent.Entities.EntityA, triggerEvent.Entities.EntityB);
     TestEntityTrigger(triggerEvent.Entities.EntityB, triggerEvent.Entities.EntityA);
 }
Пример #20
0
 void Invoke()
 {
     TriggerEvent?.Invoke(this, new TriggerEventArgs(triggersCache ?? (triggersCache = triggers.Select(t => t.Convert()).ToArray())));
 }
Пример #21
0
        public override void Event(TriggerEvent triggerEvent, Player player, object data)
        {
            if (!self.Alive)
            {
                return;
            }

            base.Event(triggerEvent, player, data);

            if (triggerEvent == TriggerEvent.EventPhaseStart || triggerEvent == TriggerEvent.BuryVictim)
            {
                UpdatePlayers();
            }

            if (triggerEvent == TriggerEvent.CardsMoveOneTime && data is CardsMoveOneTimeStruct move)
            {
                bool   open      = false;
                bool   pile_open = false;
                Player from      = move.From;
                Player to        = move.To;

                foreach (Player p in room.GetAlivePlayers())
                {
                    if (p.HasFlag("Global_GongxinOperator") && (p == self || self.IsSameCamp(p)))
                    {
                        open = true;
                        break;
                    }
                }

                if ((from != null && (from == self || self.IsSameCamp(from))) || (to != null && (to == self || self.IsSameCamp(to)) && move.To_place != Player.Place.PlaceSpecial))
                {
                    open = true;
                }

                if (!open && to != null && !string.IsNullOrEmpty(move.To_pile_name) && !move.To_pile_name.StartsWith("#") && move.To != null)
                {
                    if (move.To.GetPileOpener(move.To_pile_name).Count == room.GetAllPlayers(true).Count)
                    {
                        pile_open = true;
                    }
                    else
                    {
                        foreach (string name in move.To.GetPileOpener(move.To_pile_name))
                        {
                            Player who = room.FindPlayer(name, true);
                            if (who != null && (who == self || self.IsSameCamp(who)))
                            {
                                open = true;
                                break;
                            }
                        }
                    }
                }

                if (to != null && move.To_place == Player.Place.PlaceHand)
                {
                    foreach (int id in move.Card_ids)
                    {
                        int         index = move.Card_ids.IndexOf(id);
                        WrappedCard card  = room.GetCard(id);
                        if (card.HasFlag("visible") || pile_open ||
                            move.From_places[index] == Player.Place.PlaceEquip || move.From_places[index] == Player.Place.PlaceDelayedTrick ||
                            move.From_places[index] == Player.Place.DiscardPile || move.From_places[index] == Player.Place.PlaceTable)
                        {
                            public_handcards[to].Add(id);
                            private_handcards[to].Add(id);
                            ClearCardLack(to, id);
                        }
                        else if (open)
                        {
                            private_handcards[to].Add(id);
                            ClearCardLack(to, id);
                        }
                        else
                        {
                            ClearCardLack(to);
                        }
                    }
                }

                if (to != null && move.To_place == Player.Place.PlaceSpecial && move.To_pile_name == "wooden_ox")
                {
                    foreach (int id in move.Card_ids)
                    {
                        if (open)
                        {
                            wooden_cards[to].Add(id);
                        }
                    }
                }

                if (from != null && move.From_places.Contains(Player.Place.PlaceHand))
                {
                    foreach (int id in move.Card_ids)
                    {
                        if (room.GetCard(id).HasFlag("visible") || pile_open || move.To_place == Player.Place.PlaceEquip ||
                            move.To_place == Player.Place.PlaceDelayedTrick || move.To_place == Player.Place.DiscardPile ||
                            move.To_place == Player.Place.PlaceTable)
                        {
                            public_handcards[from].RemoveAll(t => t == id);
                            private_handcards[from].RemoveAll(t => t == id);
                        }
                        else
                        {
                            public_handcards[from].Clear();
                            if (open)
                            {
                                private_handcards[from].RemoveAll(t => t == id);
                            }
                            else
                            {
                                private_handcards[from].Clear();
                            }
                        }
                    }
                }

                if (from != null && move.From_places.Contains(Player.Place.PlaceSpecial) && move.From_pile_names.Contains("wooden_ox"))
                {
                    foreach (int id in move.Card_ids)
                    {
                        int index = move.Card_ids.IndexOf(id);
                        if (open && move.From_pile_names[index] == "wooden_ox" && move.From_places[index] == Player.Place.PlaceSpecial)
                        {
                            wooden_cards[move.From].RemoveAll(t => t == id);
                        }
                    }
                }

                foreach (int id in move.Card_ids)
                {
                    int         index = move.Card_ids.IndexOf(id);
                    WrappedCard card  = room.GetCard(id);
                    if (move.From_places[index] == Player.Place.DrawPile)
                    {
                        if (move.To != null && move.To_place == Player.Place.PlaceHand && card.HasFlag("visible2" + self.Name))
                        {
                            private_handcards[move.To].Add(id);
                        }

                        if (guanxing.Key != null && guanxing.Value.Contains(id))
                        {
                            if (guanxing.Value[0] != id)
                            {
                                List <int> top_cards = new List <int>(guanxing.Value);
                                for (int y = top_cards.IndexOf(id); y < top_cards.Count; y++)
                                {
                                    guanxing.Value.RemoveAt(y);
                                }
                            }
                            else
                            {
                                guanxing.Value.RemoveAll(t => t == id);
                            }
                            if (guanxing.Value.Count == 0)
                            {
                                guanxing = new KeyValuePair <Player, List <int> >();
                            }
                        }
                    }
                }
            }

            if (triggerEvent == TriggerEvent.CardTargetAnnounced && data is CardUseStruct use)
            {
                FunctionCard fcard      = Engine.GetFunctionCard(use.Card.Name);
                string       class_name = fcard.Name;
                if (fcard is Slash)
                {
                    class_name = Slash.ClassName;
                }
                UseCard e = Engine.GetCardUsage(class_name);
                if (e != null)
                {
                    e.OnEvent(this, triggerEvent, player, data);
                }
            }

            if (triggerEvent == TriggerEvent.ChoiceMade && data is string str)
            {
                List <string> choices = new List <string>(str.Split(':'));
                foreach (SkillEvent e in skill_events.Values)
                {
                    if (e.Key.Contains(choices[0]))
                    {
                        e.OnEvent(this, triggerEvent, player, data);
                    }
                }

                foreach (UseCard e in Engine.GetCardUsages())
                {
                    if (e.Key.Contains(choices[0]))
                    {
                        e.OnEvent(this, triggerEvent, player, data);
                    }
                }

                if (choices[0] == "viewCards")
                {
                    List <int> ids = player.GetCards("h");
                    if (choices[choices.Count - 1] == "all")
                    {
                        public_handcards[player]  = ids;
                        private_handcards[player] = ids;
                    }
                    else if (choices[choices.Count - 1] == self.Name)
                    {
                        private_handcards[player] = ids;
                    }
                }
                else if (choices[0] == "showCards")
                {
                    List <int> ids = JsonUntity.StringList2IntList(new List <string>(choices[2].Split('+')));
                    if (choices[choices.Count - 1] == "all")
                    {
                        foreach (int id in ids)
                        {
                            if (!public_handcards[player].Contains(id))
                            {
                                public_handcards[player].Add(id);
                            }
                            if (!private_handcards[player].Contains(id))
                            {
                                private_handcards[player].Add(id);
                            }
                        }
                    }
                    else if (choices[choices.Count - 1] == self.Name)
                    {
                        foreach (int id in ids)
                        {
                            if (!private_handcards[player].Contains(id))
                            {
                                private_handcards[player].Add(id);
                            }
                        }
                    }
                }
                else if (choices[0] == "cardShow")
                {
                    int id = int.Parse(choices[choices.Count - 1].Substring(1, choices[choices.Count - 1].Length - 2));
                    if (!public_handcards[player].Contains(id))
                    {
                        public_handcards[player].Add(id);
                    }
                    if (!private_handcards[player].Contains(id))
                    {
                        private_handcards[player].Add(id);
                    }
                }
                else if (choices[0] == "ViewTopCards" || choices[0] == "ViewBottomCards")
                {
                    bool       open     = choices[choices.Count - 1] == "open";
                    List <int> drawpile = new List <int>(room.DrawPile);
                    List <int> moves    = JsonUntity.StringList2IntList(new List <string>(choices[2].Split('+')));
                    if (choices[0] == "ViewTopCards")
                    {
                        guanxing = new KeyValuePair <Player, List <int> >();
                        if (open)
                        {
                            for (int index = 0; index < moves.Count; index++)
                            {
                                int id = moves[index];
                                room.SetCardFlag(id, "visible");
                            }
                        }
                        else
                        {
                            foreach (int id in moves)
                            {
                                if (player == self || player.IsSameCamp(self))
                                {
                                    room.SetCardFlag(id, "visible2" + self.Name);
                                }
                            }

                            guanxing = new KeyValuePair <Player, List <int> >(player, moves);
                        }
                    }
                    else
                    {
                        if (open)
                        {
                            for (int index = 0; index < moves.Count; index++)
                            {
                                int id = moves[index];
                                room.SetCardFlag(id, "visible");
                            }
                        }
                        else
                        {
                            foreach (int id in moves)
                            {
                                room.SetCardFlag(id, "visible2" + choices[1]);
                            }
                        }
                    }
                }
            }
        }
Пример #22
0
        /// <summary>
        /// Automatically embeds a video of the test run from this point forward when a trigger event occurs.
        /// </summary>
        /// <remarks>
        /// <para>
        /// Recording a screen capture video can be very CPU and space intensive particularly
        /// when running tests on a single-core CPU.  We recommend calling
        /// <see cref="AutoEmbedRecording(TriggerEvent, string, CaptureParameters, double)" /> with
        /// a <see cref="CaptureParameters.Zoom" /> factor of 0.25 or less and a frame rate
        /// of no more than 5 to 10 frames per second.
        /// </para>
        /// <para>
        /// If screenshots cannot be captured, the method will embed a warning message to that effect.
        /// </para>
        /// </remarks>
        /// <param name="triggerEvent">The trigger event.</param>
        /// <param name="attachmentName">The name to give the video attachment, or null to assign one automatically.</param>
        /// <param name="parameters">The capture parameters.</param>
        /// <param name="framesPerSecond">The number of frames per second to capture.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="parameters"/> is null.</exception>
        /// <seealso cref="TestContext.AutoExecute(TriggerEvent, Action)"/>
        public static void AutoEmbedRecording(TriggerEvent triggerEvent, string attachmentName, CaptureParameters parameters, double framesPerSecond)
        {
            if (parameters == null)
                throw new ArgumentNullException("parameters");

            TestContext context = TestContext.CurrentContext;
            if (context != null)
            {
                try
                {
                    ScreenRecorder recorder = StartRecording(parameters, framesPerSecond);

                    context.AutoExecute(triggerEvent, () =>
                    {
                        recorder.Stop();

                        if (recorder.Video.FrameCount != 0)
                            context.LogWriter.Default.EmbedVideo(attachmentName, recorder.Video);
                    }, recorder.Dispose);
                }
                catch (ScreenshotNotAvailableException ex)
                {
                    context.AutoExecute(triggerEvent, () =>
                    {
                        context.LogWriter.Default.WriteException(ex, "Recording not available.");
                    });
                }
            }
        }
 /// <summary>
 /// Automatically embeds a video of the test run from this point forward when a trigger event occurs.
 /// </summary>
 /// <remarks>
 /// <para>
 /// Recording a screen capture video can be very CPU and space intensive particularly
 /// when running tests on a single-core CPU.  We recommend specifying a zoom with of 0.25 or 
 /// less and a frame rate  of no more than 5 to 10 frames per second.
 /// </para>
 /// <para>
 /// If screenshots cannot be captured, the method will embed a warning message to that effect.
 /// </para>
 /// </remarks>
 /// <example>
 /// <code><![CDATA[
 /// [Test]
 /// [AutoEmbedRecording(TriggerEvent.TestPassed, Zoom = 0.25, FramesPerSecond = 3)]
 /// public void Test()
 /// {
 ///     // Code logic here.
 /// }
 /// ]]></code>
 /// </example>
 /// <param name="triggerEvent">The trigger event.</param>
 public AutoEmbedRecordingAttribute(TriggerEvent triggerEvent)
     : base(triggerEvent)
 {
 }
Пример #24
0
        /// <summary>
        /// Returns true if a trigger event has been satisfied.
        /// </summary>
        /// <remarks>
        /// <para>
        /// This method assumes that the body of the test has already finished and is
        /// currently running tear down, dispose, or finishing actions.
        /// </para>
        /// </remarks>
        /// <param name="triggerEvent">The trigger event.</param>
        /// <returns>True if the trigger event is satisfied.</returns>
        public bool IsTriggerEventSatisfied(TriggerEvent triggerEvent)
        {
            switch (triggerEvent)
            {
                case TriggerEvent.TestFinished:
                    return true;

                case TriggerEvent.TestPassed:
                    return Outcome.Status == TestStatus.Passed;

                case TriggerEvent.TestPassedOrInconclusive:
                    return Outcome.Status == TestStatus.Passed || Outcome.Status == TestStatus.Inconclusive;

                case TriggerEvent.TestInconclusive:
                    return Outcome.Status == TestStatus.Inconclusive;

                case TriggerEvent.TestFailed:
                    return Outcome.Status == TestStatus.Failed;

                case TriggerEvent.TestFailedOrInconclusive:
                    return Outcome.Status == TestStatus.Failed || Outcome.Status == TestStatus.Inconclusive;

                default:
                    return false;
            }
        }
Пример #25
0
 public void Read(MpqFileStream stream)
 {
     this.F0    = stream.ReadValueF32();
     this.Event = new TriggerEvent(stream);
 }
Пример #26
0
 public virtual void Record(TriggerEvent triggerEvent, Room room, Player player, ref object data)
 {
 }
Пример #27
0
 public override void OnTriggerKeep(TriggerEvent evt)
 {
 }
Пример #28
0
 virtual public bool Effect(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player ask_who, TriggerStruct info)
 {
     return(false);
 }
Пример #29
0
 public override void OnTriggerOut(TriggerEvent evt)
 {
     MainAnimator.SetInteger("state", 0);
 }
Пример #30
0
 public override TriggerStruct Cost(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player ask_who, TriggerStruct info)
 {
     return(base.Cost(triggerEvent, room, player, ref data, ask_who, info));
 }
Пример #31
0
 public override void OnTriggerIn(TriggerEvent evt)
 {
     JudgeSpeed(evt);
 }
Пример #32
0
        public PerformDBOperationExpression CreateTriggerExpression(string tableName, string triggerName, bool onBefore, TriggerEvent onEvent, string triggerBody)
        {
            tableName   = truncator.Truncate(tableName);
            triggerName = truncator.Truncate(triggerName);
            CheckTable(tableName);
            LockTable(tableName);
            PerformDBOperationExpression createTrigger = new PerformDBOperationExpression();

            createTrigger.Operation = (connection, transaction) =>
            {
                string triggerSql = String.Format(@"CREATE TRIGGER {0} FOR {1} ACTIVE {2} {3} POSITION 0 
                    {4}
                    ", quoter.Quote(triggerName), quoter.Quote(tableName),
                                                  onBefore ? "before" : "after",
                                                  onEvent.ToString().ToLower(),
                                                  triggerBody
                                                  );
                Announcer.Sql(triggerSql);
                using (var cmd = Factory.CreateCommand(triggerSql, connection, transaction))
                {
                    cmd.CommandTimeout = Options.Timeout;
                    cmd.ExecuteNonQuery();
                }
            };
            return(createTrigger);
        }
Пример #33
0
 public void Add(string name, TriggerEvent e)
 {
     SaveManager.instance.data.UnlockedLevels.Add(name, e);
     SaveManager.instance.SaveData(); // save the newly unlocked level
 }
Пример #34
0
        private static Node[] GetWorkflowTemplates(Node currentNode, TriggerEvent triggerEvent)
        {
            var listPath      = NodeHead.Get(currentNode.ContentListId).Path;
            var templatesPath = RepositoryPath.Combine(listPath, "WorkflowTemplates");

            Node[] templates;
            if (SearchManager.ContentQueryIsAllowed)
            {
                string query = null;
                switch (triggerEvent)
                {
                case TriggerEvent.Created: query = SafeQueries.WorkflowsAutostartWhenCreated; break;

                case TriggerEvent.Changed: query = SafeQueries.WorkflowsAutostartWhenChanged; break;

                case TriggerEvent.Published: query = SafeQueries.WorkflowsAutostartWhenPublished; break;

                default:
                    throw new SnNotSupportedException("Unkown TriggerEvent: " + triggerEvent);
                }
                var result = ContentQuery.Query(query, null, templatesPath);
                templates = result.Nodes.ToArray();
            }
            else
            {
                QueryPropertyData[] propData;
                switch (triggerEvent)
                {
                case TriggerEvent.Created:
                    // fieldClause = "+AutostartOnCreated:yes";
                    propData = new[] { new QueryPropertyData {
                                           PropertyName = "AutostartOnCreated", QueryOperator = Operator.Equal, Value = 1
                                       } };
                    break;

                case TriggerEvent.Changed:
                    // fieldClause = "+AutostartOnChanged:yes";
                    propData = new[] { new QueryPropertyData {
                                           PropertyName = "AutostartOnChanged", QueryOperator = Operator.Equal, Value = 1
                                       } };
                    break;

                case TriggerEvent.Published:
                    // fieldClause = "+(AutostartOnPublished:yes AutostartOnChanged:yes)";
                    propData = new[] { new QueryPropertyData {
                                           PropertyName = "AutostartOnPublished", QueryOperator = Operator.Equal, Value = 1
                                       } };
                    break;

                default:
                    throw new SnNotSupportedException("Unkown TriggerEvent: " + triggerEvent);
                }
                var queryPropertyData = new List <QueryPropertyData>(propData);
                var nodeType          = ActiveSchema.NodeTypes["Workflow"];
                templates = NodeQuery.QueryNodesByTypeAndPathAndProperty(nodeType, false, templatesPath, false, queryPropertyData).Nodes.ToArray();
                if (templates.Length == 0 && triggerEvent == TriggerEvent.Published)
                {
                    propData = new[] { new QueryPropertyData {
                                           PropertyName = "AutostartOnChanged", QueryOperator = Operator.Equal, Value = 1
                                       } };
                    templates = NodeQuery.QueryNodesByTypeAndPathAndProperty(nodeType, false, templatesPath, false, queryPropertyData).Nodes.ToArray();
                }
            }
            return(templates);
        }
Пример #35
0
 private static void Register(TriggerEvent triggerEvent)
 {
     Capture.AutoEmbedScreenshot(triggerEvent, null, new CaptureParameters() { Zoom = 0.25 });
 }
 void Invoke(GameObject collidedObject)
 {
     TriggerEvent?.Invoke(this, new TriggerEventArgs(triggersCache ?? (triggersCache = triggers.Select(t => t.Convert()).ToArray()), collidedObject));
 }
Пример #37
0
 private static void Register(TriggerEvent triggerEvent)
 {
     Capture.AutoEmbedRecording(triggerEvent, null, new CaptureParameters() { Zoom = 0.25 }, 5);
 }
Пример #38
0
 public void register(TriggerEvent aEnter, TriggerEvent aStay, TriggerEvent aExit)
 {
     m_Enter += aEnter;
     m_Stay += aStay;
     m_Exit += aExit;
 }
Пример #39
0
 public override TriggerStruct Cost(TriggerEvent trigger_event, Room room, Player player, ref object data, Player target, TriggerStruct trigger_struct)
 {
     room.ShowGeneral(player, false, true);
     return(new TriggerStruct());
 }
Пример #40
0
 public void Execute(TriggerEvent triggerEvent)
 {
     Check(triggerEvent.Entities.EntityA, triggerEvent.Entities.EntityB);
     Check(triggerEvent.Entities.EntityB, triggerEvent.Entities.EntityA);
 }
Пример #41
0
        public override bool Effect(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player target, TriggerStruct trigger_info)
        {
            if (room.ContainsTag("SkipGameRule") && (bool)room.GetTag("SkipGameRule"))
            {
                room.RemoveTag("SkipGameRule");
                return(false);
            }

            // Handle global events
            if (player == null)
            {
                if (triggerEvent == TriggerEvent.GameStart)
                {
                    OnGameStart(room, ref data);
                }

                if (triggerEvent != TriggerEvent.BeforeCardsMove && triggerEvent != TriggerEvent.CardsMoveOneTime)
                {
                    return(false);
                }
            }

            switch (triggerEvent)
            {
            case TriggerEvent.TurnStart:
                OnTurnStart(room, player, ref data);
                break;

            case TriggerEvent.EventPhaseProceeding:
                OnPhaseProceed(room, player, ref data);
                break;

            case TriggerEvent.EventPhaseEnd:
                OnPhaseEnd(room, player, ref data);
                break;

            case TriggerEvent.EventPhaseChanging:
                OnPhaseChanging(room, player, ref data);
                break;

            case TriggerEvent.PreCardUsed:
                OnPreCardUsed(room, player, ref data);
                break;

            case TriggerEvent.CardUsed:
                OnCardUsed(room, player, ref data);
                break;

            case TriggerEvent.CardFinished:
                CardUseStruct use = (CardUseStruct)data;
                room.ClearCardFlag(use.Card);

                //以askforcard形式使用的卡牌没有onUse的trigger,但有finish
                if (use.Reason != CardUseStruct.CardUseReason.CARD_USE_REASON_RESPONSE)
                {
                    List <CardUseStruct> use_list = (List <CardUseStruct>)room.GetTag("card_proceeing");                      //remove when finished
                    if (use_list.Count > 0)
                    {
                        use_list.RemoveAt(use_list.Count - 1);
                    }
                    room.SetTag("card_proceeing", use_list);

                    //room.RemoveTag("targets" + RoomLogic.CardToString(room, use.Card));
                }

                if (Engine.GetFunctionCard(use.Card.Name).IsNDTrick())
                {
                    room.RemoveTag(RoomLogic.CardToString(room, use.Card) + "HegnullificationTargets");
                }

                foreach (Client p in room.Clients)
                {
                    room.DoNotify(p, CommandType.S_COMMAND_NULLIFICATION_ASKED, new List <string> {
                        "."
                    });
                }
                if (Engine.GetFunctionCard(use.Card.Name) is Slash)
                {
                    use.From.RemoveTag("Jink_" + RoomLogic.CardToString(room, use.Card));
                }

                break;

            case TriggerEvent.EventAcquireSkill:
            case TriggerEvent.EventLoseSkill:
                InfoStruct info       = (InfoStruct)data;
                string     skill_name = info.Info;
                Skill      skill      = Engine.GetSkill(skill_name);
                bool       refilter   = skill is FilterSkill;

                if (!refilter && skill is TriggerSkill)
                {
                    TriggerSkill trigger = (TriggerSkill)skill;
                    ViewAsSkill  vsskill = trigger.ViewAsSkill;
                    if (vsskill != null && (vsskill is FilterSkill))
                    {
                        refilter = true;
                    }
                }

                if (refilter)
                {
                    room.FilterCards(player, player.GetCards("he"), triggerEvent == TriggerEvent.EventLoseSkill);
                }

                CheckBigKingdoms(room);
                break;

            case TriggerEvent.PostHpReduced:
                if (player.Hp > 0 || player.HasFlag("Global_Dying"))     // newest GameRule -- a player cannot enter dying when it is dying.
                {
                    break;
                }
                if (data is DamageStruct damage)
                {
                    room.EnterDying(player, damage);
                }
                else
                {
                    room.EnterDying(player, new DamageStruct());
                }

                break;

            case TriggerEvent.AskForPeaches:
                OnAskforPeach(room, player, ref data);
                break;

            case TriggerEvent.AskForPeachesDone:
            {
                if (player.Hp <= 0 && player.Alive)
                {
                    DyingStruct dying = (DyingStruct)data;
                    room.KillPlayer(player, dying.Damage);
                }

                break;
            }

            case TriggerEvent.ConfirmDamage:
            {
                damage = (DamageStruct)data;
                if (damage.Card != null && damage.To.GetMark("SlashIsDrank") > 0)
                {
                    LogMessage log = new LogMessage
                    {
                        Type = "#AnalepticBuff",
                        From = damage.From.Name,
                        To   = new List <string> {
                            damage.To.Name
                        },
                        Arg = damage.Damage.ToString()
                    };

                    damage.Damage += damage.To.GetMark("SlashIsDrank");
                    damage.To.SetMark("SlashIsDrank", 0);

                    log.Arg2 = damage.Damage.ToString();

                    room.SendLog(log);

                    data = damage;
                }

                break;
            }

            case TriggerEvent.DamageDone:
            {
                damage = (DamageStruct)data;
                if (damage.From != null && !damage.From.Alive)
                {
                    damage.From = null;
                }
                data = damage;
                room.SendDamageLog(damage);

                bool reduce = !room.ApplyDamage(player, damage);
                if (damage.Nature != DamageNature.Normal && player.Chained && !damage.Chain)
                {
                    int n = room.ContainsTag("is_chained") ? (int)room.GetTag("is_chained") : 0;
                    n++;
                    room.SetTag("is_chained", n);
                }
                if (reduce)
                {
                    room.RoomThread.Trigger(TriggerEvent.PostHpReduced, room, player, ref data);
                }

                break;
            }

            case TriggerEvent.DamageComplete:
            {
                damage = (DamageStruct)data;
                if (damage.Prevented)
                {
                    return(false);
                }
                if (damage.Nature != DamageNature.Normal && player.Chained)
                {
                    room.ChainedRemoveOnDamageDone(player);
                    //player.Chained = false;
                    //room.BroadcastProperty(player, "Chained");
                }
                if (room.ContainsTag("is_chained") && (int)room.GetTag("is_chained") > 0)
                {
                    if (damage.Nature != DamageNature.Normal && !damage.Chain)
                    {
                        // iron chain effect
                        int n = (int)room.GetTag("is_chained");
                        n--;
                        room.SetTag("is_chained", n);
                        List <Player> chained_players = new List <Player>();
                        if (!room.Current.Alive)
                        {
                            chained_players = room.GetOtherPlayers(room.Current);
                        }
                        else
                        {
                            chained_players = room.GetAllPlayers();
                        }
                        foreach (Player chained_player in chained_players)
                        {
                            if (chained_player.Chained)
                            {
                                Thread.Sleep(500);
                                LogMessage log = new LogMessage
                                {
                                    Type = "#IronChainDamage",
                                    From = chained_player.Name
                                };
                                room.SendLog(log);

                                DamageStruct chain_damage = damage;
                                chain_damage.To             = chained_player;
                                chain_damage.Chain          = true;
                                chain_damage.Transfer       = false;
                                chain_damage.TransferReason = null;

                                room.Damage(chain_damage);
                            }
                        }
                    }
                }
                foreach (Player p in room.GetAllPlayers())
                {
                    if (p.HasFlag("Global_DFDebut"))
                    {
                        p.SetFlags("-Global_DFDebut");
                        room.RoomThread.Trigger(TriggerEvent.DFDebut, room, p);
                    }
                }
                break;
            }

            case TriggerEvent.CardEffect:
            {
                if (data is CardEffectStruct effect)
                {
                    if (Engine.GetFunctionCard(effect.Card.Name) is DelayedTrick)
                    {
                        CardMoveReason reason = new CardMoveReason(CardMoveReason.MoveReason.S_REASON_DELAYTRICK_EFFECT,
                                                                   effect.To.Name, effect.Card.Skill, effect.Card.Name)
                        {
                            CardString = RoomLogic.CardToString(room, effect.Card)
                        };

                        room.MoveCardTo(effect.Card, effect.To, Place.PlaceTable, reason, true);
                        Thread.Sleep(500);
                    }
                }
                break;
            }

            case TriggerEvent.CardEffected:
            {
                if (data is CardEffectStruct effect)
                {
                    FunctionCard fcard = Engine.GetFunctionCard(effect.Card.Name);
                    if (!(fcard is Slash) && effect.Nullified)
                    {
                        LogMessage log = new LogMessage
                        {
                            Type = "#Cardnullified",
                            From = effect.To.Name,
                            Arg  = effect.Card.Name
                        };
                        room.SendLog(log);

                        return(true);
                    }
                    else if (fcard.TypeID == CardType.TypeTrick && room.IsCanceled(effect))
                    {
                        effect.To.SetFlags("Global_NonSkillnullify");
                        return(true);
                    }
                    object _effect = effect;
                    room.RoomThread.Trigger(TriggerEvent.CardEffectConfirmed, room, effect.To, ref _effect);

                    room.SetTag("Global_CardEffected", _effect);                                                 //for AI
                    if (effect.To.Alive || fcard is Slash)
                    {
                        fcard.OnEffect(room, effect);
                    }

                    room.RemoveTag("Global_CardEffected");
                }

                break;
            }

            case TriggerEvent.SlashEffected:
            {
                SlashEffectStruct effect = (SlashEffectStruct)data;
                if (effect.Nullified)
                {
                    LogMessage log = new LogMessage
                    {
                        Type = "#Cardnullified",
                        From = effect.To.Name,
                        Arg  = effect.Slash.Name
                    };
                    room.SendLog(log);

                    return(true);
                }

                if (effect.Jink_num > 0)
                {
                    room.RoomThread.Trigger(TriggerEvent.SlashProceed, room, effect.From, ref data);
                }
                else
                {
                    room.SlashResult(effect, null);
                }
                break;
            }

            case TriggerEvent.SlashProceed:
            {
                SlashEffectStruct effect  = (SlashEffectStruct)data;
                string            slasher = effect.From.Name;
                if (!effect.To.Alive)
                {
                    break;
                }
                if (effect.Jink_num == 1)
                {
                    CardResponseStruct resp = room.AskForCard(effect.To, Slash.ClassName, Jink.ClassName, "slash-jink:" + slasher, data, HandlingMethod.MethodUse, null, effect.From, false, false);
                    room.SlashResult(effect, room.IsJinkEffected(effect.To, resp) ? resp.Card : null);
                }
                else
                {
                    WrappedCard jink = new WrappedCard(DummyCard.ClassName);
                    for (int i = effect.Jink_num; i > 0; i--)
                    {
                        string             prompt = string.Format("@multi-jink{0}:{1}::{2}", i == effect.Jink_num ? "-start" : string.Empty, slasher, i);
                        CardResponseStruct resp   = room.AskForCard(effect.To, Slash.ClassName, Jink.ClassName, prompt, data, HandlingMethod.MethodUse, null, effect.From, false, false);

                        if (!room.IsJinkEffected(effect.To, resp))
                        {
                            //delete jink;
                            room.SlashResult(effect, null);
                            return(false);
                        }
                        else
                        {
                            jink.AddSubCard(resp.Card);
                        }
                    }
                    room.SlashResult(effect, jink);
                }

                break;
            }

            case TriggerEvent.SlashHit:
            {
                SlashEffectStruct effect = (SlashEffectStruct)data;
                if (effect.Drank > 0)
                {
                    effect.To.SetMark("SlashIsDrank", effect.Drank);
                }
                room.Damage(new DamageStruct(effect.Slash, effect.From, effect.To, 1, effect.Nature));

                break;
            }

            case TriggerEvent.BeforeGameOverJudge:
            {
                if (!player.General1Showed)
                {
                    room.ShowGeneral(player, true, false, false);
                }
                if (!player.General2Showed)
                {
                    room.ShowGeneral(player, false, false, false);
                }
                break;
            }

            case TriggerEvent.GameOverJudge:
            {
                string winner = GetWinner(room);
                if (!string.IsNullOrEmpty(winner))
                {
                    room.GameOver(winner);
                    return(true);
                }

                break;
            }

            case TriggerEvent.BuryVictim:
            {
                OnBuryVictim(room, player, ref data);
                break;
            }

            case TriggerEvent.StartJudge:
            {
                int         card_id      = room.GetNCards(1)[0];
                JudgeStruct judge_struct = (JudgeStruct)data;
                judge_struct.Card = room.GetCard(card_id);

                LogMessage log = new LogMessage
                {
                    Type     = "$InitialJudge",
                    From     = judge_struct.Who.Name,
                    Card_str = card_id.ToString()
                };
                room.SendLog(log);

                room.MoveCardTo(judge_struct.Card, null, judge_struct.Who, Place.PlaceJudge,
                                new CardMoveReason(CardMoveReason.MoveReason.S_REASON_JUDGE, judge_struct.Who.Name, null, null, judge_struct.Reason), true);

                Thread.Sleep(500);
                bool effected = judge_struct.Good == Engine.MatchExpPattern(room, judge_struct.Pattern, judge_struct.Who, judge_struct.Card);
                judge_struct.UpdateResult(effected);
                data = judge_struct;
                break;
            }

            case TriggerEvent.FinishRetrial:
            {
                JudgeStruct judge = (JudgeStruct)data;
                LogMessage  log   = new LogMessage
                {
                    Type     = "$JudgeResult",
                    From     = player.Name,
                    Card_str = RoomLogic.CardToString(room, judge.Card)
                };
                room.SendLog(log);

                //Thread.Sleep(500);
                if (judge.PlayAnimation)
                {
                    room.SendJudgeResult(judge);
                    Thread.Sleep(800);
                }

                break;
            }

            case TriggerEvent.FinishJudge:
            {
                JudgeStruct judge = (JudgeStruct)data;

                if (room.GetCardPlace(judge.Card.Id) == Place.PlaceJudge)
                {
                    CardMoveReason reason = new CardMoveReason(CardMoveReason.MoveReason.S_REASON_JUDGEDONE, judge.Who.Name, null, judge.Reason);
                    room.MoveCardTo(judge.Card, judge.Who, null, Place.DiscardPile, reason, true);
                }

                break;
            }

            case TriggerEvent.ChoiceMade:
            {
                foreach (Player p in room.GetAlivePlayers())
                {
                    List <string> flags = new List <string>(p.Flags);
                    foreach (string flag in flags)
                    {
                        if (flag.StartsWith("Global_") && flag.EndsWith("Failed"))
                        {
                            p.SetFlags("-" + flag);
                        }
                    }
                }
                break;
            }

            case TriggerEvent.GeneralShown:
            {
                string winner = GetWinner(room);
                if (!string.IsNullOrEmpty(winner))
                {
                    room.GameOver(winner);         // if all hasShownGenreal, and they are all friend, game over.
                    return(true);
                }
                if (!room.ContainsTag("TheFirstToShowRewarded"))
                {
                    room.SetTag("TheFirstToShowRewarded", true);
                    room.SetPlayerMark(player, "@pioneer", 1);
                    room.AttachSkillToPlayer(player, "pioneer");
                }
                if (player.Alive && player.HasShownAllGenerals())
                {
                    if (player.GetMark("CompanionEffect") > 0)
                    {
                        room.RemovePlayerMark(player, "CompanionEffect");
                        room.DoSuperLightbox(player, string.Empty, "companion");
                        room.SetPlayerMark(player, "@companion", 1);
                        room.AttachSkillToPlayer(player, "companion");
                    }
                    if (player.GetMark("HalfMaxHpLeft") > 0)
                    {
                        room.RemovePlayerMark(player, "HalfMaxHpLeft");
                        room.SetPlayerMark(player, "@megatama", 1);
                        room.AttachSkillToPlayer(player, "megatama");
                    }
                }
                CheckBigKingdoms(room);
                break;
            }

            case TriggerEvent.BeforeCardsMove:
            {
                if (data is CardsMoveOneTimeStruct move)
                {
                    bool should_find_io = false;
                    if (move.To_place == Place.DiscardPile)
                    {
                        if (move.Reason.Reason != CardMoveReason.MoveReason.S_REASON_USE)
                        {
                            should_find_io = true;         // not use
                        }
                        else if (move.Card_ids.Count > 1)
                        {
                            should_find_io = true;         // use card isn't IO
                        }
                        else
                        {
                            WrappedCard card = room.GetCard(move.Card_ids[0]);
                            if (card.Name == Edict.ClassName && !card.HasFlag("edict_order_normal_use"))
                            {
                                should_find_io = true;         // use card isn't IO
                            }
                        }
                    }
                    if (should_find_io)
                    {
                        foreach (int id in move.Card_ids)
                        {
                            WrappedCard card = room.GetCard(id);
                            if (card.Name == Edict.ClassName)
                            {
                                room.MoveCardTo(card, null, Place.PlaceTable, true);
                                room.AddToPile(room.Players[0], "#edict", card, false);
                                LogMessage log = new LogMessage
                                {
                                    Type = "#RemoveEdict",
                                    Arg  = Edict.ClassName
                                };
                                room.SendLog(log);
                                room.SetTag("EdictInvoke", true);
                                room.SetTag("EdictCard", card);
                                int i = move.Card_ids.IndexOf(id);
                                move.From_places.RemoveAt(i);
                                move.Open.RemoveAt(i);
                                move.From_pile_names.RemoveAt(i);
                                move.Card_ids.Remove(id);
                                data = move;
                                break;
                            }
                        }
                    }
                }
                break;
            }

            case TriggerEvent.Death:
            {
                OnDeath(room, player, ref data);
                break;
            }

            case TriggerEvent.CardsMoveOneTime:
            {
                if (data is CardsMoveOneTimeStruct move)
                {
                    if (move.From != null && move.From_places.Contains(Place.PlaceEquip))
                    {
                        foreach (int id in move.Card_ids)
                        {
                            WrappedCard card = room.GetCard(id);
                            if (card.Name == JadeSeal.ClassName)
                            {
                                CheckBigKingdoms(room);
                                break;
                            }
                        }
                    }

                    if (move.To != null && move.To_place == Place.PlaceEquip)
                    {
                        foreach (int id in move.Card_ids)
                        {
                            WrappedCard card = room.GetCard(id);
                            if (card.Name == JadeSeal.ClassName)
                            {
                                CheckBigKingdoms(room);
                                break;
                            }
                        }
                    }
                }

                break;
            }

            default:
                break;
            }

            return(false);
        }
Пример #42
0
 /// <summary>
 /// Automatically embeds a screenshot when a trigger event occurs.
 /// </summary>
 /// <remarks>
 /// <para>
 /// If screenshots cannot be captured, the method will embed a warning message to that effect.
 /// </para>
 /// </remarks>
 /// <param name="triggerEvent">The trigger event.</param>
 /// <param name="attachmentName">The name to give the image attachment, or null to assign one automatically.</param>
 /// <seealso cref="TestContext.AutoExecute(TriggerEvent, Action)"/>
 public static void AutoEmbedScreenshot(TriggerEvent triggerEvent, string attachmentName)
 {
     AutoEmbedScreenshot(triggerEvent, attachmentName, new CaptureParameters());
 }
 // unsafe writing to this?
 public void Execute(TriggerEvent triggerEvent)
 {
     pCounter[0]++;
 }
Пример #44
0
 /// <summary>
 /// Automatically embeds a video of the test run from this point forward when a trigger event occurs.
 /// </summary>
 /// <remarks>
 /// <para>
 /// Recording a screen capture video can be very CPU and space intensive particularly
 /// when running tests on a single-core CPU.  We recommend calling
 /// <see cref="AutoEmbedRecording(TriggerEvent, string, CaptureParameters, double)" /> with
 /// a <see cref="CaptureParameters.Zoom" /> factor of 0.25 or less and a frame rate
 /// of no more than 5 to 10 frames per second.
 /// </para>
 /// <para>
 /// If screenshots cannot be captured, the method will embed a warning message to that effect.
 /// </para>
 /// </remarks>
 /// <param name="triggerEvent">The trigger event.</param>
 /// <param name="attachmentName">The name to give the video attachment, or null to assign one automatically.</param>
 /// <seealso cref="TestContext.AutoExecute(TriggerEvent, Action)"/>
 public static void AutoEmbedRecording(TriggerEvent triggerEvent, string attachmentName)
 {
     AutoEmbedRecording(triggerEvent, attachmentName, new CaptureParameters(), 5);
 }
Пример #45
0
 private static void Register(TriggerEvent triggerEvent)
 {
     TestContext.CurrentContext.AutoExecute(triggerEvent,
         () => TestLog.WriteLine("Triggered 1"));
     TestContext.CurrentContext.AutoExecute(triggerEvent,
         () => TestLog.WriteLine("Triggered 2"),
         () => TestLog.WriteLine("Cleanup"));
 }
 private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args)
 {
     TryEmitSound(component);
     args.Handled = true;
 }
Пример #47
0
 public abstract void OnEvent(TriggerEvent triggerEvent, Room room, Player player, object data);
Пример #48
0
        public void AutoExecute(TriggerEvent triggerEvent, Action triggerAction, Action cleanupAction)
        {
            if (triggerAction == null)
                throw new ArgumentNullException("triggerAction");

            Finishing += (sender, e) =>
            {
                if (IsTriggerEventSatisfied(triggerEvent))
                {
                    try
                    {
                        triggerAction();
                    }
                    catch (Exception ex)
                    {
                        UnhandledExceptionPolicy.Report("An exception occurred while performing an auto-execute trigger action.", ex);
                    }
                }

                if (cleanupAction != null)
                {
                    try
                    {
                        cleanupAction();
                    }
                    catch (Exception ex)
                    {
                        UnhandledExceptionPolicy.Report("An exception occurred while performing an auto-execute cleanup action.", ex);
                    }
                }
            };
        }
Пример #49
0
        //     double getCurrentPriority() const
        //     {
        //         return current_priority;
        //     }
        //     void setCurrentPriority(double p) const
        //     {
        //         current_priority = p;
        //     }

        public void InsertPriority(TriggerEvent e, double value)
        {
            priority[e] = value;
        }
 /// <summary>
 /// Automatically embeds a screenshot when a trigger event occurs.
 /// </summary>
 /// <remarks>
 /// <para>
 /// If screenshots cannot be captured, the method will embed a warning message to that effect.
 /// </para>
 /// </remarks>
 /// <example>
 /// <code><![CDATA[
 /// [Test]
 /// [AutoEmbedScreenshot(TriggerEvent.TestPassed, Zoom = 0.25)]
 /// public void Test()
 /// {
 ///     // Code logic here.
 /// }
 /// ]]></code>
 /// </example>
 /// <param name="triggerEvent">The trigger event.</param>
 public AutoEmbedScreenshotAttribute(TriggerEvent triggerEvent)
 {
     this.triggerEvent = triggerEvent;
 }
        protected override void LoadContent(PloobsEngine.Engine.GraphicInfo GraphicInfo, PloobsEngine.Engine.GraphicFactory factory, IContentManager contentManager)
        {
            base.LoadContent(GraphicInfo, factory, contentManager);                        

            #region Trigger
            ///Criacao de um Trigger
            ///Create a trigger
            {
                ///Modelo cujo formato sera utilizado para disparar o trigger
                ///Model used as base the for the trigger
                SimpleModel sm = new SimpleModel(factory,"..\\Content\\Model\\cubo" );
                sm.SetTexture(factory.CreateTexture2DColor(1,1, Color.Red), TextureType.DIFFUSE); ///VERMELHO
                
                ///Criacao do Triangle Mesh
                ///Create the triangle mesh from the model
                TriangleMeshObject tm = new TriangleMeshObject(sm,new Vector3(200, 5, 0),Matrix.Identity,Vector3.One * 10,MaterialDescription.DefaultBepuMaterial());
                ///Criacao do Evento q sera disparado qd o trigger for acionado
                ///Pode-se criar outros tipos de eventos, basta extender a classe  IEvent
                ///O parametro passado eh o canal em que o trigger enviara suas mensagens
                ///Qualquer Entidade que extende IRecieveMessageEntity pode receber mensagens
                ///Create the eventr that the trigger will fire
                ///TriggerEvent is the name of the CHANNEL (SEE CHANGINGMESSAGESSCREEN.CS) where the trigger will send the messages. (you can change the name at your will, change also the channel that the other objects are listening)
                TriggerEvent te = new TriggerEvent("TriggerEvent","TriggerTest1");
                ///Criacao do Trigger
                ///Creating and adding the trigger to the physic world
                BepuPhysicWorld physicWorld = this.World.PhysicWorld as BepuPhysicWorld;
                System.Diagnostics.Debug.Assert(physicWorld != null);
                ///Setting triggers configuration, IT RECIEVES A TRIANGLE MESH
                ///TRIGGERS ARE ALWAYS TRIANGLE MESHES !!!!
                BepuTrigger bt = new BepuTrigger(physicWorld, tm, te, true, true, true, true);
                ///Adiciona o trigger ao mundo
                this.World.AddTrigger(bt);

                ///Adicona um objeto na posicao do trigger (Objeto FANTASMA, nao sera detectado pelo trigger)
                ///Facilita na localizacao do Trigger 
                ///CREATE A VISUAL OBJECT FOR THE TRIGGER (SO WE CAN SEE IT)
                ///GHOST OBJECT (NO COLLISION)
                GhostObject ghost = new GhostObject(new Vector3(200, 5, 0), Matrix.Identity,Vector3.One * 10);
                ///material and shader
                DeferredNormalShader shader = new DeferredNormalShader();
                IMaterial mat = new DeferredMaterial(shader);
                /// add the visual object (DONT NEED, WE ADDED JUST TO SEE THE TRIGGER)
                IObject obj3 = new IObject(mat, sm, ghost);
                this.World.AddObject(obj3);      
            }


            #endregion

            ///Criacao de um Objeto q recebera mensagens do trigger
            ///THIS OBJECT THAT WILL RECIEVE MESSAGE FROM the trigger
            #region Models
            {
                SimpleModel sm = new SimpleModel(factory,"..\\Content\\Model\\cubo");
                sm.SetTexture(factory.CreateTexture2DColor(1,1, Color.White), TextureType.DIFFUSE); ///BRANCO                
                IPhysicObject pi = new TriangleMeshObject( sm,new Vector3(20,50,50), Matrix.Identity,Vector3.One * 10,MaterialDescription.DefaultBepuMaterial());
                DeferredNormalShader shader = new DeferredNormalShader();                                
                IMaterial mat = new DeferredMaterial(shader);
                IObject obj3 = new IObject(mat, sm, pi);
                ///Cadastra uma funcao para tratar das mensagens recebidas
                ///existem outras maneiras de fazer isso, como Extender a classe IObject e sobrescrever o metodo HandleMessage
                ///MESSAGE HANDLER
                obj3.OnRecieveMessage += new OnRecieveMessage(obj3_OnRecieveMessage);
                this.World.AddObject(obj3);
                ///Adiciona o Objeto criado ao grupo "TriggerEvent" que recebera as mensagens do trigger
                ///Register to recieve TriggerEvent Messages (registering to the channel)
                EntityMapper.getInstance().AddgrouptagRecieveEntity("TriggerEvent", obj3);
            }


            ///Cenario de sempre
            {
                SimpleModel sm = new SimpleModel(factory, "..\\Content\\Model\\cenario");                
                IPhysicObject pi = new TriangleMeshObject(sm,Vector3.Zero,Matrix.Identity,Vector3.One,MaterialDescription.DefaultBepuMaterial());
                DeferredNormalShader shader = new DeferredNormalShader();                
                IMaterial mat = new DeferredMaterial(shader);
                IObject obj3 = new IObject(mat, sm, pi);
                this.World.AddObject(obj3);
            }
            

            #endregion        
    
            ///Demonstracao de que qualquer entidade pode receber mensagens
            ///Olhar a implementacao desta classe, esta no fim deste arquivo
            ///Creating an entity to recieve the trigger message also
            ///JUST to show that everyone can recieve messages
            rmessage = new ReciveMessage();

            cam = new CameraFirstPerson(GraphicInfo);            
            cam.FarPlane = 2000;

            lt = new LightThrowBepu(this.World, factory);

            #region NormalLight
            ///Conjunto de luzes direcionais
            DirectionalLightPE ld1 = new DirectionalLightPE(Vector3.Left, Color.White);
            DirectionalLightPE ld2 = new DirectionalLightPE(Vector3.Right, Color.White);
            DirectionalLightPE ld3 = new DirectionalLightPE(Vector3.Backward, Color.White);
            DirectionalLightPE ld4 = new DirectionalLightPE(Vector3.Forward, Color.White);
            DirectionalLightPE ld5 = new DirectionalLightPE(Vector3.Down, Color.White);
            float li = 0.4f;
            ld1.LightIntensity = li;
            ld2.LightIntensity = li;
            ld3.LightIntensity = li;
            ld4.LightIntensity = li;
            ld5.LightIntensity = li;
            this.World.AddLight(ld1);
            this.World.AddLight(ld2);
            this.World.AddLight(ld3);
            this.World.AddLight(ld4);
            this.World.AddLight(ld5);
            #endregion

            this.World.CameraManager.AddCamera(cam);
            
        }