Пример #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());
            }
        }
Пример #2
0
    // ゴーストの当たり判定などを行う関数
    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;
        }
    }
Пример #3
0
    protected EnterCode EnterBlockState(BLOCKSTATE value, bool syncenter = false)
    {
        var c = base.EnterBlockState(value);

        if (syncenter && c == EnterCode.Success)
        {
            SyncEvent(value.ToString());
        }
        return(c);
    }
Пример #4
0
        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);
        }