/// <summary>
 /// Initializes the new instance of the <see cref="DefaultDribbleState"/> class.
 /// </summary>
 public override void Initialize()
 {
     StateChain.Add(this);
     StateChain.Add(DribbleState.Instance);
     StateCondition.Add(DribbleState.Instance, ValidateDefaultDribbleToDribble);
     StateCondition.Add(this, ValidateDefaultDribbleToDefaultDribble);
 }
示例#2
0
    /// <summary>
    /// Creates a new EventDescriptor from metadata
    /// </summary>
    public EventDescriptor(
        string name,
        Type type,
        Type[] requiredTypes,
        string[] sentiments,
        StateCondition[] stateReqs,
        RelationCondition[] relationReqs,
        RuleCondition[] ruleReqs,
        StateCondition[] stateEffects,
        RelationCondition[] relationEffects,
        int[] canEqualPairs)
    {
        this.Name = name;

        this.Type = type;
        this.RequiredTypes = requiredTypes;
        this.Sentiments = sentiments;

        this.StateReqs = stateReqs;
        this.RelationReqs = relationReqs;
        this.RuleReqs = ruleReqs;
        this.StateEffects = stateEffects;
        this.RelationEffects = relationEffects;

        this.StateRequirements = this.CollectStateRequirements();
        this.canEqual = this.PopulateCanEqual(canEqualPairs);
    }
        private static void ProcessConditionUsages(
            StateMachine stateMachine,
            ConditionUsage[] conditionUsages,
            Dictionary <ScriptableObject, object> createdInstances,
            out StateCondition[] conditions,
            out int[] resultGroups)
        {
            int count = conditionUsages.Length;

            conditions = new StateCondition[count];
            for (int i = 0; i < count; i++)
            {
                conditions[i] = conditionUsages[i].Condition.GetCondition(
                    stateMachine, conditionUsages[i].ExpectedResult == Result.True, createdInstances);
            }


            List <int> resultGroupsList = new List <int>();

            for (int i = 0; i < count; i++)
            {
                resultGroupsList.Add(1);
                int idx = resultGroupsList.Count - 1;
                while (i < count - 1 && conditionUsages[i].Operator == Operator.And)
                {
                    i++;
                    resultGroupsList[idx]++;
                }
            }

            resultGroups = resultGroupsList.ToArray();
        }
示例#4
0
        public void SMG_04_05_Simplyify()
        {
            var sm    = new StateMachine();
            var stype = sm.AddSimpleType("S");

            stype.AddStateNames(new[] { "A", "B", "C", "D", "X" });
            var v = sm.AddVariable("v", stype);
            var u = sm.AddVariable("u", stype);

            // A + B
            var c1 = new StateCondition(v);

            c1.SetPreStates(new[] { 0, 1 });

            // D
            var c2 = new StateCondition(v);

            c2.SetPreStates(new[] { 3 });

            // A
            var c3 = new StateCondition(v);

            c2.SetPreStates(new[] { 0 });

            var c1dc = Gate.ComposeAND(Gate.Invert(c1.Decompose(ConditionMode.Pre)), Gate.Invert(c2.Decompose(ConditionMode.Pre)));

            Trace("1 === {0}", c1dc);

            return;
        }
示例#5
0
        public void SMG_03_StateCondition()
        {
            TraceFlags.ShowDepencencyAnalysis = true;

            var sm    = new StateMachine();
            var stype = new SimpleStateType("State");

            stype.AddStateNames(new[] { "A", "B", "C" });
            var s = sm.AddVariable("s", stype);
            var t = sm.AddVariable("t", stype);

            var c = new StateCondition(s);

            c.SetPreStates("A,B");
            c.SetPostStates("C");

            var e1 = sm.AddEvent("e1");

            var trigger = new Trigger(e1, c);

            sm.AddTrigger(trigger);

            var gc1 = new StateCondition(s);

            gc1.SetPreStates("A");
            // gc1.SetPostStates("C");
            sm.AddGuard(gc1, GuardType.LEAVE, "g1");

            var gc2 = new StateCondition(s);

            gc2.SetPreStates("C");
            sm.AddGuard(gc2, GuardType.ENTER, "g2");

            {
                var c1 = new StateCondition(t);
                c1.SetPreStates("A");

                var c2 = new StateCondition(s);
                c2.SetPreStates("A");
            }

            sm.Calculate();

            // sm.Dump();

            var e = sm.Events.First();

            Assert.AreEqual("e1", e.Name);
            Assert.AreEqual(2, e.Triggers.Count);

            var t1 = e.Triggers[0];
            var t2 = e.Triggers[1];

            Assert.AreEqual(2, t1.Guards.Count);
            Assert.AreEqual(1, t2.Guards.Count);

            Assert.IsTrue(t1.Guards.Any(g => g.Name == "g1"));
            Assert.IsTrue(t1.Guards.Any(g => g.Name == "g2"));
            Assert.IsTrue(t2.Guards.Any(g => g.Name == "g2"));
        }
