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()); } }
// ゴーストの当たり判定などを行う関数 void Ghost() { // 使用済みブロック、床に衝突するまでの長さを求める int y; for (y = (int)myBlock.nowPosition.y; y < 20; y++) { bool empty = true; for (int i = 0; i < 4 && empty; i++) { if (y + myBlock.blockPosition[i].y < 0) { continue; } int x = (int)(myBlock.blockPosition[i].x + myBlock.nowPosition.x); if (y + myBlock.blockPosition[i].y >= 20) { empty = false; break; } BLOCKSTATE state = map[y + (int)myBlock.blockPosition[i].y, x]; if (state == BLOCKSTATE.USED) { empty = false; } } if (!empty) { break; } } // ゴースト更新 for (int j = 0; j < 20; j++) { for (int i = 0; i < 10; i++) { if (map[j, i] == BLOCKSTATE.GHOST) { map[j, i] = BLOCKSTATE.EMPTY; } } } for (int i = 0; i < 4; i++) { int x = (int)(myBlock.blockPosition[i].x + myBlock.nowPosition.x); if ((y + myBlock.blockPosition[i].y - 1) < 0) { continue; } if (map[y + (int)myBlock.blockPosition[i].y - 1, x] == BLOCKSTATE.USING) { continue; } map[y + (int)myBlock.blockPosition[i].y - 1, x] = BLOCKSTATE.GHOST; } }
protected EnterCode EnterBlockState(BLOCKSTATE value, bool syncenter = false) { var c = base.EnterBlockState(value); if (syncenter && c == EnterCode.Success) { SyncEvent(value.ToString()); } return(c); }
protected virtual EnterCode EnterBlockState(BLOCKSTATE value) { if (value == blockstate) { return(EnterCode.AlreadyIn); } switch (value) { case BLOCKSTATE.NONE: break; case BLOCKSTATE.PREIBI: PreIBIOnTime = timer.ElapsedMillisecond; if (ex.CondTestAtState != CONDTESTATSTATE.NONE) { condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), PreIBIOnTime); } break; case BLOCKSTATE.BLOCK: BlockOnTime = timer.ElapsedMillisecond; if (ex.CondTestAtState != CONDTESTATSTATE.NONE) { condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), BlockOnTime); } break; case BLOCKSTATE.SUFIBI: SufIBIOnTime = timer.ElapsedMillisecond; if (ex.CondTestAtState != CONDTESTATSTATE.NONE) { condtestmanager.AddInList(CONDTESTPARAM.Event, value.ToString(), SufIBIOnTime); } break; } blockstate = value; return(EnterCode.Success); }