示例#1
0
    // Awake is called **before** any Start methods.
    // so we make sure the NoiseTag controller is ready before
    // any game objects which may want to use it!
    void Awake()
    {
        if (_instance != null && _instance != this)
        {
            Destroy(this.gameObject);
            return;
        }
        _instance = this;
        DontDestroyOnLoad(this.gameObject); // keep the controller arround...

        // Switch to 640 x 480 full-screen at 60 hz, and put
        // VSYNC on, so we a) run fast, b) are time-accurate.
        Screen.SetResolution(Screen.width, Screen.height, FullScreenMode.ExclusiveFullScreen);
        // FORCE!! Sync framerate to monitors refresh rate
        // get the current display rate, and set the vSyncCount to get as close as possible
        // for the code bits
        QualitySettings.vSyncCount = 1;
        if (FRAMESPERCODEBIT <= 0) // set framesperbit to be close to target framerate
        {
            int   refreshRate  = Screen.currentResolution.refreshRate;
            float framesperbit = refreshRate / QualitySettings.vSyncCount / targetFrameRate;
            FRAMESPERCODEBIT = (int)Math.Round(framesperbit + .1);
        }

        nt = new Noisetag(new System.IO.StringReader(codebook.text), null, null);

        // setup the event handlers when the connection is up.
        // debug message handler : prints all new messages
        nt.stopFlicker(); // reset state
        nt.addMessageHandler(newMessageHandler);
        nt.addSelectionHandler(selectionHandler);
        nt.addPredictionHandler(newPredictionHandler);
        nt.addSignalQualityHandler(signalQualityHandler);
        nt.addNewTargetHandler(newTargetHandler);
        nt.setFramesPerBit(FRAMESPERCODEBIT);

        // init the info on the set of objIDs we are managing..
        if (objIDs == null)
        {
            objIDs = new int[127];
            for (int i = 0; i < objIDs.Length; i++)
            {
                objIDs[i] = i + 1; // N.B. objid > 0
            }
        }
        if (registeredobjIDs == null)
        {
            registeredobjIDs = new NoisetagBehaviour[objIDs.Length];
        }

        nframe    = 0;
        isRunning = false;

        // magic co-routine to record accurately the time the last frame was drawn
        StartCoroutine(recordFrameTime());

        // magic co-routine to make and maintain the decoder connection
        last_connected_time = nt.getTimeStamp();
        StartCoroutine(KeepTryingToConnect());
    }