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()); } }
protected EnterCode EnterCondState(CONDSTATE value, bool syncenter = false) { var c = base.EnterCondState(value); if (syncenter && c == EnterCode.Success) { SyncEvent(value.ToString()); } return(c); }
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); }