예제 #1
0
 //This is the listener that is called by the event manager
 //It transforms and adds the received report to the reports list
 void Record(string name, VRPNAnalog.AnalogReport report)
 {
     if (firstReport)
     {
         firstTime_sec = report.msg_time.tv_sec;
         firstTime_usec = report.msg_time.tv_usec;
         firstReport = false;
     }
     if (report.msg_time.tv_usec < firstTime_usec)
     {
         report.msg_time.tv_sec = report.msg_time.tv_sec - (firstTime_sec + 1);
         report.msg_time.tv_usec = (report.msg_time.tv_usec + 1000000) - firstTime_usec;
     }
     else
     {
         report.msg_time.tv_sec = report.msg_time.tv_sec - firstTime_sec;
         report.msg_time.tv_usec = report.msg_time.tv_usec - firstTime_usec;
     }
     VRPNAnalog.AnalogReportNew newReport = new VRPNAnalog.AnalogReportNew();
     VRPNManager.TimeValNew newMsgTime = new VRPNManager.TimeValNew();
     newMsgTime.tv_sec = (int)report.msg_time.tv_sec;
     newMsgTime.tv_usec = (int)report.msg_time.tv_usec;
     newReport.msg_time = newMsgTime;
     newReport.num_channel = report.num_channel;
     newReport.channel = report.channel;
     data.list.Add(newReport);
 }
예제 #2
0
    //Método que se encarga de estar pendiente de los mensajes que se envían desde los sensores análogos del dispositivo
    void CambioEnUnAnalogo(string name, VRPNAnalog.AnalogReport report)
    {
        //Info para el Log
        if (estaMostrandoInfoAnalogo)
        {
            string text;
            text = "Name: " + name;
            for (int i = 0; i < report.num_channel; i++)
            {
                text = text + " Channel " + i + ": " + report.channel[i];
            }
            Debug.Log(text);
        }

        //Si el control que se está revisando es el izquierdo
        if (sensor == 0)
        {
            //Joystick
            capsulas[5].localScale = new Vector3(capsulasEscalaOriginal[5].x * (1 + (float)report.channel[0]), capsulasEscalaOriginal[5].y, capsulasEscalaOriginal[5].z * (1 + (float)report.channel[1]));
            //Trigger
            capsulas[7].localScale = new Vector3(capsulasEscalaOriginal[7].x, capsulasEscalaOriginal[7].y * (1 + (float)report.channel[2]), capsulasEscalaOriginal[7].z);
        }
        //Si el control que se está revisando es el derecho
        else if (sensor == 1)
        {
            //Joystick
            capsulas[5].localScale = new Vector3(capsulasEscalaOriginal[5].x * (1 + (float)report.channel[3]), capsulasEscalaOriginal[5].y, capsulasEscalaOriginal[5].z * (1 + (float)report.channel[4]));
            //Trigger
            capsulas[7].localScale = new Vector3(capsulasEscalaOriginal[7].x, capsulasEscalaOriginal[7].y * (1 + (float)report.channel[5]), capsulasEscalaOriginal[7].z);
        }
    }
예제 #3
0
 //Auxiliar method that sends last frame report
 private void sendingReport(VRPNAnalog.AnalogReportNew lastReport)
 {
     VRPNAnalog.AnalogReport newReport = new VRPNAnalog.AnalogReport();
     VRPNManager.TimeVal newMsgTime = new VRPNManager.TimeVal();
     newMsgTime.tv_sec = (UInt32)lastReport.msg_time.tv_sec;
     newMsgTime.tv_usec = (UInt32)lastReport.msg_time.tv_usec;
     newReport.msg_time = newMsgTime;
     newReport.num_channel = lastReport.num_channel;
     newReport.channel = lastReport.channel;
     VRPNEventManager.TriggerEventAnalog(data.deviceType, data.deviceName, newReport);
 }
예제 #4
0
    //VRPNAnalogRecording Constructor
    public VRPNAnalogRecording(string nName, float nTime, VRPNAnalog.AnalogReports nData)
    {
        name = nName;
        reportTime = nTime;
        data = nData;
        e = data.list.GetEnumerator();

        while (e.MoveNext())
        {
            VRPNAnalog.AnalogReportNew report = e.Current;
            channels = report.num_channel;
            lastTime = report.msg_time.tv_sec + (report.msg_time.tv_usec / 1000000f);
        }

        e = data.list.GetEnumerator();
    }
예제 #5
0
    //Método que se encarga de estar pendiente de los mensajes que se envían desde los sensores análogos del dispositivo
    void CambioEnUnAnalogo(string name, VRPNAnalog.AnalogReport report)
    {
        //Info para el Log
        if (estaMostrandoInfoAnalogo)
        {
            string text;
            text = "Name: " + name;
            for (int i = 0; i < report.num_channel; i++)
            {
                text = text + " Channel " + i + ": " + report.channel[i];
            }
            Debug.Log(text);
        }

        //Posición: Notar que 'y' y 'z' se encuentran intercambiados e invertidos
        cubo.transform.position = new Vector3((float)report.channel[0] * 1f, (float)report.channel[2] * -1f, (float)report.channel[1] * -1f);
        //Rotación: Notar que 'y' y 'z' se encuentran intercambiados, y que 'x' se encuentra invertido
        //En este caso se pueden usar las entradas como ángulos de euler y convertirlos en cuaternión
        cubo.transform.localRotation = Quaternion.Euler((float)report.channel[3] * -45f, (float)report.channel[5] * 45f, (float)report.channel[4] * 45f);
    }
예제 #6
0
 //Método que se encarga de estar pendiente de los mensajes que se envían desde los sensores análogos del dispositivo
 void moverConRaton(string name, VRPNAnalog.AnalogReport report)
 {
     //Se debe notar que los valores que se reportan son de 0 a 1, siendo (0, 0) la esquina superior izquierda de la pantalla y (1, 1) la esquina inferior derecha de la pantalla
     this.transform.position = new Vector3((float)report.channel[0]*10 - 5, (1-(float)report.channel[1])*10 - 5, this.transform.position.z);
 }
 void moveWithMouse(string name, VRPNAnalog.AnalogReport report)
 {
     this.transform.position = new Vector3((float)report.channel[0]*10 -5, (1-(float)report.channel[1])*10 - 5, this.transform.position.z);
 }