Beispiel #1
0
        public void StartStopExperiment(bool isstart)
        {
            if (isstart)
            {
                OnBeginStartExperiment?.Invoke();

                condstate  = CONDSTATE.NONE;
                trialstate = TRIALSTATE.NONE;
                blockstate = BLOCKSTATE.NONE;
                condtestmanager.Clear();

                OnStartExperiment();
                PrepareCondition(regeneratecond);
                StartCoroutine(ExperimentStartSequence());
            }
            else
            {
                OnBeginStopExperiment?.Invoke();

                OnStopExperiment();
                islogicactive = false;

                // Push any condtest left
                condtestmanager.PushCondTest(timer.ElapsedMillisecond, ex.NotifyParam, ex.NotifyPerCondTest, true, true);
                StartCoroutine(ExperimentStopSequence());
            }
        }
Beispiel #2
0
    protected EnterCode EnterCondState(CONDSTATE value, bool syncenter = false)
    {
        var c = base.EnterCondState(value);

        if (syncenter && c == EnterCode.Success)
        {
            SyncEvent(value.ToString());
        }
        return(c);
    }
Beispiel #3
0
        protected virtual EnterCode EnterCondState(CONDSTATE value)
        {
            if (value == condstate)
            {
                return(EnterCode.AlreadyIn);
            }
            switch (value)
            {
            case CONDSTATE.NONE:
                break;

            case CONDSTATE.PREICI:
                PreICIOnTime = timer.ElapsedMillisecond;
                if (ex.CondTestAtState == CONDTESTATSTATE.PREICI)
                {
                    if (condmanager.IsCondRepeat(ex.CondRepeat))
                    {
                        StartStopExperiment(false);
                        return(EnterCode.NoNeed);
                    }
                    condtestmanager.NewCondTest(PreICIOnTime, ex.NotifyParam, ex.NotifyPerCondTest);
                }
                if (ex.CondTestAtState != CONDTESTATSTATE.NONE)
                {
                    condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), PreICIOnTime);
                }
                if (ex.PushCondAtState == PUSHCONDATSTATE.PREICI)
                {
                    SamplePushCondition();
                    if (ex.CondTestAtState != CONDTESTATSTATE.NONE)
                    {
                        condtestmanager.Add(CONDTESTPARAM.CondIndex, condmanager.condidx);
                        condtestmanager.Add(CONDTESTPARAM.CondRepeat, condmanager.condrepeat[condmanager.condidx]);
                        if (condmanager.nblock > 1)
                        {
                            condtestmanager.Add(CONDTESTPARAM.BlockIndex, condmanager.blockidx);
                            condtestmanager.Add(CONDTESTPARAM.BlockRepeat, condmanager.blockrepeat[condmanager.blockidx]);
                        }
                    }
                }
                break;

            case CONDSTATE.COND:
                CondOnTime = timer.ElapsedMillisecond;
                if (ex.CondTestAtState != CONDTESTATSTATE.NONE)
                {
                    condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), CondOnTime);
                }
                if (ex.PushCondAtState == PUSHCONDATSTATE.COND)
                {
                    SamplePushCondition();
                    if (ex.CondTestAtState != CONDTESTATSTATE.NONE)
                    {
                        condtestmanager.Add(CONDTESTPARAM.CondIndex, condmanager.condidx);
                        condtestmanager.Add(CONDTESTPARAM.CondRepeat, condmanager.condrepeat[condmanager.condidx]);
                        if (condmanager.nblock > 1)
                        {
                            condtestmanager.Add(CONDTESTPARAM.BlockIndex, condmanager.blockidx);
                            condtestmanager.Add(CONDTESTPARAM.BlockRepeat, condmanager.blockrepeat[condmanager.blockidx]);
                        }
                    }
                }
                break;

            case CONDSTATE.SUFICI:
                SufICIOnTime = timer.ElapsedMillisecond;
                if (ex.CondTestAtState != CONDTESTATSTATE.NONE)
                {
                    condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), SufICIOnTime);
                }
                break;
            }
            condstate = value;
            return(EnterCode.Success);
        }