示例#6
0
        /// <summary>
        /// Expresses a post state of a variable as an expression of variable preconditions.
        /// </summary>
        /// <param name="v">The variables</param>
        /// <param name="poststateindex">The post state to express.</param>
        /// <returns>The resulting gate.</returns>
        public IGate InferPostState(Variable v, int poststateindex)
        {
            IGate r = new FalseGate();
            VariableTransitions vt;
            var match = false;

            if (_variables.TryGetValue(v.Index, out vt))
            {
                foreach (var t in vt.Where(t => t.NewStateIndexes.Contains(poststateindex)))
                {
                    foreach (var i in t.PreStateIndexes)
                    {
                        var e = t.Parent.CreateElementaryCondition(i);
                        r     = Gate.ComposeOR(r, e);
                        match = true;
                    }
                }

                if (!match)
                {
                    var sc = new StateCondition(vt.Variable);
                    sc.SetPreStates(new int[] { poststateindex });
                    r = sc.CreateElementaryCondition(poststateindex);
                }
            }

            Gate.TraceLabel(new ElementaryCondition(v, poststateindex), r, "infer state");

            return(r);
        }
示例#7
0
        private ICondition ReplaceCondition(ICondition c, bool post)
        {
            if (c is StateCondition)
            {
                var sc = (StateCondition)c;

                if (_transitions.Contains(sc.Variable))
                {
                    // replace the transition condition with either its pre or post states
                    if (sc.IsTransition)
                    {
                        // transition condition
                        if (!post)
                        {
                            // replace with precondition
                            var rc = new StateCondition(sc);
                            rc.SetPreStates(sc.StateIndexes);
                            c = rc;
                        }
                        else
                        {
                            // replace with postcondition
                            var rc = new StateCondition(sc);
                            rc.SetPreStates(sc.PostStateIndexes);
                            c = rc;
                        }
                    }
                }
            }

            return(c);
        }
示例#8
0
 public BaoVietTest()
 {
     Manager = new Manager();
     IStateCondition condiction = new StateCondition(720);
     Manager.Current.DeviceService = new DeviceService(Manager, condiction);
     Manager.Database.CreateTable<FeedItem>();
     Assert.IsTrue(true);
 }
    private StateTransition AddTransition(EGameState stateIN, StateCondition condition, GameState stateOUT, AfterTransition afterTransition)
    {
        StateTransition st = new StateTransition();

        st.stateIN         = stateIN;
        st.condition       = condition;
        st.stateOUT        = stateOUT;
        st.afterTransition = afterTransition;
        return(st);
    }
示例#10
0
    bool UpdateCurrentStateTime()
    {
        StateCondition condition = m_conditions[(int)m_state];
        float          elapsed   = Time.time - condition.m_startTime;

        if (elapsed > condition.m_length)
        {
            return(false);
        }
        return(true);
    }
        internal StateCondition GetCondition(StateMachine stateMachine, bool expectedResult, Dictionary <ScriptableObject, object> createdInstances)
        {
            if (createdInstances.TryGetValue(this, out var cond))
            {
                return(new StateCondition((Condition)cond, expectedResult));
            }

            var condition = new StateCondition(CreateCondition(), expectedResult);

            createdInstances.Add(this, condition._condition);
            condition._condition.Awake(stateMachine);
            return(condition);
        }
示例#12
0
 public bool TryTransitionDynamic(out StateCondition stateCondition)
 {
     foreach (StateCondition transitionCondition in dynamicTransitions)
     {
         if (transitionCondition.Condition())
         {
             stateCondition = transitionCondition;
             return(true);
         }
     }
     stateCondition = null;
     return(false);
 }
示例#13
0
    bool findAndExecuteCondState()
    {
        StateCondition maxPriorityCond = null;
        int            currPriority    = -1;

        foreach (StateCondition cond in mCondArr)
        {
            if (cond.cond() && cond.priority > currPriority && !mCurrState.GetType().Name.Equals(cond.state))
            {
                currPriority    = cond.priority;
                maxPriorityCond = cond;
            }
        }
        if (maxPriorityCond != null)
        {
            switchState(maxPriorityCond.state);
            return(true);
        }
        return(false);
    }
示例#14
0
    private void CheckTransition(StateCondition st)
    {
        for (int i = 0; i < _allTransitions.Count; i++)
        {
            if (
                _allTransitions[i].stateIN == _currentGameState.GetGameState() &&
                _allTransitions[i].condition == st
                )
            {
                _currentGameState.OnStateExit();
                if (_allTransitions[i].afterTransition != null)
                {
                    _allTransitions[i].afterTransition();
                }

                _currentGameState = _allTransitions[i].stateOUT;
                _currentGameState.OnStateEnter();
                return;
            }
        }
    }
