/// <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); }
/// <summary> Retrieve the angular velocity of this Grabscript in rad/s </summary> /// <returns></returns> public Vector3 GetAngularVelocity() { return(SG_Util.Average(this.angularVelocities)); }
/// <summary> Retrieve the Velocity of this Grabscript in m/s </summary> /// <returns></returns> public Vector3 GetVelocity() { return(SG_Util.Average(this.velocities)); }
/// <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); } }