コード例 #1
0
ファイル: CountdownBar.cs プロジェクト: jasmaa/protobowl-vr
    void Update()
    {
        // Check for mode update
        if (GameManager.instance.client.pb.state != oldState)
        {
            oldState = GameManager.instance.client.pb.state;
            if (oldState == Protobowl.GameState.RUNNING)
            {
                SetMode(Mode.RUNNING);
            }
            else if (oldState == Protobowl.GameState.BUZZED)
            {
                SetMode(Mode.BUZZED);
            }
            else if (oldState == Protobowl.GameState.PAUSED)
            {
                SetMode(Mode.PAUSED);
            }
            else if (oldState == Protobowl.GameState.PROMPTED)
            {
                SetMode(Mode.PROMPTED);
            }
            else if (oldState == Protobowl.GameState.IDLE)
            {
                SetMode(Mode.IDLE);
            }
        }

        // Update bar
        if (isMoving)
        {
            currTime = Mathf.Clamp(currTime + Time.deltaTime, 0, targetTime);
        }

        if (targetTime != 0)
        {
            movingBar.transform.GetComponent <RectTransform> ().localScale = new Vector3(initScale * currTime / targetTime, initScale, initScale);
        }
    }
コード例 #2
0
ファイル: PBStateTracker.cs プロジェクト: jasmaa/protobowl-vr
    /// <summary>
    /// Update display and state
    /// </summary>
    public IEnumerator UpdateDisp()
    {
        while (true)
        {
            if (!pb.isConnected())
            {
                continue;
            }

            // detect change in state
            if (oldState != pb.state)
            {
                oldState = pb.state;

                if (oldState == Protobowl.GameState.RUNNING)
                {
                    localTime = pb.data ["real_time"].AsLong;
                }
            }

            // detect new question
            if (pb.state == Protobowl.GameState.NEW_Q)
            {
                hasAddAnswer = false;
                pb.state     = Protobowl.GameState.RUNNING;
                InitDisp();
            }

            // run client-side display
            if (pb.state == Protobowl.GameState.RUNNING)
            {
                pb.hasBuzz = false;

                List <int> timing = Utils.ConvertJSONToList(pb.data ["timing"].AsArray);

                if (localIndex < timing.Count)
                {
                    var qList = pb.data ["question"].ToString().Split(' ');
                    disp = string.Join(" ", qList.Take(localIndex + 1).ToArray());

                    var currentInterval = Mathf.Round(timing [localIndex] * pb.data ["rate"]);
                    yield return(new WaitForSeconds(currentInterval / 1000));

                    localTime += (long)currentInterval;
                    localIndex++;
                }
                else
                {
                    var timePassed      = (localTime - pb.data ["time_offset"].AsLong - pb.data ["begin_time"].AsLong) / 1000f;
                    var currentInterval = 100;
                    if (timePassed < GetTotalTime())
                    {
                        localTime += currentInterval;
                        yield return(new WaitForSeconds(currentInterval / 1000f));
                    }
                    else
                    {
                        pb.state = Protobowl.GameState.IDLE;
                    }
                }
            }
            else
            {
                yield return(new WaitForSeconds(0.1f));
            }

            // auto-fill when question ends
            if (pb.state == Protobowl.GameState.IDLE)
            {
                disp = pb.data ["question"];

                // add answer to log
                if (!hasAddAnswer)
                {
                    pb.answerStack.Push(pb.GetAnswer());
                    hasAddAnswer = true;
                }
            }

            // ping server
            pb.Ping();
        }
    }