示例#15
0
        void StateCondition(out ICondition cond)
        {
            string varname; Variable v; StateCondition scond = null; IdList pre, post;

            cond = null;

            Identifier(out varname);
            v = SM.GetVariable(varname);
            if (la.kind == 29)
            {
                Get();
                scond = new StateCondition(v);
                StateIdentifierList(out pre);
                scond.SetPreStates(pre);
                if (la.kind == 27)
                {
                    Get();
                    StateIdentifierList(out post);
                    scond.SetPostStates(post);
                }
                Expect(30);
            }
            cond = (ICondition)scond ?? new BooleanCondition(v);
        }
示例#16
0
 public StateWaitTime(StateCondition _condition)
 {
     m_Condition = _condition;
 }
示例#17
0
 public StateRequiredAttribute(int index, params StateName[] tags)
 {
     this.Condition = new StateCondition(index, tags);
 }
示例#18
0
    private void Update()
    {
        StateCondition st = _currentGameState.OnStateUpdate();

        CheckTransition(st);
    }
示例#19
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            Log.Debug(TAG, "OnCreate");
            base.OnCreate(savedInstanceState);

            int CommandId = Intent.Extras.GetInt(nameof(CommandModel.Id), 0);

            if (CommandId > 0)
            {
                lock (DatabaseContext.DbLocker)
                {
                    using (DatabaseContext db = new DatabaseContext(gs.DatabasePathBase))
                    {
                        command = db.Commands.Include(x => x.Script).Include(x => x.PortExecutionCondition).ThenInclude(x => x.Hardware).FirstOrDefault(x => x.Id == CommandId);
                    }
                }
            }

            AbstractSettingsManage.Command = command;
            List <string> commands_types_array = new List <string>(Resources.GetStringArray(Resource.Array.commands_types_array));

            switch (command.TypeCommand)
            {
            case TypesCommands.Port:
                TypesCommand.SetSelection(commands_types_array.IndexOf(GetString(Resource.String.command_type_array_item_port)));
                break;

            case TypesCommands.Controller:
                TypesCommand.SetSelection(commands_types_array.IndexOf(GetString(Resource.String.command_type_array_item_controller)));
                break;

            case TypesCommands.Exit:
                TypesCommand.SetSelection(commands_types_array.IndexOf(GetString(Resource.String.command_type_array_item_transit)));
                break;
            }

            ScriptId = command.ScriptId;

            DeleteCommand = new AppCompatButton(this)
            {
                Text = GetText(Resource.String.delete_title)
            };
            DeleteCommand.SetTextColor(Color.DarkRed);
            DeleteCommand.LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
            FooterLayout.AddView(DeleteCommand);

            HiddenCommandCheckBox.Checked = command.Hidden;
            CardTitle.Text    = command.Script.ToString();
            CardSubtitle.Text = command.ToString();
            PauseSecondsBeforeStarting.Text = command.PauseBeforeExecution.ToString();

            if (command.PortExecutionCondition != null)
            {
                RequiredCondition.Checked = true;

                HardwareCondition.Enabled = true;
                HardwareCondition.SetSelection(Hardwares.Keys.ToList().IndexOf(command.PortExecutionCondition.HardwareId));

                PortCondition.Enabled = true;
                PortsList_UpdateSpinner(command.PortExecutionCondition.HardwareId, ref PortCondition, command.PortExecutionCondition.Id);
                //PortCondition.SetSelection(Ports.Keys.ToList().IndexOf(command.PortExecutionCondition.Id));

                StateCondition.Enabled = true;
                StateCondition.SetSelection(GetIndexPortState(command.PortExecutionConditionAllowingState, new List <string>(Resources.GetStringArray(Resource.Array.required_condition_port_states_array))));
            }
        }
示例#20
0
 public bool TryActivateTrigger(TTrigger trigger, out StateCondition stateCondition)
 {
     return(staticTransitions.TryGetValue(trigger, out stateCondition));
 }
