コード例 #1
0
 /// <summary> Play an effect using the Thumper module on this glove (if it has any). </summary>
 /// <param name="effect"></param>
 /// <returns></returns>
 public bool SendThumperCmd(SenseGloveCs.ThumperEffect effect)
 {
     if (GloveData.firmwareVersion >= 4.6f)
     {
         nextThump = (int)effect; //added to queue
         Debug.Log("Queueing " + nextThump.ToString());
         return(true);
     }
     else if (linkedGlove != null && linkedGlove.IsConnected())
     {
         if (SG_Util.Average(lastBrakeLvls) < thumpFFBThreshold)
         {
             return(linkedGlove.SendThumperCmd(effect));
         }
     }
     return(false);
 }
コード例 #2
0
 /// <summary> Retrieve the angular velocity of this Grabscript in rad/s </summary>
 /// <returns></returns>
 public Vector3 GetAngularVelocity()
 {
     return(SG_Util.Average(this.angularVelocities));
 }
コード例 #3
0
 /// <summary> Retrieve the Velocity of this Grabscript in m/s </summary>
 /// <returns></returns>
 public Vector3 GetVelocity()
 {
     return(SG_Util.Average(this.velocities));
 }
コード例 #4
0
    /// <summary> Update and flush all commands for this Sense Glove. </summary>
    protected void FlushCmds() //only write brakecommands if we have recieved any.
    {
        int[] finalBrakeCmd = new int[5];
        int[] finalBuzzCmd  = new int[5];

        if (FFB_Enabled) //update finalBrakeCmd
        {
            if (brakeQueue.Count > 0)
            {
                for (int i = 0; i < brakeQueue.Count; i++)
                {
                    for (int f = 0; f < 5; f++)
                    {
                        finalBrakeCmd[f] = Mathf.Max(finalBrakeCmd[f], brakeQueue[i][f]);
                    }
                }
            }
            else
            {
                finalBrakeCmd = lastBrakeLvls; //no new cmds, so lets stay as we are.
            }
        }
        brakeQueue.Clear(); //clear buffer for next frame.


        for (int i = 0; i < buzzQueue.Count;)
        {
            buzzQueue[i].Update(Time.deltaTime);
            if (buzzQueue[i].FullyElapsed) //no more relevant cmds
            {
                buzzQueue.RemoveAt(i);     //do nothing
            }
            else
            {
                if (buzz_Enabled)
                {
                    buzzQueue[i].Merge(ref finalBuzzCmd); //add to final cmd
                }
                i++;
            }
        }

        int finalThump = this.nextThump;

        if (finalThump != (int)ThumperEffect.None && finalThump != (int)ThumperEffect.TurnOff &&
            (SG_Util.Average(finalBrakeCmd) >= thumpFFBThreshold || SG_Util.Average(finalBuzzCmd) >= thumpBuzzThreshold))
        {
            Debug.Log("Too much other jazz, reset Thump");
            finalThump = (int)ThumperEffect.None; //do not sent thumper commands if there is too much FFB active.
        }

        if (sendHaptics == HapticSendMode.OnChange)
        {
            if (finalThump != (int)ThumperEffect.None || !AlreadySent(finalBrakeCmd, lastBrakeLvls) || !AlreadySent(finalBuzzCmd, lastBuzzLvls))
            {
                WriteHaptics(finalBrakeCmd, finalBuzzCmd, finalThump);
            }
        }
        else if (sendHaptics == HapticSendMode.OnChangeRepeat)
        {
            if (finalThump != (int)ThumperEffect.None || !AlreadySent(finalBrakeCmd, lastBrakeLvls) || !AlreadySent(finalBuzzCmd, lastBuzzLvls))
            {
                cmdsSend = 1; //its a new command
                WriteHaptics(finalBrakeCmd, finalBuzzCmd, finalThump);
            }
            else if (cmdsSend < maxCmdRepeat)
            {
                cmdsSend++;
                WriteHaptics(finalBrakeCmd, finalBuzzCmd, finalThump);
            }
        }
        else if (sendHaptics == HapticSendMode.OnFrame)
        {
            WriteHaptics(finalBrakeCmd, finalBuzzCmd, finalThump);
        }
    }