示例#21
0
    private EventTriggerItem_StateCondition GetStateOperation()
    {
        this.StatList.Clear();
        foreach (GameObject current in this.StateConditionList)
        {
            if (!(current == null))
            {
                StateCondition component = current.GetComponent <StateCondition>();
                if (!(component == null))
                {
                    if (component.IsOperation())
                    {
                        EventTriggerItem_StateConditionOperation component2 = current.GetComponent <EventTriggerItem_StateConditionOperation>();
                        component2.Clear();
                        this.StatList.Add(component2);
                        EventTriggerItem_StateCondition[] components = current.GetComponents <EventTriggerItem_StateCondition>();
                        if (components.Length > 1)
                        {
                            EventTriggerItem_StateCondition[] array = components;
                            for (int i = 0; i < array.Length; i++)
                            {
                                EventTriggerItem_StateCondition item = array[i];
                                if (!this.StatList.Contains(item))
                                {
                                    this.StatList.Add(item);
                                }
                            }
                        }
                    }
                    else
                    {
                        this.StatList.Add(current.GetComponent <EventTriggerItem_StateCondition>());
                    }
                }
            }
        }
        Stack <EventTriggerItem_StateConditionOperation> stack = new Stack <EventTriggerItem_StateConditionOperation>();
        EventTriggerItem_StateConditionOperation         eventTriggerItem_StateConditionOperation = null;
        EventTriggerItem_StateCondition eventTriggerItem_StateCondition = null;

        foreach (EventTriggerItem_StateCondition current2 in this.StatList)
        {
            if (!(current2 == null))
            {
                if (current2 is EventTriggerItem_StateConditionOperation)
                {
                    EventTriggerItem_StateConditionOperation eventTriggerItem_StateConditionOperation2 = current2 as EventTriggerItem_StateConditionOperation;
                    StateCondition_BracketOpen  x  = eventTriggerItem_StateConditionOperation2 as StateCondition_BracketOpen;
                    StateCondition_BracketClose x2 = eventTriggerItem_StateConditionOperation2 as StateCondition_BracketClose;
                    if (x != null)
                    {
                        if (eventTriggerItem_StateCondition != null && eventTriggerItem_StateConditionOperation == null)
                        {
                            eventTriggerItem_StateConditionOperation       = current2.gameObject.AddComponent <StateCondition_AND>();
                            eventTriggerItem_StateConditionOperation.lItem = eventTriggerItem_StateCondition;
                        }
                        if (eventTriggerItem_StateConditionOperation != null)
                        {
                            stack.Push(eventTriggerItem_StateConditionOperation);
                            eventTriggerItem_StateConditionOperation = null;
                            eventTriggerItem_StateCondition          = null;
                        }
                    }
                    else if (x2 != null)
                    {
                        if (stack.Count > 0)
                        {
                            eventTriggerItem_StateConditionOperation       = stack.Pop();
                            eventTriggerItem_StateConditionOperation.rItem = eventTriggerItem_StateCondition;
                            eventTriggerItem_StateCondition = eventTriggerItem_StateConditionOperation;
                        }
                    }
                    else
                    {
                        if (eventTriggerItem_StateCondition != null)
                        {
                            eventTriggerItem_StateConditionOperation2.lItem = eventTriggerItem_StateCondition;
                        }
                        eventTriggerItem_StateConditionOperation = eventTriggerItem_StateConditionOperation2;
                    }
                }
                else
                {
                    EventTriggerItem_StateCondition eventTriggerItem_StateCondition2 = current2;
                    if (eventTriggerItem_StateCondition != null && eventTriggerItem_StateConditionOperation == null)
                    {
                        eventTriggerItem_StateConditionOperation       = current2.gameObject.AddComponent <StateCondition_AND>();
                        eventTriggerItem_StateConditionOperation.lItem = eventTriggerItem_StateCondition;
                    }
                    if (eventTriggerItem_StateConditionOperation != null)
                    {
                        if (eventTriggerItem_StateConditionOperation.lItem == null)
                        {
                            eventTriggerItem_StateCondition = (eventTriggerItem_StateConditionOperation.lItem = eventTriggerItem_StateCondition2);
                        }
                        else if (eventTriggerItem_StateConditionOperation.rItem == null)
                        {
                            eventTriggerItem_StateConditionOperation.rItem = eventTriggerItem_StateCondition2;
                            eventTriggerItem_StateCondition = eventTriggerItem_StateConditionOperation;
                        }
                        else
                        {
                            eventTriggerItem_StateConditionOperation       = current2.gameObject.AddComponent <StateCondition_AND>();
                            eventTriggerItem_StateConditionOperation.lItem = eventTriggerItem_StateCondition;
                            eventTriggerItem_StateConditionOperation.rItem = eventTriggerItem_StateCondition2;
                            eventTriggerItem_StateCondition = eventTriggerItem_StateConditionOperation;
                        }
                    }
                    else
                    {
                        eventTriggerItem_StateCondition = eventTriggerItem_StateCondition2;
                    }
                }
            }
        }
        if (eventTriggerItem_StateCondition != null && eventTriggerItem_StateConditionOperation == null)
        {
            return(eventTriggerItem_StateCondition);
        }
        return(eventTriggerItem_StateConditionOperation);
    }
示例#22
0
 //Will set the comparator the the given one
 public StateEdge(StateNode from, StateNode end, StateCondition cond)
 {
     fromNode = from;
     endNode = end;
     condition = cond;
 }